只允许访问某些程序

只允许访问某些程序

有时我正在执行的命令需要访问 root 拥有的目录,例如npm install -g ...可能会在其中放置符号链接/usr/local/bin

我不希望使用运行该命令,sudo因为它所触及的每个文件都将由root拥有(例如,如果您尝试sudo touch tmp然后发出问题,ll您将看到它由root拥有并在root组中),但我仍然想给它进入/usr/local/bin

目前,我暂时将目录的所有权更改为(whoami),然后将其更改回root.

有没有一种方法可以让Linux允许我进行相同的访问,root但所触及/写入的文件被授予当前用户的所有权?例如通过使用命令idk npm install -g ...。除了 之外哪里idk还有别的东西sudo

请注意,这个问题与 的具体示例/用例无关/usr/bin/local。正如任何 Linux 用户都清楚的那样,您可以永久更改目录权限,这样权限问题就不会再出现。

问题是关于在逐个命令的基础上执行此操作的能力(例如sudo在逐个命令的基础上授予 root 权限)。

Linux 权限的模型是“x 用户可以执行 p”,而 sudo 让你说“让用户 x 的行为就像用户 y 一样”。我问是否有一种方法可以说“让用户 x 表现得像 y 一样,但请注意它实际上是 x 而不是 y”这一事实。

答案1

首先sudo不仅仅是提供root访问权限,但与这里无关。

你的问题似乎与 root 无关。这似乎与有权写入目录有关。

使用 ACL 添加组权限,并添加默认值,以便新文件具有相同的组权限。

  • 为此任务创建一个组
  • 将您自己添加到该组中(在此阶段注销并重新登录是最简单的,但有一些方法可以避免这种情况(newgrp但需要了解进程如何继承所有权以避免混淆)。
  • 递归地向目录添加组权限setfacl -R -d -m g:«group»:rwx . setfacl -R -m g:«group»:rwx .(从内存中:未经测试)

只允许访问某些程序

将以上内容与sudo:即“sudo --group «group”命令结合起来,

或者

使用程序的 set-gid (不适用于解释语言)。

答案2

如果您专门使用,/usr/local则可以chown -R username /usr/local这样,不需要 root 访问权限,这仍然比使用 root/sudo 更安全。大多数 Linux 发行版中的该目录根本不用于任何用途。

答案3

之所以/usr/local/bin由 root 拥有,是因为它位于每个用户(包括root其自身)的搜索路径中。如果您将不属于 的文件放在那里root,那么其他用户可能会执行这些文件,从而带来可怕的后果。

考虑一下这一点,如果您有inwhatever拥有的可执行文件,并且您的用户帐户受到威胁,那么该文件可能会被替换。然后,该文件将位于 root 和系统上每个其他用户的搜索路径中。user:user/usr/local/bin

目前还不清楚 root 的所有权出了什么问题。它是为了保护你。

相关内容