我正在为 sftp 设置 chroot,并使用了教程的组合(source1、source2),最终得到了以下配置/etc/ssh/sshd_config
:
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Run Code Online (Sandbox Code Playgroud)
sftp 基本文件夹/var/sftp
和用户创建如下:
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试登录时,我最终会进入该/var/sftp
文件夹,该文件夹演示了登录的工作原理。
由于我希望用户最终进入该文件夹,因此我尝试在该行下/var/sftp/<userid>
设置以下配置:sshd_config
Match Group
ChrootDirectory /var/sftp/%u
Run Code Online (Sandbox Code Playgroud)
client_loop: send disconnect: Broken pipe
当我这样做时,我在尝试登录时收到错误。根据ssh_config
变量应该被接受的手册页,如下:
ChrootDirectory 接受标记 %%、%h 和 %u。
有任何想法吗?
环境:
Ken*_*ter 13
chown myuser01:myuser01 /var/sftp/myuser01
...
ChrootDirectory /var/sftp/%u
Run Code Online (Sandbox Code Playgroud)
OpenSSH SSH 服务器的ChrootDirectory指令要求 chroot 目录及其父目录由 root 所有:
ChrootDirectory
指定身份验证后 chroot(2) 的目录路径名。在会话启动时,sshd(8) 检查路径名的所有组成部分是否为 root 拥有的目录,任何其他用户或组都无法写入这些目录。chroot 后,sshd(8) 将工作目录更改为用户的主目录。
我还没有对此进行测试,但我认为如果您/etc/passwd
在 chroot 环境中创建一个文件,其中包含相关用户的一行,那么 sshd 会将该行中的主目录字段视为 chroot 环境中用户的主目录。如果这确实有效,那么您可以使用它让用户会话从 chroot 目录以外的某个位置的工作目录开始。
小智 5
在您的示例中,/var/sftp
并且需要由任何其他用户/var/sftp/usero1
拥有且不可写root
您的问题很可能是您这样做的:
chown myuser01:myuser01 /var/sftp/myuser01
Run Code Online (Sandbox Code Playgroud)
相反,它应该由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
Run Code Online (Sandbox Code Playgroud)
既然用户目录由root:root
其他人拥有且不可写入,您的用户应该能够登录到该目录并通过 sshd inside-sftp 进行 chroot
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
Run Code Online (Sandbox Code Playgroud)
所以,把它们放在一起:
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
Run Code Online (Sandbox Code Playgroud)
编辑你的/etc/ssh/sshd_config
并将其添加到末尾:
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/%u
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Run Code Online (Sandbox Code Playgroud)
然后保存后重启sshd
systemctl restart sshd
Run Code Online (Sandbox Code Playgroud)
我的问题是,这意味着用户“myuser01”对其基本目录没有任何写访问权限......所以在我的情况下,这还不错 - 我实际上需要“myuser01”有一个 www 目录他们需要访问 - 我解决了这个问题
sudo mkdir /var/sftp/myuser01/www/
sudo chown myuser01:myuser01 /var/sftp/myuser01/www/
Run Code Online (Sandbox Code Playgroud)
(更改名称以遵循此处的命名约定)
如果您只想为该用户创建一个 SFTP chroot 监狱,那么这将起作用 - 他们只能使用 SFTP,但您不需要构建一整套 chroot 的命令和库供他们使用。否则,您需要将所需的命令添加到其 bin 目录中,并将所需的库添加到其/lib
目录中,并且我认为 和 的本地副本/etc/passwd
以及/etc/group
所需的组和用户条目(我自己还没有测试过这一点,因为我只需要一个 SFTP chroot 监狱)
归档时间: |
|
查看次数: |
42267 次 |
最近记录: |