SELinux默认安全上下文的查询和修改
那么,默认安全上下文该如何查询和修改呢?这就要使用 semanage 命令了。该命令的基本格式如下:
[root@localhost ~]# semanage [login|user|port|interface|fcontext|translation] -l
[root@localhost ~]# semanage fcontext [选项] [-first] file_spec
选项 | 含义 |
---|---|
-a | 添加默认安全上下文配置。 |
-d | 删除指定的默认安全上下文。 |
-m | 修改指定的默认安全上下文。 |
-t | 设定默认安全上下文的类型 |
【例 1】查询默认安全上下文。
[root@localhost ~]# semanage fcontext -l
#查询所有的默认安全上下文
…省略部分输出…
/var/www(/.*)? all files
system_u:object_r:httpd_sys_content_t:s0
…省略部分输出…
#能够看到/var/www/目录下所有内容的默认安全上下文都是httpd_sys_content_t
【例 2】修改默认安全上下文。
那么,可以修改目录的默认安全上下文吗?当然可以,举个例子:
[root@localhost ~]# mkdir /www
#新建/www/目录,打算用这个目录作为apache的网页主目录,而不再使用/var/www/html/目录
[root@localhost ~]# ls -Zd /www/
drwxr-xr-x.root root unconfined_u:object_r:default_t:s0 /www/
#而这个目录的安全上下文类型是default_t,那么apache进程当然就不能访问和使用/www/目录了
[root@localhost ~]# semanage fcontext -l | grep "/www"
#查询/www/目录的默认安全上下文
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t "/www(/.*)?"
#这条命令会给/www/目录及目录下的所有内容设定默认安全上下文类型是httpd_sys_content_t
[root@localhost ~# semanage fcontext -l | grep "/www"
…省略部分输出…
/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
#/www/目录的默认安全上下文出现了
[root@localhost ~]# ls -Zd /www/
drwxr-xr-x.root root unconfined_u:object_r:default_t:s0 /www/
#但是查询发现/www/目录的安全上下文并没有进行修改,那是因为我们只修改了默认安全上下文,而没有修改目录的当前安全上下文
[root@localhost ~]# restorecon -Rv /www/
restorecon reset /www context
unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
#恢复一下/www/目录的默认安全上下文,发现类型已经被修改为httpd_sys_content_t