更改 SSH 用户的权限

更改 SSH 用户的权限

在我的 Synology NAS 中,我创建了一个 SSH 用户,其主目录为/volume1/USERNAME。但是,此用户可以访问其他目录。

有没有办法可以限制他不能访问主目录之外的任何内容?

答案1

因此,设置 SSH 的 chroot 需要启用 SFTP(SSH 文件传输协议),它是 OpenSSH 的一部分。请参阅下文了解具体步骤。

顺便说一句,如果您看到 USERNAME 全部大写,请将 USERNAME 替换为您尝试 chroot 的用户名。

启用 Chrooted SFTP

启用 SFTP 非常简单。打开 /etc/ssh/sshd_config...

vi /etc/ssh/sshd_config

并确保其中包含以下行:

Subsystem sftp /usr/lib/openssh/sftp-server

然后在文件末尾添加以下节(为每个想要 chroot 的用户添加这样的节):

Match User USERNAME
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

除了为每个用户添加一个节之外,您还可以 chroot 组,例如如下所示:

Match Group users
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

这会将用户组的所有成员 chroot 到 /home 目录。重新启动 OpenSSH:

/etc/init.d/ssh restart

如果您将多个用户 chroot 到同一个目录,但不希望这些用户浏览其他用户的主目录,则可以按如下方式更改每个主目录的权限:

chmod 700 /home/USERNAME

之后,您可以使用 SFTP 客户端(例如 FileZilla 或 WinSCP)登录。

启用 Chrooted SSH

启用 chrooted SSH 稍微复杂一些,因为我们必须设置一个 chroot 环境,其中包含用户应该能够使用的所有程序/工具(例如 /bin/bash、/bin/cp 等)。这意味着我们还必须将这些程序所需的所有库复制到 chroot jail。您可以使用 cp 命令手动执行此操作,也可以使用 ldd 命令找出工具需要哪些库,例如

ldd /bin/bash

我们还必须使用 mknod 命令在 chroot jail 中创建一些设备,例如 /dev/null、/dev/zero、/dev/tty 和 /dev/urandom。但是,这可能是一项繁琐的任务。幸运的是,有一个脚本可以为我们完成这项工作。首先,我们需要安装一些先决条件:

apt-get install sudo debianutils coreutils

然后我们将 make_chroot_jail.sh 下载到 /usr/local/sbin 并让 root 用户可执行:

cd /usr/local/sbin
wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
chmod 700 /usr/local/sbin/make_chroot_jail.sh

在我们使用该脚本之前,你可能需要在该脚本的发行版的 APPS 行中添加一些程序(例如 /usr/bin/vi),以便这些工具自动添加到 chroot jail 中:

vi /usr/local/sbin/make_chroot_jail.sh


elif [ "$DISTRO" = DEBIAN ]; then
  APPS="/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir /bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups /usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp /sbin/unix_chkpwd /usr/bin/vi"
else

接下来我们添加一个指向 /home 的符号链接 /home/home:

cd /home
ln -s . home

现在我们已经可以使用脚本了。用法如下:

make_chroot_jail.sh username [/path/to/chroot-shell [/path/to/chroot]]

chroot-shell 是脚本为 chroot 用户创建的特殊 shell。由于 OpenSSH 现在默认支持 chrooting,因此我们不需要脚本来创建特殊 shell;相反,我们可以使用 /bin/bash 或 /bin/sh。用户是否已经存在并不重要。如果用户已经存在,则会更新该用户;如果不存在,则会创建该用户。

make_chroot_jail.sh USERNAME /bin/bash /home

这将使用 chroot jail /home 创建/更新用户 USERNAME。要更新 chroot jail 中的所有文件/库,请运行

make_chroot_jail.sh update /bin/bash /home

现在我们需要配置与 SFTP 配置类似的 OpenSSH。打开 /etc/ssh/sshd_config...

vi /etc/ssh/sshd_config

并在文件末尾添加以下节(为每个想要 chroot 的用户添加这样的节):

Match User USERNAME
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no

除了为每个用户添加一个节之外,您还可以 chroot 组,例如如下所示:

Match Group users
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no

这会将用户组的所有成员 chroot 到 /home 目录。与 SFTP 配置的不同之处在于,这一次,我们不能在 Match 节中使用 ForceCommand /usr/lib/openssh/sftp-server 行!这使得用户仍然可以使用 chrooted SFTP(前提是您在 /etc/ssh/sshd_config 中也有 Subsystem sftp /usr/lib/openssh/sftp-server 行),但也可以 chrooted SSH。

重新启动 OpenSSH

/etc/init.d/ssh restart

如果您将多个用户 chroot 到同一个目录,但不希望这些用户浏览其他用户的主目录,则可以按如下方式更改每个主目录的权限:

chmod 700 /home/USERNAME

之后,您可以使用 SSH 客户端(例如 PuTTY)登录。

相关内容