![sftp chrooted 无法与某些 sftp 客户端 (Cyberduck) 协同工作](https://linux22.com/image/545651/sftp%20chrooted%20%E6%97%A0%E6%B3%95%E4%B8%8E%E6%9F%90%E4%BA%9B%20sftp%20%E5%AE%A2%E6%88%B7%E7%AB%AF%20(Cyber%E2%80%8B%E2%80%8Bduck)%20%E5%8D%8F%E5%90%8C%E5%B7%A5%E4%BD%9C.png)
我无法在 SFTP+chrooted 环境中工作,使用 internal-sftp 指令可以工作,但我无法设置 umask。(例如 umask 002)使用 openssh 包中的 sftp-server 不起作用,因为只有 chrooted 的登录 shell 用户才能使用 /bin/false 重播(找不到文件)这是来自的 sshd 服务器行为: http://www.openssh.org/faq.html#2.9
我的 sshd 配置:
Match User sftponly
ChrootDirectory /mnt/www-prod-shared-jail/sftponly/
AllowTCPForwarding no
X11Forwarding no
#ForceCommand internal-sftp -u 002
ForceCommand /usr/lib/openssh/sftp-server
#ForceCommand /bin/sh -c 'umask 002; /usr/lib/openssh/sftp-server'
你是怎么解决这个问题的?我的 chrooted 环境,在 home (chrooted) 中是 /jail/user/bin/false
我尝试:
- 删除 .bashrc
- 在 /etc/passwd 设置 /bin/false 中禁用 /bin/bash
- 尝试在 choroot 中重新创建 /bin/bash,但没有任何效果。
你有什么想法 ?
谢谢,艾玛
答案1
内部 sftp 服务器以 root 身份运行,因此会获取 root umask。您可以通过强制 umask 来解决这个问题,例如在/etc/ssh/sshd_config
更改中
Subsystem sftp /usr/lib/openssh/sftp-server
到
Subsystem sftp /bin/sh -c 'umask 0002; /usr/libexec/openssh/sftp-server'
或者您想要的任何 umask。
答案2
我最近遇到了这个问题。在 sshd_config 中指定 umask 适用于 sftp,但不适用于 internal-sftp。不幸的是,为了在不创建整个 chroot 环境的情况下监禁用户,您必须使用 internal-sftp。好消息是,如果您使用 PAM,仍然有办法设置 umask。
创建一个包含所有 sftp 用户的组。为了举例,我们将其命名为 sftpjail。
然后将以下内容添加到 /etc/pam.d/login
session optional pam_umask.so sftpjail umask=0002
这将为 sftpjail 组中的所有用户设置 umask。
编辑 如果您想使用上面的配置,我敢肯定您缺少的是 chroot 环境(二进制文件、配置文件等)——因此在尝试 chroot 时会出现“文件未找到”错误。不过,如果是我,我会重新使用“ForceCommand internal-sftp”并在 PAM 中设置 umask
答案3
我遇到了这个问题,但我在客户端机器上使用 ssh 而不是 sftp。当我使用 sftp user@host 而不是 ssh user@host 时,它就正常工作了。