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它不能写入同一用户拥有的目录?我需要更改什么才能让它保存在那里?
问题可能在于在通向 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您没有执行权限的地方。