使用 vsftpd 限制不同用户访问目录

1、Centos 下载 vsftpd 并启动:

$ yum install vsftpd
$ service vsftpd start

2、设置开机启动:

$ chkconfig --level 35 vsftpd on

3、修改配置:

$ vim /etc/vsftpd/vsftpd.conf

# 修改或取消注释:
anonymous_enable=NO      # 关闭匿名用户登录
local_umask=000          # 生成目录默认777,文件默认666
chroot_local_user=YES    # 阻止用户访问上级目录
chroot_list_enable=YES   # 阻止用户访问上级目录
allow_writeable_chroot=YES  # 允许 chroot 用户具备写权限

4、创建分配的用户

# 创建了用户 user1,并将其目录指向 /home/ftp
$ useradd user1 -s /sbin/nologin -d /home/ftp

# 设置密码(输入两次确认):
$ passwd user1

# 禁止用户的 ssh 登录权限,只允许 FTP 访问(默认就是这种创建方式,该用户无法通过 SFTP 等方式访问上一级目录):
$ usermod -s /sbin/nologin user1
# 如果想恢复,可以设置:
$ usermod -s /bin/bash user1  

# 设置目录读写权限(否则无法写入)
$ chmod -R 777 /home/ftp

5、只要第三步启用了 chroot_local_user,就需要创建 chroot_list 文件:

$ vim /etc/vsftpd/chroot_list

# 这里可以填入用户,如 user1。
# 如果不填 user1,那么 user1 登录后直接访问到的目录是 /home/ftp,并且不能访问上一级
# 如果填了 user1,那么 user1 可以访问上一级
# 但不管填不填,都需要有这个文件

# 通过搭配能实现以下几种效果:
# ① 当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时,所有的用户均可以切换到其他目录。

6、重新启动 vsftpd

$ service vsftpd restart

7、也许你会登录失败,比如用 FileZilla 登录不上:

Status:      	Connection established, waiting for welcome message...
Response: 	220 (vsFTPd 3.0.2)
Command:	AUTH TLS
Error:        	Could not read from socket: ETIMEDOUT - Connection attempt timed out
Error:        	Could not connect to server

这是由于 FTP 服务器不支持 FTP over TLS 的连接方式(FileZilla默认为此模式)。FTP over TLS 是指客户端显式请求(客户端发送 「AUTH TLS」命令)对 FTP 会话加密。虚拟主机服务器会拒绝请求 TLS 的连接。

解决方法即登陆时设置 FTP 客户端不要求会话加密,即采用普通的 FTP 会话方式。

    原文作者:Hahn
    原文地址: https://zhuanlan.zhihu.com/p/36578702
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