chroot 之后用户无法使用 SFTP

chroot 之后用户无法使用 SFTP

Ubuntu 10.04.4 LTS

我正在尝试 chroot 用户“sam”。根据所有文章的说法,这应该可行,但显然我还是做错了什么。

用户:

sam:x:1005:1006::/home/sam:/bin/false

我将 /etc/ssh/sshd_config 更改为如下形式(在文件底部):

#Subsystem sftp /usr/lib/openssh/sftp-server
# CHROOT JAIL
Subsystem sftp internal-sftp
Match group users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

我将 sam 添加到用户组:

$groups sam
sam : sam users

我改变了 sam 主文件夹的权限:

$ ls -la /home/sam
drwxr-xr-x 11 root root  4096 Sep 23 16:12 .
drwxr-xr-x  8 root root  4096 Sep 22 16:29 ..
drwxr-xr-x  2 sam  users 4096 Sep 23 16:10 awstats
drwxr-xr-x  3 sam  users 4096 Sep 23 16:10 etc
...
drwxr-xr-x  2 sam  users 4096 Sep 23 16:10 homes
drwxr-x---  3 sam  users 4096 Sep 23 16:10 public_html

我重新启动了 ssh,现在 sam 无法使用 SFTP 登录。会话已创建,但也立即关闭:

Sep 24 12:55:15 ... sshd[9917]: Accepted password for sam from  ...
Sep 24 12:55:15 ... sshd[9917]: pam_unix(sshd:session): session opened for user sam  by (uid=0)
Sep 24 12:55:16 ... sshd[9928]: subsystem request for sftp
Sep 24 12:55:17 ... sshd[9917]: pam_unix(sshd:session): session closed for user sam

Cyber​​duck 表示Unexpected end of sftp stream.其他客户端也出现了类似的错误。

我忘记了什么/出了什么问题?

谢谢!


编辑

我无法让它工作,即使联系了 OpenSSH 邮件列表,所以我决定重置整个服务器(幸运的是,这是一个可行的选择)。它现在可以正常工作了。

答案1

您的设置看起来确实不错,让我们看看是否可以找出问题所在。

  1. 检查你的 openSSH 版本是否支持ChrootDirectory

    ChrootDirectoryopenSSH 版本 4.8p1 中添加了对关键字的支持(http://www.debian-administration.org/articles/590)。检查是否至少安装了该版本:

    dpkg --list openssh-server
    

    [这可能不是原因,根据http://releases.ubuntu.com/lucid/ubuntu-10.04.4-server-amd64.list openssh-server的版本是5.3p1]

  2. 在本地测试 SFTP。

    在 Ubuntu 计算机上的终端中输入:

    sftp sam@localhost
    

    看看您是否可以登录(当系统询问时,您必须输入 sam 的密码)。如果可以登录,则 Cyber​​duck 的配置可能有问题。

    如果您无法登录,请尝试不带 chroot 的 SFTP。

  3. 无需 chroot 在本地测试 SFTP。

    前缀:

    Match group users
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no
    

    #其注释掉,重新启动 sshd ( sudo service ssh restart),然后输入:

    sftp sam@localhost
    

    询问时输入密码,看看是否可以登录。如果可以登录,请按如下方式排除 chroot 配置故障:使用命令重试步骤 2,sftp -vvv sam@localhost以获得详细输出。您还可以通过添加并重新启动来提高的日志sshd级别。希望您在控制台或 中看到一些明显的信息。LogLevel VERBOSE/etc/ssh/sshd_configsshd/var/log/auth.log

    如果您无法登录,请尝试 SSH。

  4. 在本地测试 SSH。

    SFTP 需要有效的 SSH,因此将 sam 的 shell 更改为 /bin/bash:

    sudo usermod -s /bin/bash sam
    

    然后尝试:

    ssh sam@localhost
    

    当系统询问时,输入 sam 的密码。如果您可以登录,请尝试增加详细程度(如 3) 中所述)以找出问题所在(和sftp -vvv sam@localhost)。另一种可能性是 shell 初始化混淆了 sftp 客户端(LogLevel VERBOSE/etc/ssh/sshd_confighttp://www.openssh.org/faq.html#2.9):

    2.9 – sftp/scp 连接失败,但 ssh 正常。

    如果您的 shell 初始化(.profile、.bashrc、.cshrc 等)会产生非交互式会话的输出,则 sftp 和/或 scp 可能会在连接时失败。此输出会使 sftp/scp 客户端感到困惑。您可以通过执行以下命令来验证您的 shell 是否正在执行此操作:

    ssh yourhost /usr/bin/true
    

    如果上述命令产生任何输出,则需要修改 shell 初始化。

    如果无法登录,请尝试ssh root@localhost。如果 也不起作用,则sshd服务器出现问题。增加详细程度(LogLevel VERBOSE在 中/etc/ssh/sshd_config),重新启动 sshd并仔细阅读/var/log/auth.log,答案可能就在那里。

答案2

Centos 7 - 我遇到了同样的问题 - 我尝试了一切方法来诊断它 - 最终我更改了'/etc/ssh/sshd_conf'中的 sftp 子系统,重新启动了 sshd ( service sshd restart) 并且问题得到了解决:

从 :

#Subsystem      sftp    /usr/libexec/openssh/sftp-server

到 :

Subsystem sftp internal-sftp

我不知道为什么提供了两种实现

答案3

我遇到了同样的问题,通过将 chroot-dir 设置为所有者根和组根来解决。

chown root:root chroot-dir

答案4

  1. 对于“连接被拒绝”错误,请检查 sshd_config 中的“UsePAM yes”设置。它必须在“Subsystem sftp”之前

  2. 对于身份验证问题,请检查 chroot-path 中的每个目录是否由 root 拥有且具有 755 或更低的权限。

例如:ChrootDirectory /var/www/data

您必须检查以下权限和所有者:/var、/var/www、/var/www/data

  1. 对于诸如“身份验证后关闭连接”之类的奇怪问题,请尝试更新或更改 SFTP 服务器。

apt-get 安装 openssh 服务器

“子系统 sftp internal-sftp”<->“子系统 sftp /usr/lib/openssh/sftp-server”(从出现问题的类型切换到另一个)

相关内容