允许用户通过 sudo 查看其他用户的主目录

允许用户通过 sudo 查看其他用户的主目录

我是系统管理新手。我们建立了一个实验室,其中有服务器和客户端计算机。客户端计算机具有 LDAP 用户,该用户具有中央服务器中所有用户的工作区。因此,每当用户登录时,他的工作区将通过客户端计算机中的 NFS 服务安装,并且当他注销时,他的所有工作将保存到服务器上。

现在,我想为服务器中的本地用户提供有限的 root 访问权限。我希望该本地用户能够查看所有 LDAP 用户的主目录,而不能查看其他任何内容。我相信我正在服务器中寻找轮用户。我还认为我应该在 visudo 文件中进行一些更改,以允许对服务器中的本地用户进行有限的 root 访问。

user1, %operator ALL= /home/users

我尝试在本地用户 user1 的 visudo 文件中添加上述命令。我还将用户添加到轮组中,如下所示。

usermod -G 10 user1

但是,我没有看到任何变化。为什么我的工作方法没有达到预期效果sudo

由于这种方法似乎不起作用,我问:允许用户读取其他用户的主目录

答案1

有几件事:

  1. 该命令sudo用于将您自己提升到某个命令或一组命令的更高级别的凭据,而不是用于获取对您 (1) 不是所有者、(2) 已读取的组中的目录的访问权限对该目录的权限,或者(3)该目录没有向世界开放的其他权限。

  2. 该文件/etc/sudoers包含给定系统的所有规则,并规定哪些用户、用户组可以以提升的方式运行哪些命令,如下所示root通常为 )或某些其他用户帐户。你通常会这样做不是想直接编辑这个文件,虽然可以,但最好不要这样做。

  3. 该命令visudo是编辑文件的规定方式/etc/sudoers

  4. 如果您想查看用户有权访问哪些 sudo 凭据,最简单的方法是成为该用户并运行命令sudo -l

    $ sudo -l
    Matching Defaults entries for saml on this host:
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
    LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User saml may run the following commands on this host:
    (ALL) ALL
    (root) NOPASSWD: /usr/lib/jupiter/scripts/bluetooth, (root) /usr/lib/jupiter/scripts/cpu-control, (root) /usr/lib/jupiter/scripts/resolutions, (root)
    /usr/lib/jupiter/scripts/rotate, (root) /usr/lib/jupiter/scripts/touchpad, (root) /usr/lib/jupiter/scripts/vga-out, (root) /usr/lib/jupiter/scripts/wifi
    

车轮通道

我相信您指的是用户组wheel,这是一种授予用户成为 root 权限的旧方法(据我所知)su -。这篇文章很好地讨论了这个组的使用,标题为:管理您的 Linux 系统

授予访问权限/home/<user>

据我所知,如果不以您试图限制的其他方式授予该用户更高的权限,则没有系统的方法可以做到这一点。我想说,如果您不信任该特定用户以这种方式进行访问的责任,那么他们可能不是从事这项工作的合适人选!

团体

例如。假设我有 2 个学生和 1 个助教。学生(用户 1 和用户 2)助教(用户 3)。

所以这些组如下:

  • 1级
  • vbox用户1

因此,当我以上述任何用户 (1-3) 身份登录系统时,我的组将如下所示:

$ groups
users vboxusers class1

该组还需要设置在学生的主目录中:

$ ls -l /home/user1 | head -3
total 37784
drwxrwxr-x   2 saml class1     4096 May 16 22:02 alsa
drwxrwxr-x  31 saml class1     4096 Mar 26 12:09 apps

这只是一个想法,这种方法有问题,但鉴于您提供的信息是“一种方法”!

答案2

现在,我想为服务器中的本地用户提供有限的 root 访问权限。

这听起来是个坏主意。

首先,存在数据隐私问题 - 如果您不信任该用户拥有完全的 root 权限,为什么您信任他拥有您用户的数据?

其次,即使您以某种方式设法授予该用户有限的根访问权限/home(我认为这是不可能的),现在有几种方法可以让他获得您可能不期望的完全根访问权限:

  • 他可以创建一个符号链接/

    cd /home
    ln -s / evil-symlink
    

    现在他可以像 root 一样访问根文件系统的内容/home/evil-symlink/,因为它位于/home.

  • 他可以setuid在里面创建可执行文件/home。只需复制/bin/bash/home/bash, do chmod u+s /home/bash,您就拥有了自己的rootshell。

无论我能想到什么权限,它们将用户限制到某个目录的唯一方法是chroot,根目录可以突破chroot.

答案3

首先,你做错了什么:

user1, %operator ALL= /home/users

这允许以任何用户身份user1运行目录中的任何命令。/home/users如果该目录中没有可执行程序,则该规则实际上不执行任何操作。如果那里有可执行程序,则规则允许user1运行它们。

您不能用于sudo授予用户访问文件的权限,只能授予以其他用户身份执行命令的权限。

允许用户读取其他用户的主目录寻找一种方法来完成您想做的事情。

相关内容