Centos FTP 服务
利用vsftpd 搭建FTP 服务器
安装
yum -y install vsftpd
添加用户及设置密码
useradd -s /sbin/nologin -d /home/ftp_test ftp_test
passwd ftp_test
-s 禁止ssh登录主机
-d 设置ftp_test 用户home 目录,用于存放数据
基础配置
vi /etc/vsftpd/vsftpd.conf
# 禁止匿名访问
anonymous_enable=NO
# 禁止dns解析
reverse_lookup_enable=NO
启动&开机自启
systemctl start vsftpd.service
systemctl enable vsftpd.service
filezilla 客户端验证
host: 服务器IP
port: 默认
user:
password:
测试本地上传,远程下载,一切OK,感觉那么顺畅完美。
but可以访问到服务器中的所有文件和目录,似乎权限也忒大了。
接下来是入坑时间,有史以来最折磨的经历,总结出如下绕坑指南。
限制只能访问用户自己的目录,对其他目录不可见
vi /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
创建文件
touch /etc/vsftpd/chroot_list
chroot_list 中的用户不受限制
创建存储目录 data
mkdir /home/ftp_test/data
修改对应权限
chmod 777 home/ftp_test/ -R
chmod a-w home/ftp_test/
重启vsftpd 服务
重新连接filezilla
遇到问题
问题1 没有chroot_list 文件
500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list 解决 创建 chroot_list 文件
问题2
当我们限定了用户不能跳出其主目录之后,使用该用户登录FTP时往往会遇到这个错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
这个问题发生在最新的这是由于下面的更新造成的:
- Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life.
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。 要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES
问题3 vsftp上传文件出现553 Could not create file
首先在ftp的目录中创建一个目录,然后设置权限为777
$ sudo mkdir /var/ftp/write
$sudo chmod -R 777 /var/ftp/write
然后修改vsftp的配置文件/etc/vsftpd.conf文件
在最后添加上
local_root=/var/ftp
问题4 客户端建立连接慢,尤其是离线状态
reverse_lookup_enable=NO
问题5 530 Login incorrect
如果是root用户 原因是因为在 /etc/vsftpd/user_list /etc/vsftpd/ftpusers 中的用户禁止登陆
如果是虚拟用户 检查 /etc/shells 看是否包括如下配置
cat /etc/shells
/sbin/nologin
/usr/sbin/nologin
原因认证错误
如果是密码错误可在vsftpd 日志中看到
pam 认证问题 ,去掉认证试试
vi /etc/pam.d/vsftpd
#auth required pam_shells.so
问题6 550 Ubuntu 下只有读权限没有写权限
write_enable=YES