AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 477930
Accepted
pzkpfw
pzkpfw
Asked: 2013-02-13 02:32:29 +0800 CST2013-02-13 02:32:29 +0800 CST 2013-02-13 02:32:29 +0800 CST

尝试仅在一个用户的 chroot 监狱中设置 SFTP

  • 772

希望你们能帮忙看看我是否在这里做了一些奇怪的事情,我正在尝试使用我设置的用户登录,FileZilla 向我展示:

Command:    open "///@///" Command: Pass: ********
Status: Connected to ///
Error:  Connection closed by server with exitcode 1
Error:  Could not connect to server

所以,我进入 auth.log 并看到:

Feb 12 11:08:49 sshd[12056]: Accepted password for /// from /// port /// ssh2
Feb 12 11:08:49 sshd[12056]: pam_unix(sshd:session): session opened for user /// by (uid=0)
Feb 12 11:08:50 sshd[12164]: subsystem request for sftp by user ///
Feb 12 11:08:50 sshd[12056]: pam_unix(sshd:session): session closed for user ///

这是相关用户的密码条目:

///:x:666:666:///,,,:/chroot:/usr/bin/rssh

如果我尝试自己运行 rssh,我会Allowed commands: sftp发现它似乎设置正确。至于我设置为主文件夹的文件夹,它归用户所属的组“sftp”所有。

显然我在这里做错了,所以我应该尝试接近解决方案的任何提示都将受到赞赏。

编辑:如果我将 /usr/bin/rssh 更改为 /bin/bash,它工作正常,但用户仍然可以浏览整个系统,这并不理想。基本上,我希望用户直接进入一个目录,在那里做任何他们想做的事情,比如读写文件,但不能进入文件系统,运行其他二进制文件等等。

ssh
  • 1 1 个回答
  • 9019 Views

1 个回答

  • Voted
  1. Best Answer
    Devator
    2013-02-13T04:16:28+08:002013-02-13T04:16:28+08:00

    1.创建一个新组

    创建一个名为 sftpusers 的组。只有属于这个组的用户才会被自动限制在这个系统上的 SFTP chroot 环境中。

    # groupadd sftpusers
    

    2.创建用户(或修改现有用户)

    假设您要创建一个用户 guestuser,只允许他在 chroot 环境中执行 SFTP,而不允许执行 SSH。

    以下命令创建 guestuser,将此用户分配给 sftpusers 组,将 /incoming 作为主目录,将 /sbin/nologin 设置为 shell(这将不允许用户通过 ssh 并获得 shell 访问权限)。

    # useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser
    # passwd guestuser
    

    验证用户是否已正确创建。

    # grep guestuser /etc/passwd
    guestuser:x:500:500::/incoming:/sbin/nologin
    

    如果你想修改现有用户并使他仅成为 sftp 用户并将他放入 chroot sftp 监狱,请执行以下操作:

    # usermod -g sftpusers -d /incoming -s /sbin/nologin john
    

    在相关说明中,如果您必须将文件从 Windows 传输到 Linux,请使用此 7 大 sftp 客户端列表中提到的任何一个 sftp 客户端。

    3. 在 sshd_config 中设置 sftp-server 子系统

    您应该指示 sshd 为 sftp 使用 internal-sftp(而不是默认的 sftp-server)。

    修改 /etc/ssh/sshd_config 文件并注释掉以下行:

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

    接下来,将以下行添加到 /etc/ssh/sshd_config 文件

    Subsystem       sftp    internal-sftp
    

    它应该是这样的:

    # grep sftp /etc/ssh/sshd_config
    #Subsystem      sftp    /usr/libexec/openssh/sftp-server
    Subsystem       sftp    internal-sftp
    

    4. 为组指定 Chroot 目录

    您只想将某些用户(即属于 sftpusers 组的用户)放入 chroot 监狱环境中。在 /etc/ssh/sshd_config 末尾添加以下行

    Match Group sftpusers
            ChrootDirectory /sftp/%u
            ForceCommand internal-sftp
    

    在上面:

    • Match Group sftpusers – 这表示以下行将仅与属于组 sftpusers 的用户匹配
    • ChrootDirectory /sftp/%u – 这是用户通过身份验证后将用于 chroot 的路径。%u 表示用户。因此,对于 john,这将是 /sftp/john。
    • ForceCommand internal-sftp – 这会强制执行 internal-sftp 并忽略 ~/.ssh/rc 文件中提到的任何命令。

    5. 创建 sftp 主目录

    由于我们已将 /sftp 指定为上面的 ChrootDirectory,因此创建此目录(相当于您典型的 /home 目录)。

    # mkdir /sftp
    

    现在,在 /sftp 下,为属于 sftpusers 组的用户创建单独的目录。即只允许执行 sftp 并且将处于 chroot 环境中的用户。

    # mkdir /sftp/guestuser
    

    因此,/sftp/guestuser 等同于 guestuser 的 /。当 guestuser sftp 到系统,并执行“cd /”时,他们将只能看到“/sftp/guestuser”下目录的内容(而不是系统的真实 /)。这就是 chroot 的力量。

    因此,在此目录 /sftp/guestuser 下,创建您希望用户看到的任何子目录。例如,创建一个传入目录,用户可以在其中 sftp 其文件。

    # mkdir /sftp/guestuser/incoming
    

    6.设置适当的权限

    要使 chroot 正常工作,您需要确保在上面刚刚创建的目录上正确设置了适当的权限。

    将所有者设置为用户,并将组设置为 sftpusers 组,如下所示。

    # chown guestuser:sftpusers /sftp/guestuser/incoming
    

    传入目录的权限如下所示。

    # ls -ld /sftp/guestuser/incoming
    drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
    

    /sftp/guestuser 目录的权限如下所示

    # ls -ld /sftp/guestuser
    drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser
    
    # ls -ld /sftp
    drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
    

    7.重启sshd并测试Chroot SFTP

    重启sshd:

    # service sshd restart
    

    测试 chroot sftp 环境。如下所示,当 gusetuser 执行 sftp 和“cd /”时,他们只会看到传入目录。

    # sftp [email protected]
    guestuser@thegeekstuff's password:
    
    sftp> pwd
    Remote working directory: /incoming
    
    sftp> cd /
    sftp> ls
    incoming
    

    当 guestuser 将任何文件从 sftp 传输到 /incoming 目录时,它们实际上位于系统上的 /sftp/guestuser/incoming 目录下。

    • 9

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve