以另一个非 root 用户身份运行 sudo 并保存在该用户的主目录中

Lui*_*uis 4 permissions sudo files

我添加了一个新组:ircuser和一个新用户:ircuser

在visudo我放置这一行:

myuser localhost=(ircuser) NOPASSWD: /usr/bin/irssi
Run Code Online (Sandbox Code Playgroud)

创建的ircuser目录,应保存配置文件、缓存等:

drwxrwx--- 2 ircuser ircuser 4096 Mar  2 10:28 ircuser
Run Code Online (Sandbox Code Playgroud)

发出命令时:

sudo -Hu ircuser /usr/bin/irssi
Run Code Online (Sandbox Code Playgroud)

或者

sudo -u ircuser /usr/bin/irssi
Run Code Online (Sandbox Code Playgroud)

程序无法将配置文件保存在ircuser目录中。

** ERROR **: Couldn't create /home/myuser/_web/ircuser/.irssi directory
aborting...
Aborted
Run Code Online (Sandbox Code Playgroud)

但是,它正在运行ircuser:

ps auxw | grep irssi
ircuser  11962  0.0  0.0  23684  2504 pts/6    S+   11:18   0:00 /usr/bin/irssi
Run Code Online (Sandbox Code Playgroud)

那么,尽管irssi运行ircuser它不能写入同一用户拥有的目录?我需要更改什么才能让它保存在那里?

pen*_*359 6

问题可能在于在通向 ircuser 主目录的父目录之一中没有 eXecute 权限。为了让任何用户遍历,不一定要查看目录,该用户必须具有通过组或其他组的执行权限。如果您有这些权限:

drwxrwx--- 2 myuser myuser 4096 Mar  2 10:28 /home/myuser
Run Code Online (Sandbox Code Playgroud)

并且 ircuser 不是 myuser 组的一部分,那么 ircuser 无法访问下面的任何文件,即使它具有该目录的权限。如果你试试这个:

drwxrwx--x 2 myuser myuser 4096 Mar  2 10:28 /home/myuser
Run Code Online (Sandbox Code Playgroud)

然后 ircuser 无法浏览 myuser 的主目录,但它可能会访问它下面的某些文件,例如 /home/myuser/_web/ircuser

更新:我从上面的描述中遗漏了更多细节。在您遍历文件系统时评估权限。可以从当前目录开始访问文件夹,而从根目录开始无法访问。如果您将工作目录更改到其他位置,您将失去对当前目录的处理并失去对其中文件的访问权限。如果你使用诸如 sudo su - ircuser 之类的东西,su 将在删除 root 权限之前切换到 ircuser 的主目录。此时,您拥有 ircuser 主目录的有效句柄,因为它是当前工作目录。如果您启动 irssi,它将作为 ircuser 在 ircuser 的主目录中运行。如果您尝试访问 .irssi,这将起作用,因为您对当前目录具有 eXecute 权限。如果您必须遍历缺少 eXecute 权限的目录,iy 将失败。比如打开文件/home/myuser/_web/ircuser/.irssi甚至从当前目录开始并使用相对路径,../../_web/ircuser/.irssi因为它需要遍历/home/myuser您没有执行权限的地方。