selinux基本概念 | 开启selinux策略 | 安全上下文的临时修改 | 安全上下文的永久修改 | 如何修复selinux | selinux对服务功能的影响 | 系统自动排错
一,Security-Enhanced Linux
SELINUX ( 安全增强型 Linux ) 是可保护系统安全性的额外机制,在某种程度上 , 它可以被看作是与标准权限系统并行的权限系统。在常规模式中 , 以用户身份运行进程 , 并且系统上的文件和其他资源都设置了权限标签(控制哪些用户对哪些文件具有哪些访问权,SELINUX 的另一个不同之处在于 , 若要访问文件 ,你必须具有普通访问权限和 SELINUX 访问权限。因此 , 即使以超级用户身份root 运行进程 , 根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源 )
上下文的重要部分是第三个用冒号分隔的字段。
什么确定文件的初始 SELinux 上下文 ? 通常是父目录。将父目录的上下文指定给新创建的文件, touch命令时会产生作用 , 但是如果文件是在其他位置创建的并且保留了权限 ( mv ) 则还将保留 了原来文件的SELinux上下文,移动到其他目录下是不会更改的。
二,开启selinux策略
1,getenforce查看selinux是否开启
[[email protected] ~]# getenforce
Disabled ###没有开启
此时-Z查看文件###ps 、 ls 、 cp都可以设置或者显示安全上下文
2,vim /etc/sysconfig/selinux
SELINUX=disabled 改为enforcing
3,reboot
此时-Z查看文件,出现了安全上下文
三,安全上下文的临时修改
enforcing - SELinux security policy is enforced. setenforce 1 ###强制
permissive - SELinux prints warnings instead of enforcing. setenforce 0 ###警告
enforcing和disabled转换时需要修改配置文件并重启
1,在student用户家目录中建立文件file1
2,在/mnt下建立文件file2,并且将file2移动到student用户家目录
不要用cp,cp文件的安全上下文会改变,mv不会
3,student用户登陆ftp查看
4,由于是enforcing强制模式,file1和file2安全上下文不一样,所以看不到file2
方法一:改为permissive警告模式
[[email protected] student]# getenforce
Enforcing
[[email protected] student]# setenforce 0
[[email protected] student]# getenforce
Permissive
注意:警告模式虽然也能看到,但是这是不安全的,并且这样开启selinux就没了意义。
再次查看
方法二:chcon直接修改file2的安全上下文,使其和file1一样
chcon - change file SELinux security context
chcon -t xxx file ###-t是设置文件的安全上下文
###-R 是第归设置(目录本身和下面的所有文件)
####两者安全上下文一样
注意:这种开启是一次性的,当重启selinux(> disabled reboot > enforcing reboot )之后又会改变过来,但是方法二中,由于已经移动到student目录下面的,所以重启之后表面上看安全上下文还是user_home_t,但实际上安全上下文是其修改为enforcing之后系统加的,只是和我们自己chcon加的一样。
5,目录本身的安全上下文和目录下面的文件的安全上下文是一样的。
semanage fcontext -l | grep /var/ftp ###过滤ftp目录下面的所有文件
semanage fcontext- SELinux Policy Management file context tool
这里不能grep /var/ftp/ 否则得到的不是ftp目录本身的,无法提供更改ftp目录下文件安全上下文的有效信息
/var/ftp(/.*)? 是指/var/ftp以及下面的所有文件(包括隐藏文件)的所有文件的所有文件.....
/var/ftp(/.*)? === /var/ftp/* === /var/ftp/*/*/*
四,安全上下文的永久修改
1,首先修改ftpd的默认发布目录,建立文件,firefox测试 ###注意是在强制模式下,警告模式没意义
网页测试
###看不到file
2,修改为永久的安全上下文
[[email protected] ftpdir]# semanage fcontext -l | grep /ftpdir ####查看内核识别的安全上下文,发现/ftpdir不在列表中
semanage fcontext -a -t public_content_t '/ftpdir(/.*)?' ####-a 添加 -t安全上下文类型
###/ftpdir(/.*) 对文件本身和里面的所有隐藏文件
###?匹配单个文件
###出现搜索结果
3,restorecon -FvvR /ftpdir ###刷新列表,否则安全上下文还是没有改变
###结果显示更改了安全上下文,网页可见
五,如何修复selinux?
selinux启用过程中出现了问题,建立/.autorelable文件,然后直接reboot,这个过程相当于(> disabled reboot 然后 > enforcing reboot)
六,selinux对服务功能的影响
1,对ftp的影响
###警告模式
###可以上传文件,但是这样没意义,和不开启selinux一样
###强制模式
###不可以随便上传文件
###强制模式下上传文件
强制模式下有服务的布尔值
getsebool - get SELinux boolean value(s)
-a Show all SELinux booleans.
###上传功能关闭
开启强制模式下的ftp_home_dir功能
setsebool -P ftp_home_dir on ###-P表示永久
此时ftp可以正常上传
注意:
#1,getsebool -a | grep ftp 这个是查看与ftp有关的开关 ftp_home_dir --> on 时可以在lftp上面上传文件,前提是要对改目录有写的权限
#2,/.autorelable在这里就可以使用,如果打开开关,但是getsebool -a | grep ftp却查看不到,就建立此文件,然后reboot
2,对httpd的影响
传输协议:udp是不管对方在不在就发送给你(短信,速度快),tcp存在三次握手过程(接视频,http,安全)
端口:系统能开启的端口是2^32或2^64(这个和系统是多少位有关),但是一般不使用1024之后的,1024之后一般是随即开启的,http的默认端口是80,https的默认端口是443
修改端口:修改端口是要确定端口好没有服务使用的,比如21端口是ftp使用了,就不能再把其他服务端口修改为21
vim /etc/httpd/conf/httpd.conf
Listen 6666 ###把端口80修改为6666
[[email protected] ftp]# systemctl restart httpd ####在强制模式写这样是启动不了的
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
[[email protected] httpd]# setenforce 0
[[email protected] httpd]# systemctl restart httpd ###为0的情况下能启动,但是为0的情况是警告模式,这样是不安全的
semanage port -l查看端口号,http的端口是80,81,433......但是没有6666
semanage port -a -t http_port_t -p tcp 6666 ####添加6666到列表里面###注意格式,可以man semanage port查看格式
#####此时服务可以成功启动
注意:
cat /etc/services | grep http 和semanage port -l | grep http 都可以查看服务和对应的端口号
不过semanage port一般是查看服务有哪些端口,/etc/services是查看服务在使用哪一个端口
七,setroubleshoot系统自动排错
1,westos文件的安全上下文和ftp目录是不一样的,网页上是看不见的
###清空日志
###访问时会产生日志
2,[[email protected] pub]# cat /var/log/messages ###这里面会产生新的日志并且setroubleshoot会分析日志自动给出排错指令
restorecon -v '$FIX_TARGET_PATH' ####$FIX_TARGET_PATH就是路径
3,执行setroubleshoot分析给出的排错指令
####看这个结果其实就是更改了安全上下文
注意:
1,setroubleshoot这个排错只是给出了一种解决方案,很多情况下是不安全的
2,如果卸载了这个软件,/var/log/messages 里面就没有解决方案了
3,访问日志文件其实是在/var/log/audit/audit.log里面
##############################################################################
yum clean all没有结果时可能需要kill 进程