我浏览了许多网站和论坛,了解如何使用 CHROOT 设置被限制在某个目录中的 SFTP 用户。以下是我遵循的步骤,但我似乎无法获得写入权限。
设置
sshd_配置
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match group webmaster
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
创建文件夹
mkdir /var/www/sites
创建用户和组
useradd uploader
passwd uploader
usermod -d /var/www/sites uploader
groupadd webmaster uploader
groupadd www-data uploader
权限和所有权
chown root:root /var/www
chmod 755 /var/www/sites
现在,通过这些设置,用户上传者可以通过 SFTP 进入主目录,但无法写入该目录。
发生了两个典型错误,我无法登录或没有写权限。
登录错误
Error: Network error: Software caused connection abort
Error: Could not connect to server
Changing permissions of /var/www/sites to 775 or 777 causes login error.
chown /var/www/sites to uploader:root causes login error.
chwon root:webmaster or root:www-data I have no write permissions
我正在努力弄清楚这一点,如果有人能给我指明正确的方向,我将不胜感激。
谢谢。
答案1
找到解决方案了。用户被关进了/var/www/sites
。然后我创建了另一个文件夹/var/www/sites/site1
。
我用:
chown root:webmaster /var/www/sites/site1
chmod 775 /var/www/sites/site1
这使得主目录具有正确的登录权限,然后能够写入下一个文件夹。
如果用户需要对 的写访问权限,那么您必须将具有所有权和权限 755 的/var/www/sites
用户监禁在 。然后您需要授予root 的所有权:(您的组)和 775 的权限。/var/www
root:root
/var/www/sites
答案2
也许最好的解决办法是:
mkdir /var/www/sites/myfirstuser/hisownsite
mkdir /var/www/sites/myseconduser/hisownsite
...
chown root:root /var/www/sites /var/www/sites/{myfirstuser,myseconduser} && chmod 755 /var/www/sites/{myfirstuser,myseconduser}
chmod 775 /var/www/sites/myfirstuser/hisownsite
chmod 775 /var/www/sites/myseconduser/hisownsite
chgrp www-data /www/sites/myfirstuser/hisownsite /var/www/sites/myseconduser/hisownsite
添加用户:
useradd -d /var/www/sites/myfirstuser -s /bin/false -g www-data dev1
useradd -d /var/www/sites/myseconduser -s /bin/false -g www-data dev2
passwd dev1
passwd dev2
然后,对于您创建的每个用户,添加一个 ssh 标签,如下所示:(您也可以使用示例中的“Match Group”指令,而不是“Match User”)
Match User dev1
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Match user dev2
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
因此您可以在 chrooted 环境中管理所需的所有用户。
Hth,法布里齐奥