一、SELinux介绍
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。
SELinux是一种强制存取控制的实现,提供了一个架构来强制信息的分离,以对付入侵的威胁或任何企图略过安全架构的应用程序。
二、vsftpd安装
1、安装vsftpd(CentOS7)
yum install -y vsftpd
2、safe 为该ftp创建的用户名,/data/ftphome 为登录进去后的位置
mkdir /data
useradd -d /data/ftphome -s /bin/bash safe
3、为新建的用户设置密码
passwd safe
4、配置只能访问自身目录,不能访问其他路径
vim /etc/vsftpd/vsftpd.conf
#去掉前面的注释,也可以直接将下列内容粘贴到行尾
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
#文件末尾添加
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
local_root=/data/ftphome
另外,
vim /etc/vsftpd.chroot_list
把ftp用户写进去

5、设置开机启动并启动服务
systemctl enable vsftpd.service
systemctl restart vsftpd.service
6、防火墙添加FTP服务
firewall-cmd --state 查看状态
firewall-cmd -- permanent --zone=public --add-service=ftp
firewall-cmd -- reload
firewall-cmd -- list-all //查看开放端口
三、SELinux安全策略设置
1、设置 SELiunx
setsebool -P tftp_home_dir 1
setsebool -P allow_ftpd_full_access 1
我们查看一下权限:
getsebool -a | grep ftp

ftp_home_dir 和 allow_ftpd_full_access 必须为 on 才能使 vsftpd 具有访问 ftp 根目录,以及文件传输等权限。
2、禁止ftp用户通过ssh服务登录ftp服务器
由于需要限制ftp用户在自己的目录,在21端口下没有问题,但当ftp用户用sftp登录时,还是可以越权访问其它目录,于是禁止ftp用户ssh登录。
usermod -s /usr/sbin/nologin safe
建议 在 /etc/ssh/sshd_config里添加,禁止该用户通过SSH或SFTP方式登录
DenyUsers safe

Nginx案例
chcon -R -u system_u /var/www
chcon -R -t usr_t /var/www
semanage fcontext -a -t httpd_sys_content_t '/var/www(/.*)?'
查看
ll -Z /var/www