本章的内容围绕selinux来讲,前面也提到过做lftp试验时要注意selinux的状态,今天将会仔细讲解:
selinux:内核级加强型防火墙
当处于enforcing时,selinux会给每一个文件加载一个标签,即context安全上下文。当文件允许被访问:程序的上下文和文件的上下文一致。
使用getenforce查看状态
setenforce 1 ##enforcing ##强制(既警告也拒绝)
setenforce 0 ##permissive ##警告
##disabled ##关闭 ##在vim /etc/sysconfig/selinux里设置
实验:
先把本机设置的vsftpd删除rm -rf /etc/vsftpd/vsftpd.conf
然后重新安装yum reinstall vsftpd -y
使用getenforce查看状态,更改文件:vim /etc/sysconfig/selinux
编辑:SELINUX=enforcing
reboot
再次getenforce,发现是enforcing
此时客户端的用户没有权限访问服务端
使用setenforce 0 ##使用getenforce可以看到permissive,permissive的状态下客户端用户可以查看到服务端:
在enforing的情况下赋予虚拟用户权力
在服务端:
touch /mnt/westosfile1
mv /mnt/westosfile /var/ftp/
在客户端连接服务端,ls查看不到建立的westosfile1文件
在服务端,ls -Z /var/ftp看到westosfile1文件的安全上下文不是public:
所以客户端在连接时看不到,为了能够连接上服务端,需要进行如下操作:
1.临时设置
chcon -t public_content_t westosfile
使用ls -Z查看文件上下文是否改变:
如果给虚拟用户修改上下文:
vim /etc/vsftpd/vsftpd.conf
编辑加一条:anon_root=/ftphome
systemctl restart vsftpd
并且:
chcon -t public_content_t /ftphome/ -R
2.永久设置
vim /etc/sysconfig/selinux
设置:disabled
vim /etc/sysconfig/selinux设置成enforcing
reboot ##以上的两步操作是为了完全关闭selinux
现在再次进去ls -Z /ftphome查看会发现ftphome不是public
但是ls -Z /var/ftp 发现是public的,因为这是系统自己设定的
使用:
semanage fcontext -l | grep /var/ftp ##查看系统本身的配置文件怎么写
semanage fcontext -l | grep /ftphome ##查看虚拟用户的信息和系统配置的信息有什么不同
设置:
semanage fcontext -a -t public_content_t '/ftphome(/.*)?'
现在再使用 semanage fcontext -l | grep /ftphome发现上下文被改成public了
但是使用ls -Zd /ftphome/查看的话,会发现:
怎么还是object的上下文呢?我们要使用:
restorecon -Rvvf /ftphome/
才能看到信息都被改变了
1.匿名用户的上传:
vim /etc/vsftpd/vsftpd.conf
重启:
systemctl restart vsftpd
修改匿名用户的组和权限:
chgrp ftp /var/ftp/pub/
chmod 775 /var/ftp/pub/
打开上传开关:
setsebool -P ftpd_anno_write on
这个时候还不能上传文件,因为只有读权限:
chcon -t public_content_rw_t /var/ftp/pub/
客户端的匿名用户 就可以了上传文件了。
2.本地用户的上传:
打开本地用户上传开关:
setsebool -P ftp_home_dir on
就可以在客户端上传文件了。
先下载:setroubleshoot-server.x86_64 这是排错的工具,下载后就可以使用了。
1.
2.提前清空日志信息方便后面观察:
如果在登陆时产生错误,报错提醒显示在:/var/log/messages里
解决方案在:/var/log/audit/audit.log里
如果卸载了setroubleshoot,报错提醒会继续显示,但是没有解决方案了。