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)
Cyberduck 说Unexpected end of sftp stream.
和其他客户也有类似的错误。
我忘记了什么/出了什么问题?
谢谢!
编辑
我无法让它工作,即使在联系 OpenSSH 邮件列表之后,我决定重置我的整个服务器(幸运的是,这是一个可行的选择)。它现在正在工作。
您的设置看起来确实不错,让我们看看我们是否可以找出问题所在。
检查您的 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]
在本地测试 SFTP。
在你的 Ubuntu 计算机上输入一个终端:
sftp sam@localhost
Run Code Online (Sandbox Code Playgroud)
并查看您是否可以登录(您必须在询问时输入 sam 的密码)。如果它有效,则 Cyberduck 的配置可能有问题。
如果您无法登录,请尝试不使用 chroot 的 SFTP。
在没有 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_config
sshd
/var/log/auth.log
如果您无法登录,请尝试 SSH。
在本地测试 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@localhost
和LogLevel 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 是否正在执行此操作:
Run Code Online (Sandbox Code Playgroud)ssh yourhost /usr/bin/true
如果上述命令产生任何输出,那么您需要修改您的 shell 初始化。
如果您无法登录,请尝试ssh root@localhost
。如果不起作用sshd
,则服务器上有问题。增加详细程度(LogLevel VERBOSE
in /etc/ssh/sshd_config
),重新启动
sshd
并仔细阅读/var/log/auth.log
,答案可能就在那里。
归档时间: |
|
查看次数: |
20011 次 |
最近记录: |