有时我正在执行的命令需要访问 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 的所有权出了什么问题。它是为了保护你。