首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"client_loop:发送断开:断管“给chroot用户,密码正确吗?

"client_loop:发送断开:断管“给chroot用户,密码正确吗?
EN

Unix & Linux用户
提问于 2020-07-14 20:51:05
回答 4查看 31.8K关注 0票数 5

我正在为sftp设置chroot的过程中,使用了一些教程(source1source2),并在/etc/ssh/sshd_config中完成了以下配置:

代码语言:javascript
复制
Match Group sftpusers
      ForceCommand internal-sftp
      ChrootDirectory /var/sftp/
      PermitTunnel no
      AllowAgentForwarding no
      AllowTcpForwarding no
      X11Forwarding no

sftp基文件夹为/var/sftp,用户创建如下:

代码语言:javascript
复制
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

代码语言:javascript
复制
ChrootDirectory /var/sftp/%u

当我这样做时,我在登录尝试时会得到一个错误client_loop: send disconnect: Broken pipe。根据ssh_config的手册页,变量应该被接受,如下:

ChrootDirectory接受令牌%、%h和%u。

有什么想法吗?

环境规划署:

  • 操作系统: Ubuntu 18.04.4 LTS
  • sshd: OpenSSH_7.6p1 Ubuntu-4 ubuntu0.3,OpenSSL 1.0.2n 2017年12月7日
EN

回答 4

Unix & Linux用户

发布于 2020-07-15 02:01:49

代码语言:javascript
复制
chown myuser01:myuser01 /var/sftp/myuser01
...
ChrootDirectory /var/sftp/%u

OpenSSH SSH服务器的ChrootDirectory指令要求root目录及其父目录由root拥有:

ChrootDirectory 将目录的路径名指定为chroot(2)到身份验证后。在会话启动时,sshd(8)检查路径名的所有组件都是根拥有的目录,任何其他用户或组都不能写这些目录。在chroot之后,sshd(8)将工作目录更改为用户的主目录。

我还没有测试这一点,但是我认为如果您在chroot环境中创建了一个/etc/passwd文件,其中包含了一个用户的行,那么sshd将把该行中的主目录字段作为chroot环境中的用户主目录。如果这确实有效,那么您可以使用它让用户的会话从它的工作目录开始,而不是chroot目录。

票数 9
EN

Unix & Linux用户

发布于 2021-12-15 22:12:18

在您的示例中,/var/sftp/var/sftp/usero1需要由root拥有,不能被任何其他用户写入。

你的问题很可能是你这样做的:

代码语言:javascript
复制
chown myuser01:myuser01 /var/sftp/myuser01

相反,它应该由root:rootchmod 755拥有

代码语言:javascript
复制
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进行着色。

代码语言:javascript
复制
ForceCommand internal-sftp
ChrootDirectory /var/sftp/

所以,把这一切放在一起:

代码语言:javascript
复制
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并将其添加到末尾:

代码语言:javascript
复制
Match Group sftpusers
      ForceCommand internal-sftp
      ChrootDirectory /var/sftp/%u
      PermitTunnel no
      AllowAgentForwarding no
      AllowTcpForwarding no
      X11Forwarding no

保存后重新启动sshd

代码语言:javascript
复制
systemctl restart sshd

我的问题是,这意味着用户"myuser01“将没有任何写入访问他们的基本目录.所以在我的例子中,这并不是很糟糕--我实际上需要"myuser01“来拥有他们需要访问的www目录--我通过以下方法解决了这个问题

代码语言:javascript
复制
sudo mkdir /var/sftp/myuser01/www/
sudo chown myuser01:myuser01 /var/sftp/myuser01/www/

(此处更改名称以遵循您的命名约定)

如果您只想为该用户设置一个SFTP色度监狱--他们将只能使用SFTP,但是您不需要去构建一个完整的命令和库来供他们使用.否则,您需要将所需的命令添加到他们的bin目录中,也需要将所需的lib添加到他们的/lib目录中,并且我认为/etc/passwd/etc/group的本地副本具有所需的组和用户条目(我自己还没有测试这一点,因为我只是需要一个SFTP监狱)

票数 3
EN

Unix & Linux用户

发布于 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) )。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/598520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档