1. 安装与卸载
1.1 查看是否已经安装
rpm -qa|grep vsftpd
1.2 卸载
yum remove vsftpd
1.3 安装
yum -y install vsftpd
1.4 查看安装路径
whereis vsftpd
1.5 备注
1.5.1 权限
上述命令是否使用sudo权限执行,取决于具体环境需求,如果提示没有权限时可以使用sudo试试
1.5.2 配置文件所在位置
通过yum方式安装vsftpd的默认配置文件在
/etc/vsftpd/vsftpd.conf
2. 创建用户及分配目录
2.1 创建用户目录
mkdir /ftpfile/
cd /ftpfile/
ll
2.2 添加用户
设置密码时,如果没有通过校验规则,会提示“无效的密码”,其实这只是一个警告,并不是错误,可以忽略的。
创建用户的时可以不指定目录-d,后面再配置文件里指定现有的目录也是可以的。
# 添加一个用户名为ftpuser的用户,家目录为/ftpfile,只作为ftp,不允许通过shell登录
useradd ftpuser -d /ftpfile -s /sbin/nologin
# 设置密码
passwd ftpuser
2.3 删除用户
若使用userdel ftpuser命令删除该用户时,并不能删除该用户的所有信息,只是删除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四个文件里的该账户和组的信息。默认情况下创建一个用户账号,会创建一个家目录和一个用户邮箱(在/var/spool/mail目录以用户名命名),删除账户的时候没有加-r参数,所以再次创建相同账户的时候会提示文件目录或者邮箱文件夹已存在。
userdel -r ftpuser
2.4 分配文件夹权限
# 把创建的目录/ftpfile/分配权限给ftpuser用户和ftpuser用户组,-R表示遍历所有目录
chown -R ftpuser.ftpuser /ftpfile/
# 查看权限是否添加上
cd /
ll
2.5 创建文件测试
cd /ftpfile/
touch hello.txt
ls
3. 配置
3.1 备份配置文件
cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
3.2 修改配置文件
vim /etc/vsftpd/vsftpd.conf
# 禁止匿名登录
anonymous_enable=NO
# 限制用户访问上级目录
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
# ****在文件的最后追加一些新的属性****
# 把本地账户的根目录指向创建的目录
local_root=/ftpfile
# 解决无法登录问题
allow_writeable_chroot=YES
# 开放指定端口给ftp使用
pasv_min_port=61001
pasv_max_port=62000
3.3 禁止用户切换到上级目录
FTP 用户指定目录禁用上级目录:
在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。
chroot_list_enable=YES/NO(NO)
设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。
chroot_list_file=/etc/vsftpd.chroot_list
用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。
chroot_local_user=YES/NO(NO)
用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。
通过搭配能实现以下几种效果:
①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
3.4 重新加载配置文件
# 重启vsftpd服务
service vsftpd restart
# 启动vsftpd服务
service vsftpd start
# 停止vsftpd服务
service vsftpd stop
3.5 查看ftp端口是否被使用
netstat -lnp|grep 21
4. 常见问题
4.1 pam保护机制(大坑,一般都是这个问题导致连接不上)
vim /etc/pam.d/vsftpd
# 将auth required pam_shells.so
# 修改为->
auth required pam_nologin.so
# 修改完成后,重启vsftpd服务
service vsftpd restart
该配置项的含义为仅允许用户的shell为/etc/shells文件内的shell命令时,才能够成功,而创建ftp用户时,为了禁止ssh登录,一般多为/bin/false 、/usr/sbin/nologin等,显然不是一个有效的bash,也就无法登录了。
4.2 sshd协议问题
vi /etc/ssh/sshd_config
# 将Subsystem sftp /usr/libexec/openssh/sftp-server
# 修改成Subsystem sftp internal-sftp
# 重启服务
systemctl restart sshd.service
4.3 端口未开放
放行61001-62000端口
4.4 找不到chroot_list文件
连接时提示:could not read chroot() list file:/etc/vsftpd/chroot_list
touch /etc/vsftpd/chroot_list
4.4 检查pam_service_name
检查vsftpd.conf配置文件中的pam_service_name属性是否为pam_service_name=vsftpd
4.5 检查用户名和密码是否输入正确
4.6 检查vsftpd.conf配置文件是否正确
4.7 重启vsftpd服务
systemctl restart sshd.service