背景信息:
我正在使用 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 登录名,它可以读取和写入用户主目录中的目录,而所有权仍属于主目录所在的用户?
抱歉重复了,我也在 Ask Ubuntu 上问过这个问题,但没有得到任何答案:https://askubuntu.com/questions/774701/ftp-account-for-just-one-directory也许在这里运气更好