我正在尝试用数据保护协议经过选择具有特定所有者的包。为了做到这一点,我必须以虚拟用户身份启动浏览器。
我通过将终端命令绑定到键盘快捷键来启动浏览器。所以现在一直是这样 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>
允许新用户访问 X
xhost +
以新用户身份运行命令
我以原始用户(非 root)身份启动终端并运行以下命令:
su <dummy user> -c chromium-browser
输入虚拟用户密码后,我可以以虚拟用户身份运行 chromium 浏览器。Chromium 将完全是新的,不会保留我的任何旧设置,因为它使用新创建的虚拟用户主目录。
现在我不想在任何阶段输入密码,所以我研究了如何使用sudoers文件。
显然,通过更改 sudoers 文件,可以以另一个用户的身份运行命令,而无需输入密码。我还没有弄清楚具体怎么做,但我认为这依赖于sudo -u
。这也允许您以其他人的身份运行命令。在开始调整 sudoers 文件之前,我想测试这个结构。所以我运行了:
sudo -u <dummy user> chromium-browser
我收到以下错误:
[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.
我的用户名在哪里<user>
?因此,它会尝试访问我的家庭用户主目录。
我希望有人能帮我解决这个问题。我感觉我走在正确的方向上,但我需要有人让我看看我做错了什么。此外,任何有关如何更改 sudoers 文件的帮助都将不胜感激。
提前致谢!
答案1
根据须藤手动的:
By default, sudo does not modify HOME
这意味着当您运行 时sudo -u <dummy user> <command>
, HOME 保持不变并指向调用用户的主目录。更准确地说,整个环境保持不变,因此命令是在调用 的用户的环境中执行的sudo
。只有uid
发生了变化,并且当命令尝试写入时,$HOME
它没有正确的权限。
为了以<dummy user>
不提示输入密码的方式运行命令并拥有正确的环境,您应该创建一个简单的文件:
sudo visudo -f /etc/sudoers.d/myOverrides
使用这个指令:
<user> ALL= NOPASSWD:/bin/su
允许<user>
运行su
命令根无需输入密码(<user>
密码)并su
运行根不需要输入目标用户的密码(<dummy user>
在这种情况下)。
sudo su - <dummy user> -c /path/to/chromium-browser
另一个更好的方法是,改为/etc/sudoers.d/myOverrides
:
<user> ALL= (<dummy user>) NOPASSWD:/path/to/chromium-browser
这允许以无需输入密码的方式<user>
运行。/path/to/chromium-browser
<dummy user>
sudo -u <dummy user> -i /path/to/chromium-browser
其中 -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 的内容。所有其他环境变量都将被删除。