centos7安装配置vsftp

#blog

安装 ftp

yum -y install vsftpd

修改防火墙开放 ftp 端口

firewall-cmd --add-service=ftp --permanent # 开放 ftp 端口
systemctl restart firewalld # 重启防火墙

配置 selinux 允许 ftp 访问 home 和外网访问

setsebool -P allow_ftpd_full_access on
setsebool -P tftp_home_dir on

注意有的文档要求修改 ftp_home_dir, 该变量在 centos7 中,变成了 tftp_home_dir
其他 ftp 相关的变量,可通过 getsebool -a|grep ftp 查看

添加 ftp 用户

useradd -g root -d /home/ftpuser -s /sbin/nologin ftpuser
passwd ftpuser # 设置密码,也就是 ftp 的登录密码
mkdir /home/ftpuser/ftp # 创建一个目录给 ftp 作为主目录用,注意这个目录与后续设置有关
chown -R ftpuser:root /home/ftpuser/ftp # 设置目录权限,因为这个子目录是 root 创建的

这里 /home/ftpuserftpuser 这个用户的主目录。
/home/ftpuser/ftp 则创建用来做 vsftp 的主目录

修改 /etc/shell

需要注意,这里的用户,使用了 /sbin/nologin 作为登录 shell。正常情况下,该用户无法登录 ssh shell,也无法登录 ftp。
ftp/shell 会根据/etc/shells这个文件来判断一个用户是否是有效用户,会阻止那些shell不在 /etc/shells 里的用户登陆.

需要手动将 /sbin/nologin 添加到 /etc/shells 文件最后。此时用户仍然无法登录ssh shell,但可以登录 ftp。
如果创建用户的时候,不指定 -s,则无需做此设置。

用户的登录 shell 可以到 /etc/passwd 中进行修改。

修改 /etc/vsftpd/vsftpd.conf 配置文件

# 禁用匿名登录
anonymous_enable=NO

# 启动用户列表
userlist_enable=YES
# 决定是否对用户列表的用户拒绝访问ftp
userlist_deny=NO
# 指定userlist文件所在位置
userlist_file=/etc/vsftpd/user_list

chroot_local_user=YES
# 将所有用户限制在主目录(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户都可以逃出主目录,切换到根目录。)
allow_writeable_chroot=YES
# 用户主目录可写,不设此项目则用户无法上传文件
chroot_list_enable=NO
# 忽略 chroot_list,保证所有用户都不能随意切换主目录。

user_sub_token=$USER
# 注意这里的目录与上面创建的目录是匹配的,如果不添加这个配置,则使用用户的主目录作为 ftp 的主目录
local_root=/home/$USER/ftp

注意 vsftpd.conf 文件中,非注释行的配置,最后一定不要带空格,因为空格也会被 vsftp 解读作为配置的值。

将新建用户 ftpuser 添加到 /etc/vsftpd/userlist 中,允许用户访问

如题

启动/停止/重启 ftp 服务

systemctl restart vsftpd # 重启
systemctl start vsftpd # 启动
systemctl stop vsftpd # 停止
systemctl status vsftpd # 查看状态
systemctl enable vsftpd # 设置开机启动