我一直在尝试在我的 Ubuntu 14.04 Apache2 服务器上设置 ftp 访问,到目前为止我只有一个 root 用户。我遇到的问题是上传的文件归此用户所有,而我希望它们归 www-data 所有。我知道我所做的不是最安全的,但除了在远程 Web 服务器上使用过 ftp 客户端外,我对 ssh 或 ftp 还不是很熟悉。
答案1
有很多方法可以做到这一点,这是我首先想到的。当然,这并不完全符合您的要求,因为它不允许新用户访问 shell,但考虑到所介绍的用例,这似乎不是问题。如果您需要使用网站虚拟主机特定的权限来打破常规,您将不得不找到更细致的解决方案,但要让事情从一开始就顺利进行,这种方法是可行的。
创建一个主组为 www-data 的新用户并设置其密码。
useradd -g www-data -d /var/www/html -s /sbin/nologin webupload
passwd webupload
-g www-data
表示主要组是 www-data,-d /var/www/html
表示主目录(以及 chroot 目录)是 /var/www/html,并且-s /sbin/nologin
表示不允许正常的 shell 登录。webupload
将是新用户的 ID。
编辑/etc/ssh/sshd_config
并注释掉(在前面加上#)以下行(如果存在),使其看起来像这样:
#Subsystem sftp /usr/libexec/openssh/sftp-server
添加另一行以启用内部 sftp 服务:
Subsystem sftp internal-sftp
在文件底部但在任何其他匹配规则之前(您可能有或没有)(默认情况下没有)添加以下内容:
Match Group www-data
ChrootDirectory %h
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
AllowTcpForwarding no
AcceptEnv
X11Forwarding no
ForceCommand internal-sftp
这意味着“对于使用组 www-data 登录的用户,将他们锁定在他们的主目录中并且不允许任何 tcp 或 x11 转发,然后强制他们进入 sftp 模式。”
创建授权密钥目录
mkdir /etc/ssh/authorized_keys/
如果您想对 webupload 使用 ssh 密钥验证,您应该创建一个文件 /etc/ssh/authorized_keys/webupload 并将公钥放入其中,就像常规的 authorized_keys 文件一样。
现在重新启动 sshd:
service ssh restart
尝试使用新用户通过 sftp 登录。它应该能够创建可由 www-data 读取的文件。
参考: