假设我已在根终端登录并运行类似以下命令:
sudo -u '#1000' dbus-launch chromium
- 我应该担心任何潜在的安全问题吗?
- 有更安全的方法吗?要求它与 GUI 应用程序一起使用,运行用户才不是。如果我使用
runuser
我得到failed to open display
。
这样我就可以通过自定义驱动程序(g15daemon)从键盘执行终端命令,该驱动程序只能以 root 身份启动。
答案1
须藤
从相关的手册页:
真实有效的 uid 和 gid 设置为与 passwd 文件中指定的目标用户相匹配。
-P
另外,在sudo 的(保留组向量)选项的描述中:
然而,真实有效的组ID仍然被设置为与目标用户匹配。
基本上,使用 sudo 运行的任何命令都将使用有效的目标用户的用户ID和组ID。
为了回答这个问题,“有没有更安全的方法”,当以非特权用户身份运行 sudo 时,我更喜欢使用-H
(HOME) 选项“将 HOME 环境变量设置为目标用户的 homedir”。过去一段时间,我遇到了一些意外行为(不记得细节),我可以通过-H
向使用 sudo 的 shell 脚本添加选项来阻止这些行为。
您可能还应该确保secure_path
和env_reset
选项在您的/etc/sudoers
.运行sudo -V
显示哪些环境变量将传递给 sudo 启动的命令,哪些不会以及其他有趣/有用的信息。
苏
或者,您可以使用su $(id -un 1000) -c 'dbus-launch chromium'
用户 #1000 的有效用户 ID 和组 ID 来运行 Chromium。
如果您用来su
完成相同的任务,您应该注意(默认情况下)su
仅将HOME
和SHELL
环境变量设置为目标用户的变量。在这种情况下(目标用户没有特权,即不是超级用户),USER
和LOGNAME
也设置为目标用户的那些。其余的环境变量(例如PATH
)将被保留。
为了避免将任何环境数据泄露给正在运行的非特权进程,
su
应该使用登录 shell 的
--login
或选项来运行,例如-l
su $(id -un 1000) -lc 'dbus-launch chromium'
取消--login
设置除 、 和 之外的所有环境变量TERM
,然后重置
HOME
、和SHELL
,如上所述。此外,在运行目标用户的登录脚本之前,将其设置为预编译的默认值,并将当前工作目录设置为目标用户的主目录。USER
LOGNAME
PATH
我通常更喜欢 sudo 而不是 su,因为它的日志记录功能和“票务系统”使您无需在先前成功使用 sudo 后的 5 分钟内重新输入密码。