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

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

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

我在其中visudo放置了这一行:

myuser localhost=(ircuser) NOPASSWD: /usr/bin/irssi

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

drwxrwx--- 2 ircuser ircuser 4096 Mar  2 10:28 ircuser

发出命令时:

sudo -Hu ircuser /usr/bin/irssi

或者

sudo -u ircuser /usr/bin/irssi

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

** ERROR **: Couldn't create /home/myuser/_web/ircuser/.irssi directory
aborting...
Aborted

但是,它的运行方式为ircuser

ps auxw | grep irssi
ircuser  11962  0.0  0.0  23684  2504 pts/6    S+   11:18   0:00 /usr/bin/irssi

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

答案1

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

drwxrwx--- 2 myuser myuser 4096 Mar  2 10:28 /home/myuser

并且 ircuser 不属于 myuser 组,那么 ircuser 即使具有该目录的权限也无法访问其下的任何文件。如果你尝试这样做:

drwxrwx--x 2 myuser myuser 4096 Mar  2 10:28 /home/myuser

然后 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您没有 eXecute 权限的地方。

答案2

使用-H使执行命令时sudo将“home”视为用户主目录的选项。您可以在 sudo 的手册页上找到更详细的解释:http://linux.die.net/man/8/sudo

答案3

您介意尝试使用 sudo -iu ircuser /usr/bin/irssi 吗?

此外,正如 Patkos Csaba 已经指出的那样,检查 sudoers 中设置的 env_reset、env_keep 默认值。

来自 sudoers 联机帮助页:

As a special case, if sudo's -i option (initial login) is specified,
sudoers will initialize the environment regardless of the value of
env_reset.  The DISPLAY, PATH and TERM variables remain unchanged;
HOME, MAIL, SHELL, USER, and LOGNAME are set based on the target user.
On Linux and AIX systems the contents of /etc/environment are also
included.  All other environment variables are removed.

因此 sudo -i 将初始化环境以绕过这些值。

编辑:我已经在 Ubuntu 盒子上重现了你的设置,甚至 sudo -u ircuser /usr/bin/irssi 对我来说也很好用。

来自我的 /etc/sudoers

<snipped>
Defaults    env_reset, log_output
<snipped>
testing LABUBU01=(ircuser) NOPASSWD: /usr/bin/irssi

版本:

testing@LABUBU01:~$ sudo -V
Sudo version 1.8.3p1
pmplugin policy_plugin 5.6.0 (034)
pmplugin io_plugin 5.6.0 (034)
testing@LABUBU01:~$ uname -a
Linux LABUBU01 2.6.35-28-generic #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011 i686 GNU/Linux


testing@LABUBU01:~$ ls -lap /home/
total 64
drwxr-xr-x 16 root     root     4096 2012-03-02 15:57 ./
drwxr-xr-x 22 root     root     4096 2011-12-08 15:48 ../
drwxr-xr-x  3 ircuser  ircuser  4096 2012-03-02 15:57 ircuser/

/编辑

编辑2:

你的错误:

** 错误 **:无法创建 /home/myuser/_web/ircuser/.irssi 目录正在中止...已中止

状态,它无法创建位于您的主目录中的 /home/myuser/_web/ircuser/.irssi ,而不是位于 ircuser 的主目录中。 /编辑2

相关内容