我如何将 SSH 用户添加为 www-data 的成员并监禁在 /var/www/html/ 中?

我如何将 SSH 用户添加为 www-data 的成员并监禁在 /var/www/html/ 中?

我一直在尝试在我的 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 读取的文件。

参考:

相关内容