转载http://blog.51cto.com/10316297/2130057
FTP协议有两种工作模式:
1. 主动模式: FTP服务器主动向客户端发起连接请求;
2. 被动模式: FTP服务器等待客户端发起连接请求(默认模式);
vsftpd的三种认证模式
1. 匿名开放模式:
它是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器;2. 本地用户模式
它是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是若被恶意用户破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制服务器;3. 虚拟用户模式
它是三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出的用户进行口令验证的账户信息,而这些账户信息在服务器系统上并不存在,仅供FTP服务器进行认证使用。
一、匿名开放模式
- 修改vsftpd.conf配置文件
......
anonymous_enable=YES //允许匿名访问模式
......
anon_upload_enable=YES //启用,允许匿名用户上传文件
anon_mkdir_write_enable=YES //启用,允许匿名用户创建目录
新增下面参数
anon_other_write_enable=YES //允许匿名用户修改目录名称或删除目录
- 启动服务
chkconfig vsftpd on
service vsftpd start
- 修改ftp目录权限
chown ftp:ftp /var/ftp/pub
chmod 777 /var/ftp/pub
二、本地用户模式 centos 7.4系统下
- 修改vsftpd.conf配置文件
......
anonymous_enable=NO //禁止匿名访问模式
local_enable=YES //允许本地用户模式
write_enable=YES //设置可写权限
local_umask=022 //本地用户创建文件的umask值
userlist_enable=YES //启动“禁止名单”,名单文件为ftpusers和user_list
userlist_deny=YES //开启用户作用名单文件功能
chroot_local_user=YES //chroot_local_user 是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable=YES //chroot_list_enable #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list //#是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,
local_root=/var/zxcfile //本地用户登录目录
- 创建本地用户zxc
useradd -s /sbin/nologin zxc//创建用户
passwd zxc //设置密码,输入两次
2、对主目录授权 (不然链接不了,命令提示符显示 错误:500 OOPS: cannot change directory:/home/xxx 500 OOPS: child died)chown ftp:ftp /var/zxcfile
chmod 755 /var/zxcfile
vi /etc/vsftpd/chroot_list // 配置文件中chroot_list_enable=YES 和chroot_local_user=YES 那么不在chroot_list_file=/etc/vsftpd/chroot_list 文件中的用户表示锁定在该用户的主目录下,不能切换目录。
参考 https://blog.youkuaiyun.com/bluishglc/article/details/42398811
- 添加chroot_list文件
让我们举个例子:
假设有ftp1, ftp2两个ftp用户, 计划让ftp1用户锁定在主目录下,不允许切换到其他目录, 但是允许ftp2用户自由切换目录,则可以分如下两种方式实现:
方式一:
令:
chroot_local_user=YES
chroot_list_enable=YES
/etc/vsftpd/chroot_list名单列表为:
ftp2
解释:chroot_local_user=YES将所有用户限定在主目录内,chroot_list_enable=YES表示要启用chroot_list_file, 因为chroot_local_user=YES,即全体用户都被“限定在主目录内”,所以总是作为“例外列表”的chroot_list_file这时列出的是那些“不会被
- 重启服务
systemctl restart vsftpd.service
5. 测试
三、虚拟用户模式
- 创建ftp用户数据库文件
cd /etc/vsftpd/ //进入目录
vim vuser //创建ftp用户数据库文件,奇数行为用户名,偶数行为密码
test
123123
tom
123123
- 对vuser文件进行加密转换为数据库文件
db_load -T -t hash -f vuser vuser.db //转换为数据库文件
chmod 600 vuser.db //修改权限不让其他用户查看
- 创建vsftpd服务程序用户存储文件的根目录以及虚拟用户映射的系统本地用户
useradd -d /opt/vuser -s /sbin/nologin vuser
- 建立用户支持虚拟用户的PAM认证模块文件
vim /etc/pam.d/vsftpd.vu
//添加以下两行数据
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
- 修改vsftpd服务程序的主配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO //禁止匿名开放模式
local_enable=YES //允许本地用户
guest_enable=YES //开启虚拟用户
guest_username=vuser //指定虚拟用户为vuser
pam_service_name=vsftpd.vu //指定PAM文件
- 重启服务
service vsftpd restart
7. 测试
客户端使用虚拟账户tom进行登录,可以正常登录
一、如果你的ftp用户登陆目录默认的是不是在 /home/ftp下,出现了500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
出错原因:用户没有变更根目录的权限。
ftp用户默认的根目录是/home/ftp,如果要切换登陆目录,需要给予权限
解决方案
1、打开/etc/vsftpd/vsftpd.conf,做如下配置:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
2、在/etc/vsftpd下新建chroot_list,加入登陆用户的名字
然后再到/etc/vsftpd目录下新建chroot_list 文件 并添加允许访问的用户
二、参考
https://www.jb51.net/article/94223.htm
https://blog.youkuaiyun.com/bluishglc/article/details/42273197