selinux实战手册

  1. 云栖社区>
  2. 博客>
  3. 正文

selinux实战手册

技术小胖子 2017-11-15 18:16:00 浏览1068
展开阅读全文

#selinux实战手册

#SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。


#selinux简介

   SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。

NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。

    RHEL、CENTOS、UBUNTU等Linux发行版系统默认都开启了selinux安全功能,如果不熟悉用法,可直接将selinux关闭。


#selinux状态设置

查状态:getenforce

临时开启/关闭selinux:setenforce   1/0   [1开启,0关闭]


#配置文件:

cat  /etc/selinux/config   //有效配置如下:

SELINUX=enforcing     //状态为强制

SELINUXTYPE=targeted

说明:状态有enforcing强制,permissive自由(宽容),disable禁用。

     Enforcing状态,就是你违反了策略,你就无法继续操作下去。

     permissive状态,就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用。

相当于Debug模式。


技巧:在内核加载过程中关闭selinux,grub界面执行:

kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet selinux=0

-----------------

查询所有布尔设置状况:getsebool -a

查看文件的selinux上下文件属性:ls  -Z   /etc/hosts

查看目录的:ls  -dZ   /etc


chcon:更改文件的selinux标签

mkdir   /sea    

ls  -dZ   /sea

chcon  -t  etc_t   /sea    //给目录/sea设置selinux安全类型

cp  -Z   /etc/passwd   /sea/pa    //复制文件及其selinux属性

ls  -Z  /sea/pa      //查看文件的selinux属性


-----------------

chcon命令

功能:修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。

使用--reference选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于/usr/bin/chcon。 

语法:chcon [选项]... 环境 文件... 

      chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件... 

      chcon [选项]... --reference=参考文件 文件... 

选项:--help:显示此帮助信息并退出。

     -h, --no-dereference:影响符号连接而非引用的文件。 

     --reference=参考文件:使用指定参考文件的安全环境,而非指定值。 

     -R, --recursive:递归处理所有的文件及子目录。 

     -v, --verbose:为处理的所有文件显示诊断信息。 

     -u, --user=用户:设置指定用户的目标安全环境。 

     -r, --role=角色:设置指定角色的目标安全环境。 

     -t, --type=类型:设置指定类型的目标安全环境。 

     -l, --range=范围:设置指定范围的目标安全环境。 

以下选项是在指定了-R选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。 

     -H:如果命令行参数是一个通到目录的符号链接,则遍历符号链接。 

     -L:遍历每一个遇到的通到目录的符号链接。 

     -P:不遍历任何符号链接(默认)。  

     --version:显示版本信息并退出。 


实例 如果你想把这个ftp共享给匿名用户的话,需要开启以下: 

chcon -R -t public_content_t /var/ftp 


如果你想让你设置的FTP目录可以上传文件的话,SELINUX需要设置: 

chcon -t public_content_rw_t /var/ftp/incoming 


允许用户HHTP访问其家目录,该设定限仅于用户的家目录主页: 

setsebool -P httpd_enable_homedirs 1 

chcon -R -t httpd_sys_content_t ~user/public_html 


如果你希望将samba目录共享给其他用户,你需要设置: 

chcon -t samba_share_t /directory 


共享rsync目录时: 

chcon -t public_content_t /directories


-----------------


##查询SElinux策略内各项规则的布尔值。getsebool

语法:getsebool [-a] [布尔值条款]

选项:-a  列出目前系统上面的所有布尔值条款设置为开启或关闭值。


实例 查询本系统内所有的布尔值设置状况: 

getsebool -a    //部分结果如下

allow_ftpd_anon_write --> off     //是否允许ftpd匿名写操作,off为关,on为开

allow_ftpd_full_access --> off     //是否允许ftpd完全访问

allow_ftpd_use_cifs --> off       //允许ftpd使用cifs通用互联网文件系统

allow_ftpd_use_nfs --> off        //允许ftpd使用nfs

ftp_home_dir --> off        //允许访问ftp家目录

ftpd_connect_db --> off        //允许ftpd连接数据

ftpd_use_fusefs --> off        //允许ftpd使用fusefs

ftpd_use_passive_mode --> off        //允许ftpd被动模式

httpd_enable_ftp_server --> off      //在httpd上启用ftp服务

tftp_anon_write --> off      //允许tftp匿名写权限

tftp_use_cifs --> off      //允许tftp使用cifs

tftp_use_nfs --> off      //允许tftp使用nfs

