我可以创建一个只能访问特定目录的 SSH 用户吗?

Ric*_*uez 45 linux ssh debian root ubuntu

我有一个虚拟专用服务器,我可以使用我的 root 帐户使用 SSH 连接到它,显然能够执行任何 linux 命令并访问所有磁盘区域。

我想创建另一个用户帐户,它也可以使用 SSH 访问此服务器,但只能访问某个目录,例如 /var/www/example.com/

例如,假设此用户有一个巨大的 error.log 文件 (500 MB) 位于/var/www/example.com/logs/error.log 使用 FTP 访问此文件时,此用户需要下载 500 MB 才能查看日志的最后几行,但我希望他能够能够执行这样的事情:

tail error.log

因此,我需要他能够使用 SSH 访问服务器,但我不想授予他访问所有服务器区域的权限。

我怎样才能做到这一点?

Red*_*ick 29

chroot 用户。


更新:

Vincent DanenTechRepublic 文章说:

随着 OpenSSH 4.9p1 的发布,您不再需要依赖第三方黑客或复杂的 chroot 设置来将用户限制在他们的主目录或允许他们访问 SFTP 服务。

编辑 /etc/ssh/sshd_config(在某些发行版上为 /etc/sshd_config)并设置以下选项:

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

确保“Match”指令位于文件末尾。这告诉 OpenSSH sftp 组中的所有用户都将被 chroot 到他们的主目录(%h 在 ChrootDirectory 命令中表示)

对于您希望 chroot 的任何用户,请使用以下命令将其添加到 sftp 组:

# usermod -G sftp joe
# usermod -s /bin/false joe
# chown root:root /home/joe
# chmod 0755 /home/joe
Run Code Online (Sandbox Code Playgroud)

上面的 usermod 命令会将用户 joe 添加到 sftp 组并将其 shell 设置为 /bin/false,因此他们绝对无法获得 shell 访问权限。chown 和 chmod 命令将为目录设置所需的权限。设置这些权限后,用户将被允许上传和下载文件,但不能在根目录中创建目录或文件

Chrooting shell 帐户稍微复杂一些,因为它要求某些设备文件和 shell 在用户的主目录中可用。以下命令将在 Mandriva Linux 上设置一个非常基本的 chroot 系统:

# mkdir /chroot
# cd /chroot
# mkdir {bin,dev,lib}
# cp -p /bin/bash bin/
# cp -p /lib/{ld-linux.so.2,libc.so.6,libdl.so.2,libtermcap.so.2} lib/
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# chmod 0666 dev/{null,zero}
# mkdir -p /chroot/home/joe
Run Code Online (Sandbox Code Playgroud)

有了上面的内容,用户 joe 可以 ssh 进入并且将被限制在 chroot 中。不幸的是,这并没有多大作用,但它可以让您了解如何设置它。根据您要提供的内容,您将需要安装其他库和二进制文件。


Ubuntu社区网站说:

创建一个chroot

  1. 安装 dchroot 和 debootstrap 包。

  2. 作为管理员(即使用 sudo),为 chroot 创建一个新目录。在此过程中,/var/chroot将使用该目录。为此,请sudo mkdir /var/chroot 在命令行中键入。

  3. 以管理员身份/etc/schroot/schroot.conf在文本编辑器中打开 。键入cd /etc/schroot,然后是gksu gedit schroot.conf。这将允许您编辑文件。

  4. 将以下行添加到schroot.conf,然后保存并关闭文件。替换 your_username为您的用户名。

    [lucid] description=Ubuntu Lucid location=/var/chroot priority=3 users=your_username groups=sbuild root-groups=root

打开终端并输入:

sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ \ 
http://mirror.url.com/ubuntu/
Run Code Online (Sandbox Code Playgroud)

这将在 chroot 中创建 Ubuntu 10.04 (Lucid Lynx) 的基本“安装”。下载软件包可能需要一段时间。注意:您可以将 lucid 替换为您选择的 Ubuntu 版本。注意:您必须mirror.url.com使用本地有效存档镜像的 URL更改上述内容。现在应该已经创建了一个基本的 chroot。键入sudo chroot /var/chroot 以更改为 chroot 内的 root shell。

设置chroot

您可以采取一些基本步骤来设置 chroot,提供诸如 DNS 解析和访问/proc.

注意:在 chroot 之外的 shell 中键入这些命令。

键入以下内容以/proc 在 chroot 中挂载文件系统(管理进程所需):

sudo mount -o bind /proc /var/chroot/proc  
Run Code Online (Sandbox Code Playgroud)

键入以下内容以允许从 chroot 中进行 DNS 解析(访问 Internet 需要):

sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf 
Run Code Online (Sandbox Code Playgroud)

默认情况下,chroot 中安装的软件包很少(甚至没有安装 sudo)。使用apt-get install package_name安装软件包。


小智 16

恕我直言,最好的办法是设置一个 ssh chroot jail,即/var/www/example.com/目录上的最小 bash 环境。为此,您可以遵循: