背景信息:
我正在使用 Serverpilot 来管理我的 Ubuntu 服务器,它不提供任何 FTP 服务。
- 有一位用户:
serverpilot
- 使用主目录:
/srv/users/serverpilot/
- 并且该目录中有一个网站正在运行:
/srv/users/serverpilot/apps/website/public/
。
我想要的是:
现在我想要一个只能读取和写入此目录的 FTP 帐户:/srv/users/serverpilot/apps/website/public/ftpdir/
。
我尝试过的:
- 我已经安装了 vsftpd:
sudo apt-get install vsftpd
- 创建了一个新用户,并将该目录作为主目录:(
sudo useradd -m -d /srv/users/serverpilot/apps/website/public/ftpdir ftpuser
将一个用户的主目录放在另一个用户的主目录中可能不是一个好主意) - 我已经用
sudo passwd ftpuser
- 使用以下方法编辑默认 vsftpd 配置
sudo vi /etc/vsftpd.conf
local_enable=YES
因此ftpuser
可以用作 ftp 登录write_enable=YES
用户可以写入chroot_local_user=YES
无法访问主目录之外的任何内容pam_service_name=ftp
因为我得到了530 登录不正确错误
- 然后打开我的防火墙:
sudo ufw allow 21/tcp
存在的问题:
- 除此以外的其他用户
ftpuser
也可以用作 FTP 登录。我只想拥有 1 个 ftp 用户,而不允许其他系统用户使用 FTP。 - 也可以通过
ftpuser
SSH 进入服务器。 553 error: could not create file
尝试上传文件时出现错误,为了解决这个问题,我遇到了这个问题:https://askubuntu.com/a/320186但我不认为这是正确的方法,因为文件应该归用户所有serverpilot
,而不是ftpuser
用户。在用户下运行的网站serverpilot
应该处理上传的文件。
我之前是如何解决这个问题的:
过去在另一台服务器上我更改了目录所有权,在添加这些额外的 vsftpd 配置选项后它终于可以正常工作了:
file_open_mode=0775
local_umask=022
allow_writeable_chroot=YES
pam_service_name=vsftpd
但是在该服务器上,由于所有权问题,我在处理上传的文件时遇到了问题,因此我使用file_get_contents()
PHP 函数通过网络获取文件,而不是直接在服务器上访问它们,这样不太好。
最后一个问题:
我怎样才能简单地拥有 1 个 ftp 登录名,它可以读取和写入用户主目录中的目录,而所有权仍属于主目录所在的用户?
答案1
vsftpd
不支持限制用户,但proftpd
功能更强大,并且在配置文件(proftpd.conf
)中有一个选项可以限制某些用户的登录,如下所示:
<Limit LOGIN>
AllowUser barb
AllowUser dave
AllowGroup ftpuser
DenyAll
</Limit>
编辑
- 对于您的第一个问题,解决方案如上所述。
- 第二个问题也可以通过添加
DenyUsers ftpuser
来解决/etc/ssh/sshd_config
- 第三个问题可以通过添加
ftpuser
到组serverpilot
并添加serverpilot
到组来解决ftpuser
。此外,还必须将文件夹的权限更改/srv/users/serverpilot/apps/website/public/ftpdir
为 775。
请记住该文件夹/srv/users/serverpilot/
必须具有 755 权限。
答案2
local_enable=YES 是允许其他用户登录,你应该将你的用户添加到显式用户列表中
来自手册:
local_enable
Controls whether local logins are permitted or not. If enabled, normal user accounts in /etc/passwd (or wherever your PAM config references) may be used to log in. This must be enable for any non-anonymous login to work, including virtual users.
Default: NO
userlist_file
This option is the name of the file loaded when the userlist_enable option is active.
Default: /etc/vsftpd.user_list
要解决权限问题,请启用 SITE CHMOD 命令并让您的 ftp 客户端使用它
chmod_enable
When enabled, allows use of the SITE CHMOD command. NOTE! This only applies to local users. Anonymous users never get to use SITE CHMOD.
Default: YES
答案3
您可以使用pure-ftpd
的PureDB
功能仅为该服务创建 ftp 登录pure-ftpd
。