我对尝试部署的这个设置感到困惑。我希望你们中有人能帮我一把:非常感谢。
背景信息
服务器是 Debian 6.0,ext3,前端有 Apache2/SSL 和 Nginx 作为反向代理。我需要提供对 Apache 根目录 (/var/www) 的 sftp 访问权限,确保 sftp 用户使用 RWX 权限 chroot 到该路径。
所有这些都无需修改 /var/www 中的任何默认权限。
drwxr-xr-x 9 root root 4096 Nov 4 22:46 www
在 /var/www 内部
-rw-r----- 1 www-data www-data 177 Mar 11 2012 file1
drwxr-x--- 6 www-data www-data 4096 Sep 10 2012 dir1
drwxr-xr-x 7 www-data www-data 4096 Sep 28 2012 dir2
-rw------- 1 root root 19 Apr 6 2012 file2
-rw------- 1 root root 3548528 Sep 28 2012 file3
drwxr-x--- 6 www-data www-data 4096 Aug 22 00:11 dir3
drwxr-x--- 5 www-data www-data 4096 Jul 15 2012 dir4
drwxr-x--- 2 www-data www-data 536576 Nov 24 2012 dir5
drwxr-x--- 2 www-data www-data 4096 Nov 5 00:00 dir6
drwxr-x--- 2 www-data www-data 4096 Nov 4 13:24 dir7
我尝试过
- 创建新组安全FTP
- 创建一个新的 sftp 用户,加入安全FTP和www-数据团体也暂无登录shell. Homedir 是 /
- 编辑 sshd_config
Subsystem sftp internal-sftp AllowTcpForwarding no Match Group <secureftp> ChrootDirectory /var/www ForceCommand internal-sftp
我可以使用 sftp 用户登录,列出文件,但不允许执行写入操作。Sftp 用户属于 www-data 组,但 /var/www 中的权限对于组位是读取/读取 + x,因此... 它不起作用。
我也尝试使用 ACL,但是当我将 sftp 用户的 ACL RWX 权限应用于 /var/www(递归目录和文件)时,它也会更改 unix 权限,而这正是我不想要的。
我可以在这里做什么?
我原本想让用户 www-data 以 sftp 身份登录,这样它就可以修改 www-data 在 /var/www 中拥有的文件/目录。但出于某种原因,我认为从安全角度来看这是一个愚蠢的举动。
答案1
我所做的是将我的用户 chroot 到他们的主目录,然后mount --bind
在他们的主目录中创建指向它的链接。
然后我用来setfacl
确保www-data
维护目录中新文件的写权限。此效果将递归到/var/www
,这就是您想要做的。
通过设置g+s
目录,在其中创建的所有新文件和目录都将从其父级继承组所有权。
useradd someuser
mkdir -p /home/someuser/www
mount --bind /var/www /home/someuser/www
chmod g+s /home/someuser/www
chown -R someuser:www-data /home/someuser/www
setfacl -d -m g::rwx /home/someuser/www
这应该够了吧。
让你的坐骑持久
显然,您希望在重新启动服务器时您的挂载点仍在那里。这就像将挂载点添加到您的一样简单/etc/fstab
。并非所有提供商都允许您触碰此文件,但大多数提供商都允许您触碰此文件。
只需添加如下几行:
/var/www /home/someuser/www none bind 0 0
您可能需要重新启动以确保其正常工作。