从 root 运行以以权限较低的用户身份运行应用程序时,sudo 的安全性如何?

从 root 运行以以权限较低的用户身份运行应用程序时,sudo 的安全性如何?

假设我已在根终端登录并运行类似以下命令:

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_pathenv_reset选项在您的/etc/sudoers.运行sudo -V显示哪些环境变量将传递给 sudo 启动的命令,哪些不会以及其他有趣/有用的信息。

或者,您可以使用su $(id -un 1000) -c 'dbus-launch chromium'用户 #1000 的有效用户 ID 和组 ID 来运行 Chromium。

如果您用来su完成相同的任务,您应该注意(默认情况下)su仅将HOMESHELL环境变量设置为目标用户的变量。在这种情况下(目标用户没有特权,即不是超级用户),USERLOGNAME也设置为目标用户的那些。其余的环境变量(例如PATH)将被保留。

为了避免将任何环境数据泄露给正在运行的非特权进程, su应该使用登录 shell 的 --login或选项来运行,例如-lsu $(id -un 1000) -lc 'dbus-launch chromium'

取消--login设置除 、 和 之外的所有环境变量TERM,然后重置 HOME、和SHELL,如上所述。此外,在运行目标用户的登录脚本之前,将其设置为预编译的默认值,并将当前工作目录设置为目标用户的主目录。USERLOGNAMEPATH

我通常更喜欢 sudo 而不是 su,因为它的日志记录功能和“票务系统”使您无需在先前成功使用 sudo 后的 5 分钟内重新输入密码。

相关内容