以其他用户身份运行程序而不输入密码

Hoo*_*ijk 3 permissions sudo

我正在尝试通过选择具有特定所有者的包来使用DSCP标记我的浏览器互联网流量。为了做到这一点,我必须用一个虚拟用户启动我的浏览器。

我通过将终端命令绑定到键盘快捷键来启动浏览器。所以现在一直如此 chromium-browser

到目前为止我采取的步骤:

创建一个新用户

 sudo useradd <dummy user>
 sudo passwd <dummy user>
 sudo mkdir /home/<dummy user>
 sudo chown <dummy user> /home/<dummy user>
 sudo chgrp <dummy user> /home/<dummy user>
Run Code Online (Sandbox Code Playgroud)

允许新用户访问 X

xhost +

以新用户身份运行命令

我以原始用户(非 root 用户)身份启动终端并运行以下命令:

su <dummy user> -c chromium-browser
Run Code Online (Sandbox Code Playgroud)

输入虚拟用户密码后,我可以以虚拟用户身份运行铬浏览器。Chromium 将是全新的,不会有我的任何旧设置,因为它使用新创建的虚拟用户主目录。

现在我不想在任何阶段输入密码,所以我研究了如何使用sudoers文件。

显然,通过更改 sudoers 文件,可以在不提示输入密码的情况下以其他用户身份运行命令。我还没有弄清楚到底如何,但我认为它依赖于sudo -u. 这还允许您以其他人的身份运行命令。在我开始调整 sudoers 文件之前,我想测试这个结构。所以我跑了:

sudo -u <dummy user> chromium-browser
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[0906/012127:ERROR:nss_util.cc(90)] Failed to create /home/<user>/.pki/nssdb directory.
[0906/012127:ERROR:nss_util.cc(90)] Failed to create /home/<user>/.pki/nssdb directory.
Home directory /home/<user> not ours.
Run Code Online (Sandbox Code Playgroud)

<user>我的用户名在哪里。所以它试图访问我的家庭用户家庭目录。

我希望有人能帮我解决这个问题。我感觉我的方向是正确的,但我需要有人让我看看我做错了什么。此外,任何有关如何更改 sudoers 文件的帮助都将不胜感激。

提前致谢!

Let*_*ety 6

根据sudo手册:

    By default, sudo does not modify HOME
Run Code Online (Sandbox Code Playgroud)

这意味着当您运行时sudo -u <dummy user> <command>, HOME 没有改变并指向调用用户的主目录。更准确地说,整个环境保持不变,因此命令在调用 的用户的环境中执行sudo。只有uid改变了,当命令尝试写入时,$HOME它没有正确的权限。

为了在<dummy user>不提示输入密码的情况下运行命令并拥有正确的环境,您应该创建一个简单的文件:

    sudo visudo -f /etc/sudoers.d/myOverrides 
Run Code Online (Sandbox Code Playgroud)

使用此指令:

    <user> ALL= NOPASSWD:/bin/su
Run Code Online (Sandbox Code Playgroud)

这允许<user>root身份运行su命令而不提示输入密码(密码),并且以root身份运行不需要输入目标用户的密码(在这种情况下)。<user>su<dummy user>

   sudo su - <dummy user> -c /path/to/chromium-browser
Run Code Online (Sandbox Code Playgroud)

另一种更好的方法,更改/etc/sudoers.d/myOverrides为:

   <user> ALL= (<dummy user>) NOPASSWD:/path/to/chromium-browser
Run Code Online (Sandbox Code Playgroud)

这允许<user>运行/path/to/chromium-browser作为<dummy user>而不被提示输入密码。

   sudo -u <dummy user> -i /path/to/chromium-browser
Run Code Online (Sandbox Code Playgroud)

其中 -i 选项,根据sudo 手册

-i(模拟初始登录)选项将目标用户的 passwd(5) 条目中指定的 shell 作为登录 shell 运行。这意味着 shell 将读取特定于登录名的资源文件,例如 .profile 或 .login。如果指定了命令,则将其传递给 shell 执行。否则,将执行交互式 shell。sudo 在运行 shell 之前尝试更改到该用户的主目录。它还初始化环境,使 DISPLAY 和 TERM 保持不变,设置 HOME、SHELL、USER、LOGNAME 和 PATH,以及 Linux 和 AIX 系统上 /etc/environment 的内容。删除所有其他环境变量。