selinux简介
selinux(安全增强型linux):内核级的加强形火墙,内核上的插件,改变后要重启是可保护系统安全性的额外机制。在某种程度上,它可以被看作是与标准权限系统并行的权限系统。
在常规模式中,以用户身份运行进程,并且系统上的文件和其他资源都设置了权限标签。
(控制哪些用户对哪些文件具有哪些访问权,selinux的另一个不同之处在于,若要访问文件必须具有普通访问权限和selinux访问权限。因此,即使以超级用户身份运行程序,根据进程以及文件或资源的selinux安全性上下文可能拒绝访问文件或资源)
实验环境准备:重新安装vsftpd服务
rm -fr /etc/vsftpd/
yum reinstall vsftpd -y
vim /etc/sysconfig/selinux ##disabled-->enforcing
getenforce ##查看状态
reboot
开启的两种形式:permissive/enforcing
给服务加上一个开关
boolean布尔型 开关0 1
on–>开 , off–> 关
有选择性的打开
文件上的标签和所能访问的服务上的标签不一致则不能访问
1.安全上下文
这个是我们主要修改的地方,进程必须和文件的安全上下文对应(不是必须一样)才能对其进行访问。
ls -Z 文件名 #查看文件的安全上下文
ps -Z 进程pid #查看进程的安全上下文
实验:
在/mnt目录建立一个文件,并且把文件移动到匿名用户的pub目录里。
因为安全上下文不一致不能看到此文件
说明:
context共分为五个部分,以:分隔。
user | role | type | sensitivity | category |
---|---|---|---|---|
身份识别 | 文件、进程、用户 | 数据类型 | 安全级别 | 划分的不同分类 |
unconfined_u不受限的用户或文件system_u受限的进程或文件 | object_r文件,system_r进程和用户 | 何种类型进程访问何种文件 | s0最低,只有在msl才有意义 | 这一位没有什么大的作用 |
注意:安全上下文匹配可以访问,特定的程序只能访问安全上下文匹配的文件,如果不匹配会被内核禁止,还会影响服务本身的功能。
1)临时更改安全上下文:
chcon -t public_content_t /var/ftp/fire ##更改fire文件的安全上下文为public_content_t
2)永久更改安全上下文
semanage fcontext -a -t public_content_t '/redhat(/.*)?'
##/redhat(/.*)?---->目录及目录里面的内容
semanage fcontext -l | grep redhat ##查看redhat目录与目录中文件的安全上下文
restorecon -FvvR /redhat/ ##刷新
ls -Zd /redhat/
2selinux的常用作用
1)本地用户可上传
getsebool -a | grep ftp ##查看功能是否开启
setsebool -P ftp_home_dir on ##开启上传文件功能
测试:
lftp 172.25.254.223 redhat
ls
put /etc/passwd ##文件上传成功
2)匿名用户上传
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES ##允许匿名用户上传
systemctl restart vsftpd.service
2.打开selinux匿名用户上传开关。
getsebool -a | grep ftp ##查询权限开关
setsebool -P ftpd_anon_write on ##打开ftp匿名用户写权限
3.更改匿名用户家目录权限和安全上下文可写
chgrp ftp /var/ftp/pub/
chmod 775 /var/ftp/pub/
ls -Zd /var/ftp/pub/ ##查看目录的安全上下文
semanage fcontext -a -t public_content_rw_t /var/ftp/pub ##开启安全上下文写权限
semanage fcontext -l | grep /var/ftp/pub ##查看pub目录的安全上下文更改
restorecon -RvvF /var/ftp/pub/ ##刷新安全上下文
5)测试
3)selinux的三种状态
1)disabled:不警告不决绝
2)permissive:警告但是不拒绝
3)enforcing(强制警告):拒绝并且警告
setenforce 0:警告但是不拒绝---->permissive
setenforce 1:警告并拒绝-------->enforcing
getenforce:查看状态
实验:
cd /mnt
touch test
mv test /var/ftp
lftp 172.25.254.223
ls ##看不到
setenforce 0 ##警告但是不拒绝
getenforce ##查看状态
lftp 172.25.254.223
ls ##看得到
setenforce ##警告并拒绝
getenforce ##查看状态
lftp 172.25.254.218
ls ##看不到
4)报错解决方案:
1.下载所需软件
yum install setroubleshoot-server-3.2.17-2.el7.x86_64
2.清空日志后可看到报错