allow_httpd_anon_write --> off   //允许httpd匿名写权限

httpd_enable_homedirs --> off    //允许httpd访问用户家目录

  


getsebool httpd_enable_homedirs 

setsebool -P httpd_enable_homedirs=0   //0是关闭 1是开启


-------------------


##SELinux的策略与规则管理相关命令:

seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。


##setsebool命令

功能:用来修改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


--------------------

restorecon命令

功能:用来恢复SELinux文件属性即恢复文件的安全上下文。 

语法 restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...] 

选项 -i:忽略不存在的文件。

-f:infilename 文件 infilename 中记录要处理的文件。

-e:directory 排除目录。 -R/-r:递归处理目录。

-n:不改变文件标签。 

-o/outfilename:保存文件列表到 outfilename,在文件不正确情况下。 

-v:将过程显示到屏幕上。 

-F:强制恢复文件安全语境。 


实例:假设CentOS安装了apache,网页默认的主目录是/var/www/html,我们经常遇到这样的问题,

在其他目录中创建了一个网页文件,然后用mv移动到网页默认目录/var/www/html中,但是在浏览器中

却打不开这个文件,这很可能是因为这个文件的SELinux配置信息是继承原来那个目录的,

与/var/www/html目录不同,使用mv移动的时候,这个SELinux配置信息也一起移动过来了,从而导致

无法打开页面,具体请看下面的实例: /*使用CentOS举例,如果默认没有安装apache,确保网络连接,

使用下面的命令安装

*/ [root@linuxde.net ~]# yum install httpd /*

我们在root的家目录新建一个html文件

*/ [root@linuxde.net ~]# pwd /root [root@linuxde.net ~]# vi index.html /*

随便输入一段文字,保存退出

*/ welcome to www.linuxde.net /*将这个文件mv到网页默认目录下*/

[root@linuxde.net ~]# mv index.html /var/www/html/ 

/*

 * 这个时候我们使用firefox浏览器输入127.0.0.1/index.html发现打不开,

 * 查看一下SELinux的日志文件,发现了下面这一段报错信息,从这个报错信息不难看出, 

 * 进程httpd访问网页主目录中的index.html时被SELinux阻止,原因是因为,SELinux配置信息不正确, 

 * 正确的SELinux配置信息应该是scontext=后面的部分,

 * 而index.html文件的SELinux配置信息却是tcontext=后面的部分,

 * 从tcontext=的第三段“admin_home_t”不难看出,这个文件的SELinux配置信息是root用户家目录的。

 */ type=AVC msg=audit(1378974214.610:465): avc: denied { open } for pid=2359 

 comm="httpd" path="/var/www/html/index.html" 

 dev="sda1" ino=1317685 scontext=system_u:system_r:httpd_t:s0 

 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file 


 /* 使用ls -Z也可以看出,文件和目录的SELinux信息不匹配*/ 

 [root@linuxde.net html]# ls -Z /var/www/html/ 

 .... unconfined_u:object_r:admin_home_t:s0 index.html 

 [root@linuxde.net html]# ls -Zd /var/www/html/ 

 .... system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ 

 /*使用restorecon来恢复网页主目录中所有文件的SELinux配置信息(如果目标为一个目录,可以添加-R参数递归)*/

 [root@linuxde.net html]# restorecon -R /var/www/html/


-------------------

seinfo命令

功能:是用来查询SELinux的策略提供多少相关规则,一个主体进程能否读取到目标文件资源的重点是在于SELinux的策略以及策略内的各项规则,

然后再通过该规则的定义去处理各项目标文件的安全上下文,尤其是“类型”部分。

语法 seinfo(选项) 

选项 -A:列出SELinux的状态、规则布尔值、身份识别、角色、类型等所有信息。 

-t:列出SELinux所有类型(type)的种类。 

-r:列出SELinux所有角色(role)的种类。 

-u:列出SELinux所有身份识别(user)的种类。 

-b:列出所有规则的种类(布尔值)。 


实例 列出与httpd有关的规则: 

seinfo -b | grep httpd


-------------------

semanage命令

功能:是用来查询与修改SELinux默认目录的安全上下文。

SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。 

语法: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来查询所有的目录默认值,也能够使用它来增加默认值的设置!


-------------------------

seinfo命令

功能:使用seinfo命令可以查询SELinux的策略提供多少相关规则,如果查到的相关类型或者布尔值,想要知道详细规则时,使用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





      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1952219,如需转载请自行联系原作者




网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注