我对 Debian 还很陌生,正在尝试设置一个服务器。
我创建了一个只能访问其文件夹/home/username
(及其子目录)的用户。
现在我想将该用户用于我设置的 Web 服务器,并且我已授予他访问权限,/var/www
但我无法/var/www
通过 sftp 查看,因此我做了如下符号链接:
root@server:/home/username# ln -s /var/www www
root@server:/home/username# cd www
root@server:/home/username/www# chown username:username *
现在,使用 filezilla,我可以看到这样的 www 文件夹:
但当我尝试打开它时,我得到了这个:
我做错了什么?
答案1
很可能 SFTP 正在被 chroot,因此 chroot jail 中的用户无法使用目录 /var/www。
查看/etc/ssh/sshd_config
并检查 sftp 指令。您是否看到类似以下内容的内容:
Match group sftp
ChrootDirectory /home/%u
AllowTcpForwarding no
ForceCommand internal-sftp
sshd_config 手册页是这里。
基本上,一旦用户进入/home/username
SFTP,该目录就会变成,并且无法引用/
外部目录。事实上,您尝试访问的符号链接看起来就像是(即,现在是,因此引用的任何链接也必须是chroot 上下文中的子目录)。/home/username
ln -s /var/www /home/username/www
/home/username/var/www
/home/username
/
/var/www
/home/username
解决方案是关闭 chroot(但这会带来其他安全隐患,主要是 SFTP 用户完全控制您的文件系统)。您可以将 /var/www 循环挂载到 /home/username/www(类似于mount --bind /var/www /home/username/www
(查看文档mount
)这应该会在 chroot 下按预期工作)。您还可以修改 sshd_config 文件以将该特定用户排除在 chroot 之外(不过,同样会带来安全隐患)。
我将首先尝试绑定安装。
答案2
我决定取消我创建的符号链接,并使用
root@server:/home/username# mkdir www
root@server:/home/username# mount --bind /home/username/www /var/www
(即使我丢失了 /var/www 中的所有内容,但我不在乎)
谢谢大家!