在不输入密码的情况下以其他用户身份运行程序

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

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

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

创建一个新用户 :

  sudo useradd  sudo passwd  sudo mkdir /home/ sudo chown  /home/ sudo chgrp  /home/ 

允许新用户访问X.

xhost +

以新用户身份运行该命令

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

 su  -c chromium-browser 

在输入虚拟用户密码后,我可以将chrome-browser作为虚拟用户运行。 Chromium将是全新的,并且不会有任何旧设置,因为它使用新创建的虚拟用户主目录。

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

通过更改sudoers文件,可以在不通过提示输入密码的情况下以另一个用户身份运行命令。 我还没弄清楚究竟是怎么回事,但我认为它依赖于sudo -u 。 这也允许您像其他人一样运行命令。 在我开始调整sudoers文件之前,我想测试这个结构。 所以我跑了:

 sudo -u  chromium-browser 

我收到以下错误:

 [0906/012127:ERROR:nss_util.cc(90)] Failed to create /home//.pki/nssdb directory. [0906/012127:ERROR:nss_util.cc(90)] Failed to create /home//.pki/nssdb directory. Home directory /home/ not ours. 

其中是我的用户名。 所以它试图访问我的家庭用户家庭目录。

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

提前致谢!

根据sudo手册:

  By default, sudo does not modify HOME 

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

为了将命令作为运行而不提示输入密码并拥有合适的环境,您应该创建一个简单的文件:

  sudo visudo -f /etc/sudoers.d/myOverrides 

使用此指令:

   ALL= NOPASSWD:/bin/su 

允许root身份运行su命令而不提示输入密码( password)并以root身份运行su不需要输入目标用户的密码(在本例中为 )。

  sudo su -  -c /path/to/chromium-browser 

另一个更好的方法,更改/etc/sudoers.d/myOverrides

   ALL= () NOPASSWD:/path/to/chromium-browser 

这允许 身份运行/path/to/chromium-browser而不提示输入密码。

  sudo -u  -i /path/to/chromium-browser 

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

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