实验环境
重装ftp
rm -fr /etc/vsftpd/
yum reinstall vsftpd -y
允许匿名用户可以上传文件
vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES ##打开允许上传文件
systemctl restart vsftpd
chmod 775 /var/ftp/pub/
chgrp ftp /var/ftp/pub/
允许student用户上传文件
ls -ld /home/student/
chmod +w /home/student/
SEliunx:内核加强火墙
介绍
SELinux是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。
三种模式
Permissive | seliunx开启,警告 |
enforcing | seliunx开启,强制 |
disabled | selinux关闭 |
permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。
Enforcing就是你违反了策略,你就无法继续操作下去。
安全上下文
特定安全上下文的程序只能访问特定安全上下文件。
特定安全上下程序功能:给特定安全上下文件加开关——波尔值。
SEliunx设置
建立一个目录,移动到ftp的默认发布目录下,会看到匿名用户登陆可以显示出文件。
touch /mnt/westosfile
mv /mnt/westosfile /var/ftp
修改为强制模式:
getenforce ##查看seliunx状态
vim /etc/sysconfig/seliunx ##内核加强文件
ps axZ | grep vsftpd
ls -Z /var/ftp ##查看安全上下文的属性
从上图可以看出,文件的安全属性为空。
重启主机
reboot
发现重启主机过程时非常慢的,原因是:
当seiunx开启时,会给每一个程序添加一个标签,在每一个文件上也会添加一个标签。
重启后测试:
匿名用户重启前可以上传,重启后不能上传
本地用户重启前可以上传,重启后也不能上传
touch /mnt/westosfile1
mv /mnt/westosfile1 /var/ftp
ls -Z /var/ftp
ps axZ | grep vsftpd ##查看westosfile1为mnt_t:s0
从上图可以看出,匿名用户登陆看不到建立的westosfile1。
原因:因为seliunx开启后,意味着为了安全,内核对程序的防控指令多了一层,seliunx作用:会给系统中的每一个程序和文件加载一个标签,特定标签的程序只能读取特定标签的文件,如果标签不匹配,访问就会被禁止。这个标签被称做安全上下文。对程序本身的影响是给程序本身添加了一个开关——sebool值。
从下图可以看出,这些开关是关闭状态。
更改安全上下文程序(临时的)
chcon -t public_content_t westosfile1 ##修改安全上下文
ls -Z /var/ftp/ ##查看安全上下文属性
更改之后可以看见建立的文件westosfile1:
这样的更改只是临时更改新建立一个文件,它的安全上下文属性为default_t。
mkdir /westos/
ls -Zd /westos/
临时更改:当seliunx关闭再重启时,/westos/安全属性会还原成default_t
chcon -t public_content_t /westos/ -R ##更改安全上下文属性,【-R】:同时也更改文件里的内容,递归更改
当seliunx关闭再重启时,会还原成默认的安全上下文:
但是建立的westosfile1的安全上下文重启之后没有发生改变,因为westosfile1建立在目录/var/ftp/下,这个目录的安全上下文是被内核固定的,所以只要把westos的安全上下文固定下来就可以了。
更改安全上下文(永久性、固定的)
把目录/westos/加载在安全上下文列表里:
semanage fcontext -a -t public_content_t '/westos(/.*)?' ##【(/.*)】表示目录本身及里面所有内容都会被固定下来
semanage fcontext -l | grep westos ##加载到安全上下文列表里
固定下来之后还是没有改变,有两种方式,一种是把seliunx关闭再打开;另一种是刷新列表
restorecon -RvvF /westos/ ##刷新
Permissive—>Enforcing的调整:
setenforce 0 ##表示更改seliunx处于警告模式
setenforce 1 ###表示更改seliunx处于强制模式
getenforce ##查看年seliunx的状态
Enforcing—>disabled的调整:
vim /etc/sysconfig/selinux
reboot
bool值
getsebool -a | grep ftp
setsebool -P ftp_home_dir on ##开启on|1都可以,-P:系统重启bool值不还原
测试:
打开前
打开后
安全上下文与sebool的结合实验
没有打开匿名用户的写的功能之前,匿名用户不能上传文件。
打开匿名用户写的功能,匿名用户还是不能上传文件。
因为/var/ftp/pub/目录是只读的安全上下文:
改变安全上下文属性,改变bool值
semanage fcontext -a -t public_content_rw_t '/var/ftp/pub(/.*)?' ##【/var/ftp/pub(/.*)?】为安全上下文列表,在/var/ftp/下的文件的安全上下文都会被内核固定下来
restorecon -RvvF /var/ftp/pub/
测试:可以看出匿名用户可以上传文件
selinux的排错
清空日志,清空/var/pub/下的所有文件
建立文件,移动到/var/ftp/目录下
错误:/var/ftp/目录下有这个文件,但是访问时看不到。
查看seliunx生成的日志:
cat /var/log/audit/audit.log
从上图可以看出ftp服务在访问这个/mnt/file文件时,被拒绝了,但没有说原因。
cat /var/log/messages
在这个日志里,提供了解决方案
把完全控制权限打开:
刷新路径:
restorecon -v /var/ftp/file
/var/log/messages这个日志之所以会提供解决方案,是因为有一个setroubleshoot-server-3.2.17-2.el7.x86_64软件,它能为系统提供解决方案。如果没有这个软件,再查看/var/log/messages是提供解决方案的。
rpm -qa | grep setrouble
实验:
删除软件setroubleshoot-server-3.2.17-2.el7.x86_64后,查看到日志里不提供解决方案。(每次删除或安装软件是都清空一下日志,方便查看日志)
yum remove setroubleshoot-server-3.2.17-2.el7.x86_64
清空日志:
> /var/log/messages
> /var/log/audit/audit.log
新建文件:
touch /mnt/file1
mv /mnt/file1 /var/ftp/pub
访问主机
查看不到新建的文件
查看日志,寻找解决方案
cat /var/log/audit/audit.log
cat /var/log//messages
/var/log/audit/audit.log日志下仍有问题原因,但是/var/log//messages没有解决方案了。所以我们应该把提供解决方案的软件安装上。
安装提供解决方案的软件
yum install setroubleshoot-server.x86_64 0:3.2.17-2.el7 -y
yum install setroubleshoot.x86_64 -y
清空日志:
> /var/log/messages
> /var/log/audit/audit.log
cat /var/log/messages
当执行了这个命令,刷新了路径后,发现访问主机时会看到新建的文件file1.
restorecon -v /var/ftp/pub/file1