一、配置服务器yum源
二、通过yum命令安装vsftpd
yum -y install vsftpd
三、设置vsftpd为开机自启
systemctl start vsftpd // 启动服务
systemctl enable vsftpd // 开机自启
systemctl status vsftpd // 启动状态
四、配置系统本地用户登录ftp
1、创建本地登录用户
useradd testuser // 添加用户
passwd testuser // 天机密码
2、创建ftp文件存放根目录
/home/testuser/ftpfiles
3、修改vsftpd本地配置文件
vsftpd配置文件在/etc/vsftpd目录下,修改前备份原始配置文件
cd /etc/vsftpd
具体配置如下(其它配置使用默认配置):
local_enable=YES 开启本地用户登录
local_root= /home/testuser/ftpfiles ftp用户访问根目录
write_enable=YES 全局写权限配置
userlist_enable=YES 开启用户访问列表
userlist_deny=NO 只有列表文件里的用户可以访问ftp
userlist_file=/etc/vsftpd/allow_user 自定义用户访问白名单
local_root:设置本地用户登录ftp根目录的参数,缺省值为登录用户的家目录,自定义设置时候注意登录用户对自定义目录的操作权限。
/etc/ftpusers是限制本地用户访问的黑名单(root用户默认禁止登录ftp)
4、新增编辑白名单文件,设置允许访问ftp的系统用户
vi /etc/vsftpd/allow_user
testuser
5、创建ftp用户只能访问 /home/testuser目录及其子目录(限制ftp用户越狱)
在安装vsftpd后不做配置的话,系统用户是可以向上切换到其他目录的。
在配置文件中,添加如下选项,使得ftp用户只能访问自己的家目录:
因此local_root的配置值,可以是 /home/testuser的子目录 /home/testuser/ftpfiles,这样用户登录后,自动定位到/home/testuser/ftpfiles,同时不能越级访问。
vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
chroot_local_user是否将所有用户限制在主目录
chroot_list_enable是否启动限制用户(特例)的名单
如果要有几个用户特例,使test3用户能切换任意目录:
chroot_local_user=YES
chroot_list_enable=YES
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list
vi /etc/vsftpd/chroot_list
test3
以上达到了限制ftp目录,但是ftp用户通过ssh登录,还能访问指定以外的目录,因此可以考虑加ssh登录黑名单,或使用ftp虚拟用户。
五、使用testuser用户登录ftp测试(所有功能都可)
1、打开windows的命令窗口,输入命令 ftp xxx.xxx.xxx.xxx 连接ftp,然后输入用户名和密码登录
2、在windows文件地址栏输入 ftp://xxx.xxx.xxx.xxx/ 连接ftp,然后输入用户名和密码登录
六、禁止系统本地用户ssh登录,ftp用户设置成禁止ssh登录
以禁用 lfeng 用户为例,具体步骤如下:打开配置文件 /etc/ssh/sshd_config,
vim /etc/ssh/sshd_config
只拒绝指定用户进行登录
在/etc/ssh/sshd_config配置文件中设置DenyUsers选项,格式如下:
DenyUsers lfeng
多用户,用空格分隔
DenyUsers lfeng lfeng
保存文件修改并退出,重启 ssh 服务,即可禁用lfeng用户通过 ssh 命令登陆。
systemctl restart sshd // 重启服务
七、一些常见ftp问题
ftp客户连接常见故障现象
现象0:
> ftp: connect :连接被拒绝
原因: 服务没启动
解决: # chkconfig vsftpd on<Enter>
现象1:
500 OOPS: cannot open user list file
原因: 不存在文件“/etc/vsftpd.user_list”或文件中不存在该帐户
解决: # echo username >> /etc/vsftpd.user_list<Enter>
现象2:
530 Permission denied.
Login failed.
原因: “/etc/vsftpd.user_list”文件中不存在当前登陆用户
解决: # echo username >> /etc/vsftpd.user_list<Enter>
现象3:
500 OOPS: cannot open chroot() user list file
Login failed.
原因: 不存在文件“/etc/vsftpd.chroot_list”
解决: # echo username >> /etc/vsftpd.chroot_list<Enter>
现象4:
500 OOPS: missing value in config file
Connection closed by remote host.
原因: “=”等号前值有问题,或只有一个空格
解决: 修正相应的值即可,可能过 diff 来比较查找
现象5:
500 OOPS: bad bool value in config file
Connection closed by remote host.
原因: “=”等号后值有问题
解决: 将“=”等号后值确认修改
现象6:
500 OOPS: unrecognised variable in config file
Connection closed by remote host.
原因: 参数前有空格
解决: 将参数前空格删除
现象7、
确认存在“local_enable=YES”,但本地用户无法登陆
原因: 验证参数被误删除
解决: 添加“pam_service_name=vsftpd”
现象8、
500 OOPS: chdir
500 OOPS: child died
Connection closed by remote host.
原因: 用户主目录没有权限或没有主目录
解决: 正确设置用户主目录权限