#################1.什么是selinux#######################################
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。
selinux:内核级加强型防火墙,影响程序的访问文件,影响程序的服务程序功能,影响服务所使用的资源。
selinux影响程序的访问文件是通过安全上下文来控制的,影响服务程序的功能是通过sebool值来控制的。selinux开启后会关闭系统认为所有不安全的功能,并组织所有认为不不安全的操作 .
################2.selinux状态控制####################################################
(1)查看selinux状态
命令:getenforce #查询结果有3种状态
1、enforcing #强制模式,拒绝不被警告。
2、disabled #关闭模式
3、permissive #selinux有效,即是违法策略,依旧可以继续操作,但是会有警告。
注意:当selinux状态下。可以查看警告信息:cat /var/log/audit/audit.log
(2)更改selinux状态
/etc/sysconfig/selinux ##selinux状态控制文件
vim /etc/sysconfig/selinux #文件编辑
reboot #重启
测试:
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]#vim /etc/sysconfig/selinux #修改selinux=Enforcing
[root@localhost ~]#reboot #重启
[root@localhost ~]# getenforce
Enforcing
注意:设置保存完后,需重启才能生效。permissive模式和enforce模式切换不要重启。
(3)selinux临时状态设定
setenforce 0 ##警告模式设定(重启后恢复)
setenforce 1 ##强制模式设定(重启后恢复)
测试:
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# setenforce 1
[root@localhost ~]# getenforce
Enforcing
强制状态下看不到文件,但在警告状态下可以看到文件
eg:
#################3.selinux安全上下文管理##############################################################
做selinux安全上下文时首先需要开启vsftpd,关闭firewalld
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
(1)临时修改安全上下文
当安全上下文匹配时访问允许,若不匹配时则不被允许;特定的文件被特定的程序访问
(例如:ftpd_t 只能访问public_content_t的文件)
移动:不改变文件的属性和权限,重命名的过程;
复制:改变文件的属性,新建的过程
touch /mnt/westos 创建文件
mv /mnt/westos /var/ftp 移动到/var/ftp
ls -Z 查看上下文
semanage fcontext -l | grep /var/ftp 查看安全上下文
chcon -t public_content_t westos2 更改安全上下文的类型
第一步:开启ftp服务关闭防火墙,移动文件后查看/var/ftp目录。
第二步:在强制模式下,查看不到移动过去的westos1。查看/var/ftp的安全上下文
第三步:查看/var/ftp所有的安全上下文,然后将westos1更改为public_content_t安全上下文,再次查看时,
可以看到westos1文件。
注意:将/etc/sysconfig/selinux改为disable后reboot重启,重启后再改为enforcing再次reboot重启,
表示将selinux重启一次。再次查看临时改的文件安全上下文就没有了。
(2)永久修改安全上下文mkdir /westos
touch /westos/westosfile
vim /etc/vsftpd/vsftpd.conf
anon_root=/westos
systemctl restart vsftpd l
ftp 172.25.254.228 不能查看家目录文件
第一步:建立目录,编写匿名权限。
第二步:重启配置文件,匿名登录查看不到建立的目录,这时查看目录的目标上下文是什么
第三步:查看/var/ftp的源上下文是什么,并且查看默认/westos安全上下文列表
第四步:添加永久安全上下文为public_content_t,并刷新重启,看到效果。
(相当于selinux 自动初始化),
然后重启系统,selinux恢复。
##########################4.selinux布尔值#############################################
setsebool -P ftp_home_dir on 打开服务开关(-P 永久,为了使系统更安全)
lftp 172.25.254.228 -u student
put /etc/passwd 上传失败
setsebool -a | grep ftp
setsebool -P ftp_home_dir on
lftp 172.25.254.228 -u student 上传成功
第一步:切换到student下,下载文件,提示553的报错(权限过小)
第二步:查看ftp的布尔值情况,并且修改布尔值策略改为开启
第三步:开启布尔值策略后再次下载,看到结果
##############################5.监控selinux冲突#######################################
当新建文件|目录时,在浏览器查看ftp://ip,查看不到新建文件、目录,并且产生日志
/var/log/messages #查看报错后,程序提供解决方案
/var/log/audit/audit.log #查看报错信息
其中提供解决方案的不是系统而是一个软件程序,但此工具不安全,只是解决当前不能访问的问题;
查找安装包:rpm -qa | grep setrouble ;如果删除此工具,在日志/var/log/messages下是不会提供方案,
但是/var/log/audit/audit.log中可以看到日志 。
[root@localhost ~]# cd /var/ftp
[root@localhost ftp]# rm -fr *
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf #关闭用户家目录修改
注释#anon_root=/westos
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# touch /mnt/westos
[root@localhost ftp]# mv /mnt/westos /var/ftp
[root@localhost ftp]# > /var/ftp/messages
网页浏览: ftp://172.25.254.228 #浏览器测试:看不到文件westos,并产生日志
[root@localhost ftp]# cat /var/log/audit/audit.log ##查看日志
[root@localhost ftp]# cat /var/log/messages
解决方案:restorecon -v '$FIX_TARGET_PATH' ##日志内容过多,这里只显示解决方案这一行
[root@localhost ftp]# restorecon -v /var/ftp/* ##根据解决方案解决冲突
网页浏览: ftp://172.25.254.228 ##可以看到westos文件
setroubleshoot是查看SElinux日志报错的命令
[root@localhost ftp]# rpm -qa | grep setrouble ##查找排错工具安装包
[root@localhost ftp]# yum remove setroubleshoot-server-3.2.17-2.el7.x86_64 ##卸载
[root@localhost ftp]# > /var/log/audit/audit.log
[root@localhost ftp]# > /var/ftp/messages ##清空日志
[root@localhost ftp]# cat /var/log/audit/audit.log ##查看效果没有出错提示
[root@localhost ftp]# cat /var/log/messages
在浏览器中刷新查看日志
[root@localhost ftp]# cat /var/log/audit/audit.log ##查看为空
[root@localhost ftp]# cat /var/log/messages ##没有出错工具提示
[root@localhost ftp]# yum install setroubleshoot-server -y ##安装排错包
[root@localhost ftp]# > /var/log/audit/audit.log
[root@localhost ftp]# > /var/ftp/messages ##清空日志
在浏览器中刷新再次查看日志
[root@localhost ftp]# cat /var/log/messages ##有排错提示
[root@localhost ftp]# cat /var/log/audit/audit.log ##可以查看到日志
######################################6.自定义设置端口#############################################
第一步:更改端口信息后,不能将httpd重启,因为新添加的端口不在默认端口里面所以重启失败
第二步:将selinux改为警告模式可以重启httpd,查看selinux允许的http端口
第三步:添加6666端口到selinux允许端口中,并将selinux改为强制模式,
再次重启,没有报错说明添加端口成功。