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

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

我有一个虚拟专用服务器,我可以使用我的 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 访问服务器,但我不想授予他所有服务器区域的访问权限。

我怎样才能做到这一点?

答案1

chroot用户。


更新:

TechRepublic 文章作者:Vincent Danen说:

随着 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

确保“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

上面的 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

通过上述操作,用户 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] 描述=Ubuntu Lucid 位置=/var/chroot 优先级=3 用户=你的用户名 组=sbuild root-groups=root

打开终端并输入:

sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ \ 
http://mirror.url.com/ubuntu/

这将在 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  

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

sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf 

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

答案2

在我看来,最好的办法是设置 ssh chroot jail,即/var/www/example.com/目录中的最小 bash 环境。为此,您可以按照以下步骤操作:

相关内容