一、selinux简介
selinux: 内核级加强型防火墙
作用:
对于文件的影响:特定的程序只能访问特定的文件(文件上加标签),
对服务的影响:seliux可以给服务加开关(bol值0和1)
selinux的三种状态:
enforcing 强制模式
permissive 警告模式
disabled 关闭
二、selinux安全上下文
安全上下文简介:
所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的
在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文
比如:我们从别的地方移动一个文件到/var/ftp,而当我们登陆lftp之后,发现看不到该文件,是因为这个文件的安全上下文和/var/ftp的安全上下文不匹配,这就是selinux的保护机制,所以我们需要将这个文件的安全上下文修改和/var/ftp的达到一致
环境:
rm -rf /etc/vsftpd/
yum reinstall vsftpd -y
vim /etc/sysconfig/selinux
改为enforcing
1.selinux文件测试
1.在/mnt/创建文件test
2.mv移动到/var/ftp/
3.在另一台主机lftp登录看不到test文件
解决办法:
cd /var/ftp
chcon -t public_content_t test
ls -Z test
注意:
mv是重命名的过程,文件的属性和权限不会改变(文件上下文类型不会改变)
cp新建的过程,文件的属性和权限会改变(会重新生成安全上下文)
(1)ls -Z 查看文件的安全上下文
(2)ls -Zd 查看目录的安全上下文
2.selinux临时性测试
mkdir /westos
touch /westos/file1
ls -Z /westos/
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
测试:
解决方法:
具有临时性:
semanage fcontext -l | grep /var/ftp
##/var/ftp具有安全上下文
semanage fcontext -l | grep /westos
##/westos没有
将selinux从enforcing---->Disabled---->enforcing
3.永久设定selinux文件下上文,即添加到上下文列表
semanage fcontext -a -t public_content_t "/westos(/.*)?"
##/westos(/.*)表示westos目录本身和里面的所有内容
semanage fcontext -l | grep /westos
ls -Zd /westos/
##会发现没有更改
restorecon -FvvR /westos/
##重新刷新服务
ls -Zd /westos/
三、selinux开启时本地用户上传
在selinux开启的状态下,默认本地用户是没有上传权限的
getsebool -a | grep ftp
查看开关
setsebool -P ftp_home_dir on
getsebool -a | grep ftp
(553的话chmod u+w /home/*)
四、selinux开启时匿名用户上传
第一:
vim /etc/vsftpd/vsftpd.conf(开启匿名用户上传功能)
systemctl restart vsftpd
第二:
chmod 775 /var/ftp/pub/
chgrp ftp /var/ftp/pub/
getsebool -a | grep ftp(发现匿名用户的上传功能被关)
setsebool -P ftpd_anon_write on##-P永久开启
semanage fcontext -a -t public_content_rw_t /var/ftp/pub##给他读写权限
restorecon -FvvR /var/ftp/pub/ ##重新刷新
五、selinux开启有两种状态
enforcing ##强制警告并拒绝
permissive ##警告
setenforce 0 -----> permissive
setenforce 1 -----> enforcing
cd /mnt/
touch file
lftp 172.25.254.211 ##看不见file
getenforce ##查看selinux状态
setenforce 1 ##改成permissive ##只警告不拒绝可以看见
setenforce 0 ##改成enforcing ##强制警告并拒绝
报错信息查看:
setenforce 1
/var/log/audit/audit.log
lftp 172.25.254.211
cat /var/log/audit/audit.log
提供报错解决方案的软件
rm -rf /var/ftp/pub ##删除原有的pub
在/var/ftp/下新建pub
chmod 775 /var/ftp/pub/
chgrp ftp /var/ftp/pub/
> /var/log/messages
lftp 172.25.254.211 ##进入pub上传文件出现553报错
cat /var/log/messages ##日志里会出现解决方案
yum remove setroubelshoot
删除后messages日志不会出现解决方案
在/var/log/audit/audit.log ##有报错但没有解决方案
rpm -qa | grep setroubleshoot
yum install setroubleshoot-server-3.2.17-2.el7.x86_64 -y