1.Selinux基础知识
selinux(Security Enhanced Linux)。一目了然,安全强化的linux。其实Selinux就是为了安全而设计了很多标签,一些和安全相关的进程如httpd,vsftpd等程序就被限制,如果某个文件贴上了相应的标签,和httpd,vsftpd等对应的标签一样,这些进程才会被允许访问。
SElinux是通过MAC的方式来控管进程,他控制的进程,他控制的主体是进程。而目标是该进程是否可以读取“文件资源”。先来说明一下相关性
1.主体(Subject)
就是管理的进程
2.目标(Object)
就是文件系统啦
3.策略(Policy)
targeted:针对关于网络服务限制较多,针对本机限制较少,是默认的策略
strict:完整的Selinux。很严格的限制
4.安全上下文(Security context)
主体与目标的安全上下文必须一样才能允许被访问
2.查看SELinux的状态
先看看Selinux开没开
上图可以看到selinux状态为Disabled就是关闭状态
vim /etc/sysconfig/selinux 修改SELINUX=enforcing
修改完后reboot (这种方式为永久性的系统在启动时会读取配置文件从而设置selinux状态)
这样我们就打开了selinux 用getenforce 命令可以看到此时selinux为enforcing(强制模式)
3.selinux对进程影响(这里用lftp服务举例)
文件的安全上下文(文件的安全标签或者文件的selinux信息):输入命令 ll -Z 即可
两个root后面就是安全上下文了
Identfy : role : type
身份识别 : 角色 :类型
身份识别:相当于账号方面的身份识别
root:表示root的账号身份。
system_u:表示系统程序方面的进程。就是进程啦
user_u:代表一般用户账号相关的身份
角色:说明这个数据是属于程,文件资源还是用户。
object_r:代表这是普通文件或者是目录
system_r:代表的是进程
类型:最重要的一个!!!!!就是标签了
type:在文件资源上称为Type
domain:在主体程序上称为domain
Identfy : role : type
身份识别 : 角色 :类型
身份识别:相当于账号方面的身份识别
root:表示root的账号身份。
system_u:表示系统程序方面的进程。就是进程啦
user_u:代表一般用户账号相关的身份
角色:说明这个数据是属于程,文件资源还是用户。
object_r:代表这是普通文件或者是目录
system_r:代表的是进程
类型:最重要的一个!!!!!就是标签了
type:在文件资源上称为Type
domain:在主体程序上称为domain
一个陈序在读取文件时只能读取带有特定标签的文件
我们首先在/mnt下建立文件westos然后mv到/var/ftp/pub下然后在/var/ftp/pub下再建立一个文件zxc
用ll -Z查看,可以发现两个文件安全上下文不同
下面我们登陆lftp服务在pub目录下用ls命令查看文件发现我们只能看到zxc一个文件
由此可以假想ftp服务只能访问
安全上下文为public_content_t的文件
这里我们也可以看到selinux的警告
下面我们用chcon命令改变westos安全上下文为public_content_t
再次登录ftp查看 发现可以看到了由此可见我们的假想正确
上面方法只是临时改变了文件安全上下文,当开启Selinux后Disable再开启就会将以前设置的Selinux改变其实系统有张表。每次再开启Selinux时。系统会重读这张表对目录或者文件设置Selinux的类型。系统不认识的就设成默认了。
先看看那张表
先看看那张表
/srv/([^/]*/)?ftp(/.*)? all files system_u:object_r:public_content_t:s0 /var/ftp(/.*)? all files system_u:object_r:public_content_t:s0 /var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0 /var/ftp/etc(/.*)? all files system_u:object_r:etc_t:s0 /var/ftp/lib(/.*)? all files system_u:object_r:lib_t:s0 /var/ftp/lib/ld[^/]*\.so(\.[^/]*)* regular file system_u:object_r:ld_so_t:s0 再表中添加一项,给/dir一个public_content_t的类型[root@localhost]#semanage fcontext -l |grep '\bftp\b'
[root@localhost]# semanage fcontext -a -t public_content_t '/dir(/.*)?'
[root@localhost]# semanage fcontext -l |grep '\bdir\b'
/usr/share/texlive/texmf/web2c/mktex(dir|nam|upd) all files system_u:object_r:bin_t:s0
/var/run/runlevel\.dir all files system_u:object_r:initrc_var_run_t:s0
/dir(/.*)? all files system_u:object_r:public_content_t:s0
/usr/share/texlive/texmf/web2c/mktex(dir|nam|upd) all files system_u:object_r:bin_t:s0
/var/run/runlevel\.dir all files system_u:object_r:initrc_var_run_t:s0
/dir(/.*)? all files system_u:object_r:public_content_t:s0
-d是删除
[root@localhost]# semanage fcontext -d '/dir(/.*)?'
[root@localhost]# semanage fcontext -l |grep '\bdir\b'
/usr/share/texlive/texmf/web2c/mktex(dir|nam|upd) all files system_u:object_r:bin_t:s0
/var/run/runlevel\.dir all files system_u:object_r:initrc_var_run_t:s0