一、SELinux安全上下文查看方法
SELinux 管理过程中,进程是否可以正确地访问文件资源,取决于它们的安全上下文。进程和文件都有自己的安全上下文,SELinux 会为进程和文件添加安全信息标签,比如 SELinux 用户、角色、类型、类别等,当运行 SELinux 后,所有这些信息都将作为访问控制的依据。
首先,通过一个实例看看如何查看文件和目录的安全上下文,执行命令如下:
[root@localhost ~]# ls -Z #使用选项-Z查看文件和目录的安全上下文 -rw——-.root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
查看进程的安全上下文呢,只需使用 ps 命令即可。命令如下:
[root@localhost ~]# service httpd start #启动apache服务 [root@localhost ~]# ps auxZ | grep httpd unconfined_u:system_r:httpd_t:s0 root 25620 0.0 0.5 11188 3304 ? Ss 03:44 0:02 /usr/sbin/httpd
system_u:object_r:httpd_sys_content_t:s0:[类别] #身份字段:角色:类型:灵敏度:[类别]
1) 身份字段(user)
用于标识该数据被哪个身份所拥有,相当于权限中的用户身份。这个字段并没有特别的作用,知道就好。常见的身份类型有以下 3 种:
1.- root:表示安全上下文的身份是 root。 2.- system_u:表示系统用户身份,其中“u”代表 user。 3.- user_u:表示与一般用户账号相关的身份,其中“u”代表 user。 user 字段只用于标识数据或进程被哪个身份所拥有,一般系统数据的 user 字段就是 system_u,而用户数据的 user 字段就是 user_u。
seinfo 命令格式如下:
[root@localhost ~]# seinfo [选项] 选项: -u: 列出SELinux中所有的身份(user); -r: 列出SELinux中所有的角色(role); -t: 列出SELinux中所有的类型(type); -b: 列出所有的布尔值(也就是策略中的具体规则名称); -x: 显示更多的信息;
2) 角色(role)
主要用来表示此数据是进程还是文件或目录。这个字段在实际使用中也不需要修改,所以了解就好。
常见的角色有以下两种:
-
1.- object_r:代表该数据是文件或目录,这里的“_r”代表 role。
-
2.- system_r:代表该数据是进程,这里的“_r”代表 role。
3) 类型(type)
类型字段是安全上下文中最重要的字段,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配,如果匹配则可以访问。
注意,类型字段在文件或目录的安全上下文中被称作类型(type),但是在进程的安全上下文中被称作域(domain)。也就是说,在主体(Subject)的安全上下文中,这个字段被称为域;在目标(Object)的安全上下文中,这个字段被称为类型。域和类型需要匹配(进程的类型要和文件的类型相匹配),才能正确访问。
4) 灵敏度
灵敏度一般是用 s0、s1、s2 来命名的,数字代表灵敏度的分级。数值越大,代表灵敏度越高。
5) 类别
类别字段不是必须有的,所以我们使用 ls 和 ps 命令查询的时候并没有看到类别字段。
二、SELinux安全上下文的修改和设置(chcon和restorecon命令)
chcon 命令格式如下:
[root@localhost ~]# chcon [选项] 文件或目录
-R: 递归,当前目录和目录下的所有子文件同时设置;
-t: 修改安全上下文的类型字段,最常用;
-u: 修改安全上下文的身份字段;
-r: 修改安全上下文的角色字段;
restorecon 命令格式如下:
[root@localhost ~] *# restorecon [选项】 文件或目录
-R:递归.当前目录和目录下所有的子文件同时恢复;
-V:把恢复过程显示到屏幕上;
三、SELinux默认安全上下文的查询和修改(semanage命令)
semanage 命令的基本格式如下:
[root@localhost ~]# semanage [login|user|port|interface|fcontext|translation] -l [root@localhost ~]# semanage fcontext [选项] [-first] file_spec
其中,fcontext 主要用于安全上下文方面,-l 是查询的意思。除此之外,此命令常用的一些选项及含义
-a:添加默认安全上下文配置
-d:删除指定默认安全上下文
-m:修改指定默认安全上下文
-t:设定默认安全上下文的类型
Selinux端口标签
查看端口标签
semanage port -l
添加端口
semanage port -a -t port_label -p tcp|upd PORT
semanage port -a -t http_port_t -p tcp 8998
删除端口
semanage port -d -t port_lable -p tcp|udp PORT
semanage port -d -t http_port_t -p tcp 8998
修改现有端口为新标签
emanage port -m -t port_label -p tcp|upd PORT
semanage port -m -t http_port_t -p tcp 8998
我们查看一下系统中httpd服务支持的端口可以使用
semanage port -a -t http_port_t -p tcp 8998
可以看到httpd服务支持的几个端口