SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
seinfo 命令
seinfo命令是用来查询SELinux的策略提供多少相关规则,一个主体进程能否读取到目标文件资源的重点是在于SELinux的策略以及策略内的各项规则,然后再通过该规则的定义去处理各项目标文件的安全上下文,尤其是“类型”部分。
-A:列出SELinux的状态、规则布尔值、身份识别、角色、类型等所有信息。
-t:列出SELinux所有类型(type)的种类。
-r:列出SELinux所有角色(role)的种类。
-u:列出SELinux所有身份识别(user)的种类。
-b:列出所有规则的种类(布尔值)。
实例
列出与httpd有关的规则:
seinfo -b | grep httpd
sesearch命令
如果查到的相关类型或者布尔值,想要知道详细规则时,使用sesearch命令查询。
语法
sesearch [-a] [-s 主体类型] [-t 目标类型] [-b 布尔值]
选项
-a:列出该类型或布尔值的所有相关信息
-t:后面还要接类型,例如 -t httpd_t
-b:后面还要接布尔值的规则
实例
-b httpd_enable_ftp_server 实例
找出目标文件资源类型为httpd_sys_content_t的有关信息:
sesearch -a -t httpd_sys_content_t
找出主体进程为httpd_t且目标文件类型为httpd相关的所有信息:
sesearch -s httpd_t -t httpd_* -a
查看布尔值httpd_enable_homedirs设置了多少规则
sesearch -b httpd_enable_homedirs -a
getsebool命令
是用来查询SElinux策略内各项规则的布尔值。
语法
getsebool [-a] [布尔值条款]
选项
-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。
实例
查询本系统内所有的布尔值设置状况:
getsebool -a
NetworkManager_disable_trans -->
off allow_console_login -->
setsebool命令
setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组。
语法
setsebool [-P] 布尔值=[0|1]
选项
-P:直接将设置值写入配置文件,该设置数据将来会生效的。
实例
允许vsvtp匿名用户写入权限:
setsebool -P allow_ftpd_anon_write=1
如果你希望你的ftp用户可以访问自己的家目录的话,需要开启:
setsebool -P ftp_home_dir 1
如果你希望将vsftpd以daemon的方式运行的话,需要开启:
setsebool -P ftpd_is_daemon 1
你可以让SElinux停止保护vsftpd的daemon方式动行:
setsebool -P ftpd_disable_trans 1
HTTP被设置允许cgi的设置:
setsebool -P httpd_enable_cgi 1
允许用户HHTP访问其家目录,该设定限仅于用户的家目录主页:
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t ~user/public_html
允许httpd访问终端:
setsebool -P httpd_tty_comm 1
关闭Selinux的关于httpd进程守护的保护:
setsebool -P httpd_disable_trans 1
service httpd restart
关于named、master更新selinux设定:
setsebool -P named_write_master_zones 1
关闭named的进程守护保护:
setsebool -P named_disable_trans 1
service named restart
Selinux将本机的NFS共享设置成只读:
setsebool -P nfs_export_all_ro 1
SElinux将本机的NFS共享设置成可读可写:
setsebool -P nfs_export_all_rw 1
如果你想要将远程NFS的家目录共享到本机,需要开启:
setsebool -P use_nfs_home_dirs 1
如果samba服务器共享目录给多个域,则需要:
setsebool -P allow_smbd_anon_write=1
samba服务器要共享家目录时:
setsebool -P samba_enable_home_dirs 1
如果你需在本机上使用远程samba服务器的家目录:
setsebool -P use_samba_home_dirs 1
关闭selinux关于samba的进程守护的保护:
setsebool -P smbd_disable_trans 1
service smb restart
允许rsync其他用户写入时:
setsebool -P allow_rsync_anon_write=1
停止rsync的进程保护
setsebool -P rsync_disable_trans 1
允许系统使用kerberos:
setsebool -P allow_kerberos 1
系统工作在nis环境时:
setsebool -P allow_ypbind 1
semanage命令
semanage命令是用来查询与修改SELinux默认目录的安全上下文。
语法
semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
选项
-l:查询。
fcontext:主要用在安全上下文方面。
-a:增加,你可以增加一些目录的默认安全上下文类型设置。
-m:修改。
-d:删除。
实例
查询一下/var/www/html的默认安全性本文的设置:
semanage fcontext -l
SELinux fcontext type Context
....(前面省略)....
/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
....(後面省略)....
如上面例子所示,我们可以查询的到每个目录的安全性本文!而目录的设定可以使用正则表达式去指定一个范围。那么如果我们想要增加某些自定义目录的安全性本文呢?举例来说,我想要色设置/srv/samba成为 public_content_t的类型时,应该如何设置呢?
用semanage命令设置/srv/samba目录的默认安全性本文为public_content_t:
mkdir /srv/samba
ll -Zd /srv/samba
drwxr-xr-x root root root:object_r:var_t /srv/samba
如上所示,默认的情况应该是var_t这个咚咚的!
semanage fcontext -l | grep ‘/srv‘
/srv/.* all files system_u:object_r:var_t:s0
/srv/([^/]*/)?ftp(/.*)? all files system_u:object_r:public_content_t:s0
/srv/([^/]*/)?www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv/([^/]*/)?rsync(/.*)? all files system_u:object_r:public_content_t:s0
/srv/gallery2(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv directory system_u:object_r:var_t:s0 //看这里!
上面则是默认的/srv底下的安全性本文资料,不过,并没有指定到/srv/samba。
semanage fcontext -a -t public_content_t "/srv/samba(/.*)?"
semanage fcontext -l | grep ‘/srv/samba‘
/srv/samba(/.*)? all files system_u:object_r:public_content_t:s0
cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Please use the semanage command to make changes
/srv/samba(/.*)? system_u:object_r:public_content_t:s0 #写入这个档案
restorecon -Rv /srv/samba* #尝试恢复默认值
ll -Zd /srv/samba
drwxr-xr-x root root system_u:object_r:public_content_t /srv/samba/ #有默认值,以后用restorecon命令来修改比较简单!
semanage命令的功能很多,这里主要用到的仅有fcontext这个选项的用法而已。如上所示,你可以使用semanage来查询所有的目录默认值,也能够使用它来增加默认值的设置!