以前(比如 Debian Wheezy 之前),你可以将 FTP 安装为 ftpd。这是一个简洁的小工具,无需任何额外的软件,可以实现以下场景:
以本地用户为例,允许他以 chrooted FTP 方式访问目录(指定为他的主目录),但不允许他以 SSH/命令行方式访问。这是通过将用户添加到文件/etc/ftpchroot
,然后删除他的命令行解释器/etc/passwd
(从 更改/bin/bash
为/bin/false
)来实现的。
但是,现在 Debian 附带了一个新的 FTP 守护程序,它安装了一个不必要的复杂超级服务器,其他服务都不会使用它 (openbsd-inetd)。配置不知何故发生了变化,我正在寻找一种方法来恢复旧的行为。
到目前为止,我已经设置了 VSFTPD,但是当本地用户的交互式 shell 为 时/bin/false
,无法使 FTP 访问工作,因为守护进程拒绝让用户登录。当/bin/bash
是 shell 解释器时,它工作正常,但这存在一个问题,即用户理论上可以使用 SSH 连接到系统,这是我肯定不希望看到的。
有没有什么办法可以用其他软件恢复旧配置(本地用户、FTP 是、SSH 否、CHROOT)?
答案1
检查文件 /etc/pam.d/vsftpd,vsftpd 的 pam 服务使用 pam_shells.so
pam_shells.so
pam_shells is a PAM module that only allows access to the system if the users shell is listed in /etc/shells.
It also checks if /etc/shells is a plain file and not world writable.
您只需将 /bin/false 添加到 /etc/shells 文件
答案2
你可以使用 vsftpd 的“虚拟用户”,其中虚拟用户数据库中的用户只能访问 ftp,而没有其他权限。