用户无法在 chroot 后 SFTP

Dau*_*ess 4 chroot sftp

Ubuntu 10.04.4 LTS

我正在尝试 chroot 用户“sam”。根据那里的所有文章,这应该有效,但显然我仍然做错了什么。

用户:

sam:x:1005:1006::/home/sam:/bin/false
Run Code Online (Sandbox Code Playgroud)

我像这样更改了 /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
Run Code Online (Sandbox Code Playgroud)

我将 sam 添加到用户组:

$groups sam
sam : sam users
Run Code Online (Sandbox Code Playgroud)

我更改了 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
Run Code Online (Sandbox Code Playgroud)

我重新启动了 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
Run Code Online (Sandbox Code Playgroud)

Cyber​​duck 说Unexpected end of sftp stream.和其他客户也有类似的错误。

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

谢谢!


编辑

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

jau*_*ume 5

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

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

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

    dpkg --list openssh-server
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 在本地测试 SFTP。

    在你的 Ubuntu 计算机上输入一个终端:

    sftp sam@localhost
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  3. 在没有 chroot 的情况下在本地测试 SFTP。

    前缀:

    Match group users
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no
    
    Run Code Online (Sandbox Code Playgroud)

    #评论它,重新启动ssh( sudo service ssh restart),然后键入:

    sftp sam@localhost
    
    Run Code Online (Sandbox Code Playgroud)

    在询问时输入密码并查看您是否可以登录。如果您可以登录,请按如下方式对 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
    
    Run Code Online (Sandbox Code Playgroud)

    并尝试:

    ssh sam@localhost
    
    Run Code Online (Sandbox Code Playgroud)

    询问时输入 sam 的密码。如果您可以登录,请尝试按照 3) 中所述增加详细程度以找出问题所在(sftp -vvv sam@localhostLogLevel VERBOSE/etc/ssh/sshd_config)。另一种可能性是shell初始化混淆了sftp客户端(http://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
    
    Run Code Online (Sandbox Code Playgroud)

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

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