我有一个虚拟专用服务器,我可以使用我的 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 中。不幸的是,这并没有起到什么作用,但它可以让你了解如何进行设置。根据你想要提供的内容,你需要安装其他库和二进制文件。
创建一个 chroot
安装 dchroot 和 debootstrap 包。
以管理员身份(即使用 sudo)为 chroot 创建一个新目录。在此过程中,
/var/chroot
将使用该目录。为此,请sudo mkdir /var/chroot
在命令行中输入。以管理员身份
/etc/schroot/schroot.conf
在文本编辑器中打开。输入cd /etc/schroot
,然后输入gksu gedit schroot.conf
。这将允许您编辑该文件。添加以下行
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 环境。为此,您可以按照以下步骤操作: