允许非 root 用户上传/下载到网站目录

允许非 root 用户上传/下载到网站目录

我的 VPS 上有一个网站。我在该 VPS 上安装了 Debian 7。我的 http 文档位于/var/www/example.com我在该服务器上安装 Nginx 的目录中,该目录由用户和组/var/www/example.com拥有。我想添加非 root 用户(我们给它命名),以便能够通过 FTP 或 SFTP 客户端(如 FileZilla)将文档下载或上传到该目录。www-datawww-datasomeone

我发现指南解释了如何使用chroot。我尝试配置它,但没有成功。以下是我迄今为止使用的一些命令。

  1. useradd someone
  2. groupadd sftpusers
  3. usermod -G sftpusers someone
  4. vi /etc/ssh/sshd_config

我添加了此代码

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

在文件末尾我添加了

Match group sftpusers
    ChrootDirectory /var/www/example.com
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
  1. service ssh restart

但是当我通过 FileZilla 连接时,它给出了错误。我怀疑此错误/var/www/example.com是由于用户www-data和组所拥有的www-data

问题:如何使非 root 用户能够/var/www/example.com通过 FTP 或 SFTP 客户端(如 FileZilla)下载或上传文档到目录。此非 root 用户不应能够访问父目录,如/var/www/

答案1

哦,出于对所有可爱和令人想拥抱的事物的热爱,请不要对 world+dog 可以访问的任何东西(即您的网站目录、匿名 ftp 文件夹)设置 777 权限。

现代 Linux 和 BSD 具有每个用户 ACL,您可以设置它们,它们工作得很好!您还可以使用它为特定用户和特定组添加 rwx。一旦您理解了它们,就非常容易做到了!

TLDR;使用 setfacl 命令如下 #setfacl -m someuser:rwx /public_html SHAZAM!现在 someuser 已对您的 public_html 目录拥有读/写/执行权限,我建议您阅读 setfacl 的手册页或至少阅读 HOWTO 以熟悉其功能。以下是文件系统 ACL 的简单介绍: https://www.redhat.com/sysadmin/linux-access-control-lists

它非常适合于网络服务器,您需要允许拥有自己帐户的特定开发人员访问而无需授予 world+dog rwx 权限。

答案2

这是我为特定用户设置 sftp 的方式

1]创建用户

 adduser {USER}

2]编辑/etc/ssh/sshd_config

 PasswordAuthentication yes 

 Subsystem sftp
 internal-sftp -u 0007 -f AUTH -l VERBOSE 
 Match Group {USER}
     ChrootDirectory {FOLDER}
     ForceCommand internal-sftp -u 0007
     AllowTcpForwarding no
     GatewayPorts no
     X11Forwarding no

3]设置用户权限

 chmod -R 777 {FOLDER}

4]重启ssh

service ssh restart

将 {USER} 替换为您的用户,将 {FOLDER} 替换为您的文件夹,它应该可以工作!;)

答案3

好吧,经过反复试验,似乎这就是答案。

  1. adduser someone
  2. vi /etc/ssh/sshd_config 我正在使用 Froggiz 的配置,所以我的代码如下所示:

    PasswordAuthentication yes 
    
    Subsystem sftp internal-sftp -u 0007 -f AUTH -l VERBOSE 
         Match Group someone
         ChrootDirectory /var/www
         ForceCommand internal-sftp -u 0007
         AllowTcpForwarding no
         GatewayPorts no
         X11Forwarding no
    
  3. service ssh restart

  4. chmod -R 777 /var/www/example.com。这将使某人能够上传/下载文件并允许 webserver/php 处理此目录中的文件。

相关内容