对于 Linux 主机上的用户,我需要使除他的主目录之外的所有内容都无法访问。
我听说这通常是通过更改用户的根目录(并将其设置为用户的主目录)来完成的,但是我找不到执行此操作的方法。
我考虑过该chroot
命令,但它似乎只是运行指定的命令,将指定的目录视为根目录。所以这似乎chroot
不是我需要的。
所以我的问题是:改变用户根目录的命令是什么?
答案1
听起来您想更改 HOME 目录,而不是根目录。根目录始终是 / 或 /root。
usermod -d /path/to/new/homedir/ username
答案2
为了确保此主目录后面的“所有内容都无法访问”,我会使用 chroot,但是如果您不准备 chroot 目录,您将无法执行任何操作,并且没有任何可用的二进制文件或库。
FTP 服务器的配置对您有用: http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec296.html
这是一个完整的 chroot 设置,用于将 ftp 用户限制到这个 chroot 目录。
答案3
我坚持这个答案,我不在乎我是否得到了 -1。这不是 Unix 可以以任何合理方式为您做的事情。您要求的几乎是不可能的。
但是有一种方法可以得到你想要的东西。使用虚拟机。为相关用户设置虚拟机实例,并只授予他们登录权限,而不是主机操作系统。
以下是我原来的答案:
只需使用权限。这就是它们的用途。用户通常无权写入除 /tmp 和其主目录之外的任何内容。他们必须具有对/bin/
、/usr/bin
、/usr/lib
和的读取权限/lib
,否则他们将无法执行任何操作。
如果您确实想要比权限所给予的更严格的东西,那么请研究设置 selinux,以便您可以进一步限制它们。
仅使用chroot
并不能满足您的需求。设置起来非常复杂,而且有多种方法可以绕过它。
答案4
我认为如果你添加
if grep "\\<${USER}\\>" /etc/jailbirds > /dev/null
then
echo I am not a crook
else
exec chroot $CWD
endif
到最后,/etc/profile
您可能会得到您想要的东西,但它可能会产生一些我不知道的副作用(接管正在运行的 shell/etc/profile
可能会导致问题)。在这种情况下,您需要创建一个文件/etc/jailbirds
,其中包含您想要 chroot 的用户列表。您还需要确保此文件存在,并决定在访问它时出现错误时要做什么,以确保其他用户(尤其是 root)不会被 chroot 锁定
此外,这样做会很困难。用户将无法访问,/proc
这将导致许多 shell 实用程序(例如ps
、top
和许多其他实用程序)无法工作。用户也将无法访问/dev/null
,这将破坏很多东西。
用户也将无法访问在与标准输入一起使用时/dev/tty
会中断的文件描述符。用户的应用程序将继承 chroot 之前的 stdin、stdout 和 stderr 打开文件描述符,但 less 打开 /dev/tty,以便它可以从用户那里获取按键来处理从管道重定向的 stdin。less
more
您还将无法访问许多程序使用的任何程序或共享库或 /etc 下的许多文件(例如 /etc/protocols )。
所有这些都是您可以解决的问题,但最终您需要做比您考虑的更多的工作来使用户环境可用。
如果你确实尝试了我的建议,我建议你一定要小心。很容易出错,把事情搞砸。顺便说一句,我还没有测试过这个。