我的 VPS 上有一个网站。我在该 VPS 上安装了 Debian 7。我的 http 文档位于/var/www/example.com
我在该服务器上安装 Nginx 的目录中,该目录由用户和组/var/www/example.com
拥有。我想添加非 root 用户(我们给它命名),以便能够通过 FTP 或 SFTP 客户端(如 FileZilla)将文档下载或上传到该目录。www-data
www-data
someone
我发现这和这指南解释了如何使用chroot
。我尝试配置它,但没有成功。以下是我迄今为止使用的一些命令。
useradd someone
groupadd sftpusers
usermod -G sftpusers someone
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
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
好吧,经过反复试验,似乎这就是答案。
adduser someone
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
service ssh restart
chmod -R 777 /var/www/example.com
。这将使某人能够上传/下载文件并允许 webserver/php 处理此目录中的文件。