如何更改 Linux 用户的根目录?

如何更改 Linux 用户的根目录?

对于 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 实用程序(例如pstop和许多其他实用程序)无法工作。用户也将无法访问/dev/null,这将破坏很多东西。

用户也将无法访问在与标准输入一起使用时/dev/tty会中断的文件描述符。用户的应用程序将继承 chroot 之前的 stdin、stdout 和 stderr 打开文件描述符,但 less 打开 /dev/tty,以便它可以从用户那里获取按键来处理从管道重定向的 stdin。lessmore

您还将无法访问许多程序使用的任何程序或共享库或 /etc 下的许多文件(例如 /etc/protocols )。

所有这些都是您可以解决的问题,但最终您需要做比您考虑的更多的工作来使用户环境可用。

如果你确实尝试了我的建议,我建议你一定要小心。很容易出错,把事情搞砸。顺便说一句,我还没有测试过这个。

相关内容