VSFTP
VSFTP是一个类Unix系统上使用的FTP服务器软件,全称Very Secure FTP 。
代码 | 含义 |
---|---|
550 | 程序拒绝 |
553 | 文件权限限制 |
500 | 文件权限过大 |
530 | 登录认证失败 |
[root@rhclient Desktop]# dnf install vsftpd -y #安装vsftpd
[root@rhclient Desktop]# dnf install lftp -y #安装用于浏览ftp的lftp
[root@rhclient Desktop]# setenforce 0
[root@rhclient Desktop]# systemctl disable --now firewalld
[root@rhclient Desktop]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES #允许匿名访问
[root@rhclient Desktop]# systemctl restart vsftpd
创建共享文件夹,修改权限。
[root@rhclient Desktop]# chmod 775 /var/ftp/pub
[root@rhclient Desktop]# chgrp ftp /var/ftp/pub
编辑主配置文件: /etc/vsftpd/vsftpd.conf,添加或修改以下内容。
anonymous_enable=(YES) #是否允许匿名用户登录
anon_root=/dir #匿名用户家目录
anon_upload_enable=(NO) #是否允许匿名上传,当write_enable=YES时,此项才有效
anon_mkdir_write_enable=(NO) #是否允许匿名用户建立目录
anon_world_readable_only=(YES) #是否不允许匿名用户下载不能读的文件
anon_other_write_enable=(NO)
# 如果设为YES,则允许匿名用户有上传或者建立目录之外的权限,如删除或者重命名。
# 如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;
# 如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。
anon_umask=022 #设定匿名用户上传文件umask
chown_upload=YES #为匿名用户上传的文件设定所有者
chown_username=lee #上传的文件设定所有者。开启时anon_mask设定失效
chown_upload_mode=0644 #设定指定所有者后上传文件的权限
max_clients=2 #最大同时登录用户数量
anon_max_rate=1024 #匿名用户传输速率
编辑主配置文件: /etc/vsftpd/vsftpd.conf,添加或修改以下内容。
local_enable=NO|YES #是否开启本地用户登录
local_root=/software #是否指定登录目录,设定后默认登录至此目录
write_enable=NO|YES #是否允许写入
local_umask=077 #上传文件umask
登录黑白名单
/etc/vsftpd/ftpusers #永久黑名单,用户无法登录
userlist_deny=(YES)
/etc/vsftpd/user_list #默认为黑名单
userlist_deny=NO
/etc/vsftpd/user_list #此时为白名单,但永久黑名单依然无法登陆
用户家目录控制
[root@rhclient Desktop]# chmod u-w /home/*
#锁定到家目录开启,名单用户无法切换到 /
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#锁定到家目录关闭,名单用户可以切换到 /
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@rhclient Desktop]# yumdownloader #下载软件包到本机指定位置
[root@rhclient Desktop]# yumdownloader httpd --destdir=/mnt --resolve #下载httpd 安装包和软件依赖性到/mnt目 录
[root@rhclient Desktop]# vim /etc/vsftpd/ftp_auth
user1
password1
user2
password2
user3
password3
[root@rhclient Desktop]# db_load -T -t hash -f ftp_auth ftp_auth.db
#加密认证文件 -T:转换 -t:type -f:指定转换文件
[root@rhclient Desktop]# vim /etc/pam.d/auth_file
account required pam_userdb.so db=/etc/vsftpd/ftp_auth
auth required pam_userdb.so db=/etc/vsftpd/ftp_auth
[root@rhclient Desktop]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=auth_file #指定认证策略文件
guest_enable=YES #指定虚拟用户功能开启
guest_username=ftp #虚拟用户以ftp在服务器上登录
[root@rhclient Desktop]# mkdir -p /ftpuserdir/user{
1..3}
[root@rhclient Desktop]# vim /etc/vsftpd/vsftpd.conf
local_root=/ftpuserdir/$USER
user_sub_token=$USER
[root@rhclient Desktop]# vim /etc/vsftpd/vsftpd.conf
[root@rhclient Desktop]# mkdir /etc/vsftpd/user_config
[root@rhclient Desktop]# touch /etc/vsftpd/user_config/user{
1..3}
user_config_dir=/etc/vsftpd/user_config
#在此目录中与用户名称相同的文件为用户配置文件
#在配置文件中可以为各用户分别配置ftp权限
当selinux开启时,内核会对每个文件及每个开启的程序进行标签加载标签内记录程序和文件的安全上下文(context);此外对程序的功能加载开关,并设定此开关的状态为关闭。当需要此功能时需要手动开启功能开关(sebool)。
主配置文件: /etc/selinux/config,修改后需要重启系统
enforcing:不符合条件被拒绝,并会收到警告信息
permissive:不符合条件被允许,并会收到警告信息
disabled:关闭Selinux
[root@rhclient Desktop]# getenforce #查看状态
[root@rhclient Desktop]# setenforce 0|1 #0为警告模式,1为强制模式
日志存放:/var/log/audit/audit.log
临时修改
重启后失效
chcon -t 标签 文件|目录
chcon -t public_content_t /var/ftp/file
chcon -Rt public_content_t /dir
永久修改
[root@rhclient Desktop]# semanage fcontext -l #查看内核安全上下文列表
[root@rhclient Desktop]# semanage fcontext -a -t public_content_t '/dir(/.*)?'
#设定/dir及子目录文件的安全上下文
[root@rhclient Desktop]# restorecon -RvvF /dir/ #刷新安全上下文,使设定生效
touch /.autorelabel #若该文件存在,系统重启时将重新初始化文件安全上下文
[root@rhclient Desktop]# getsebool -a | grep ftp #服务的sebool值
[root@rhclient Desktop]# setsebool -P ftpd_anon_write on #更改
[root@rhclient Desktop]# semanage port -l | grep http #查看HTTP port限制
[root@rhclient Desktop]# semanage port -a -t http_port_t -p tcp 8888 #增加http端口8888
setroubleshoot-server可以采集警告信息并分析并得到解决方案。
/var/log/audit/audit.log #selinux警告信息
/var/log/messages #selinux问题解决方案
修改主配置文件,注释匿名用户权限,在各自用户配置文件中置空,用户权限被限制。
修改Apache端口为8888,开启Selinux
开启Apache失败
查看/var/log/messages
更改后成功