检查 VSFTP 是否安装
- #rpm -qa | grep vsftpd
- vsftpd-2.2.2-24.el6.x86_64
有打印说明已安装, 反之说明没有安装
安装 vsftpd
yum install -y vsftpd
根据提示输入 y 安装完成
设置 ftp 根目录
在 / home/fptroot 下面新建 ftp 根目录 mkdir /home/ftproot
测试用户 ftptest
为防止账户已存在, 先删除测试账号 userdel ftptest
- adduser -d /home/ftproot/ftptest -g ftp -s /sbin/nologin ftptest
- #// -s /sbin/nologin 表示让其不能登陆系统,-d 指定用户目录为 / home/ftptest, 也就是默认访问的目录
设置密码
passwd ftptest 回车
根据提示输入密码, 具体如下:
更改用户 ftptest 的密码 .
新的 密码:
无效的密码: 过于简单化 / 系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新.
启动 ftp 服务
service vsftpd start
ftp 测试工具测试
500 OOPS: cannot change directory:/home/xxx
解决办法:
setsebool ftp_home_dir on
修改 ftp 配置
阻止用户访问上层目录
- vi /etc/vsftp/vsftp.conf
- # 解除注释, 设置为 YES 默认就不能访问上层目录
- chroot_local_user=YES
备注: 当 chroot_local_user=YES 时, chroot_list_file 文件中写入的用户 (一个一行) 表示拥有切换 (根路径) 上级目录的权限, 没写进去的用户则不具备切换 (根路径) 上层目录的权限; 反之, 当 chroot_local_user=NO(默认) 时, 所有用户默认都可以访问用户目录的上层路径, 只有写入到 chroot_list_file 文件中的用户 (一个一行) 才禁止切换到上层路径.
心得: 上面的这个两种情况设定总是不好记, 每次理解的都不是很透彻总是忘了. 可以这么理解: chroot_local_user 是总开关, 可以是 YES(禁止) 本地账户切换上层目录, 或者 NO(默认, 允许) 本地账户切换上层目录. 但凡事总有例外吧, 那么这个 chroot_list_file 就是设定例外情况的. 也就是与 chroot_local_user 设定的含义相反
用户权限
在 vsftpd 2.3.5 之后, vsftpd 增强了安全检查, 如果用户被限定在了其主目录下, 则该用户的主目录不能再具有写权限了! 如果检查发现还有写权限, 就会报如下错误:
C:\Users\liuheng.klh>ftp 192.168.125.132
连接到 192.168.125.132.
220 Welcome to Victo's FTP service.
用户 (47.88.58.168:(none)): ftpuser
331 Please specify the password.
密码:
- 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- 500 OOPS: priv_sock_get_cmd
远程主机关闭连接.
解决办法
需要做两步设定:
- <1> 在配置文件 /etc/vsftpd.conf 文件末尾添加一行: allow_writeable_chroot=YES
- <2> 注意新增用户的主目录要有写入权限 (直接更改目录所属关系就可以): chown ftpuser:ftp /home/ftpuser
重启 vsftp 服务
service vsftpd restart
设置 ftp 端口
listen_port=7179
主动模式
vi /etc/vsftpd/vsftpd.conf
Port_enable=YES 开启主动模式
Connect_from_port_20=YES 当主动模式开启的时候 是否启用默认的 20 端口监听
Ftp_date_port=%portnumber% 上一选项使用 NO 参数是 指定数据传输端口
被动模式
vi /etc/vsftpd/vsftpd.conf
PASV_enable=YES 开启被动模式
PASV_min_port=11001 被动模式最低端口
PASV_max_port=11021 被动模式最高端口
pasv_promiscuous=YES 允许目录访问
被动模式防火墙设置
iptables 中开放这段端口
service iptables start 打开防火墙
- iptables -I INPUT -p tcp --dport 11001:11021 -j ACCEPT
- iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
来源: http://www.bubuko.com/infodetail-3073753.html