我正在为sftp设置chroot的过程中,使用了一些教程(source1、source2),并在/etc/ssh/sshd_config中完成了以下配置:
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding nosftp基文件夹为/var/sftp,用户创建如下:
groupadd sftpusers
adduser myuser01
mkdir -p /var/sftp/myuser01
usermod -a -G sftpusers myuser01
chown myuser01:myuser01 /var/sftp/myuser01
systemctl restart sshd现在,当我尝试登录时,我会在/var/sftp文件夹中结束,它演示了登录工作。
由于我希望用户在/var/sftp/<userid>文件夹中结束,所以我尝试在Match Group行下面设置以下配置为sshd_config:
ChrootDirectory /var/sftp/%u当我这样做时,我在登录尝试时会得到一个错误client_loop: send disconnect: Broken pipe。根据ssh_config的手册页,变量应该被接受,如下:
ChrootDirectory接受令牌%、%h和%u。
有什么想法吗?
环境规划署:
发布于 2020-07-15 02:01:49
chown myuser01:myuser01 /var/sftp/myuser01
...
ChrootDirectory /var/sftp/%uOpenSSH SSH服务器的ChrootDirectory指令要求root目录及其父目录由root拥有:
ChrootDirectory 将目录的路径名指定为chroot(2)到身份验证后。在会话启动时,sshd(8)检查路径名的所有组件都是根拥有的目录,任何其他用户或组都不能写这些目录。在chroot之后,sshd(8)将工作目录更改为用户的主目录。
我还没有测试这一点,但是我认为如果您在chroot环境中创建了一个/etc/passwd文件,其中包含了一个用户的行,那么sshd将把该行中的主目录字段作为chroot环境中的用户主目录。如果这确实有效,那么您可以使用它让用户的会话从它的工作目录开始,而不是chroot目录。
发布于 2021-12-15 22:12:18
在您的示例中,/var/sftp和/var/sftp/usero1需要由root拥有,不能被任何其他用户写入。
你的问题很可能是你这样做的:
chown myuser01:myuser01 /var/sftp/myuser01相反,它应该由root:root和chmod 755拥有
sudo mkdir /var/sftp
sudo mkdir /var/sftp/myuser01
sudo chown -R root:root /var/sftp
chmod -R 755 /var/sftp既然用户目录由root:root拥有,其他用户不能写,您的用户应该能够登录到其中,并通过sshd内部sftp进行着色。
ForceCommand internal-sftp
ChrootDirectory /var/sftp/所以,把这一切放在一起:
sudo groupadd sftpusers
sudo mkdir /var/sftp
sudo mkdir /var/sftp/myuser01
sudo chown -R root:root /var/sftp
chmod -R 755 /var/sftp
sudo adduser -h /var/sftp/myuser01 myuser01
sudo usermod -a -G sftpusers myuser01编辑您的/etc/ssh/sshd_config并将其添加到末尾:
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/%u
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no保存后重新启动sshd
systemctl restart sshd我的问题是,这意味着用户"myuser01“将没有任何写入访问他们的基本目录.所以在我的例子中,这并不是很糟糕--我实际上需要"myuser01“来拥有他们需要访问的www目录--我通过以下方法解决了这个问题
sudo mkdir /var/sftp/myuser01/www/
sudo chown myuser01:myuser01 /var/sftp/myuser01/www/(此处更改名称以遵循您的命名约定)
如果您只想为该用户设置一个SFTP色度监狱--他们将只能使用SFTP,但是您不需要去构建一个完整的命令和库来供他们使用.否则,您需要将所需的命令添加到他们的bin目录中,也需要将所需的lib添加到他们的/lib目录中,并且我认为/etc/passwd和/etc/group的本地副本具有所需的组和用户条目(我自己还没有测试这一点,因为我只是需要一个SFTP监狱)
发布于 2021-04-25 14:29:32
ChrootDirectory必须包含支持用户会话所需的文件和目录。对于交互式会话,这至少需要shell (通常为sh(1) )和基本的/dev节点,如null(4)、0(4)、stdin(4)、stdout(4)、stderr(4)和tty(4)设备。对于使用SFTP的文件传输会话,如果使用进程内sftp-服务器,则不需要对环境进行额外的配置,尽管使用日志记录的会话可能需要在某些操作系统的chroot目录中使用/dev/log (详见sftp-server(8) )。
https://unix.stackexchange.com/questions/598520
复制相似问题