为什么 root 需要通过 doas 运行不受限制的命令?

为什么 root 需要通过 doas 运行不受限制的命令?

我刚刚遇到doas,在阅读时其配置的手册页我找到了这个例子:

以下示例允许 wsrc 组中的用户构建端口;以任何用户身份执行命令,同时保留环境变量 PS1 和 SSH_AUTH_SOCK 并取消设置 ENV;允许 tedu 以 root 身份运行 procmap,无需密码;并且还允许 root 本身运行不受限制的命令

# Non-exhaustive list of variables needed to 
# build release(8) and ports(7) 
permit nopass setenv { \ 
        FTPMODE PKG_CACHE PKG_PATH SM_PATH SSH_AUTH_SOCK \ 
        DESTDIR DISTDIR FETCH_CMD FLAVOR GROUP MAKE MAKECONF \ 
        MULTI_PACKAGES NOMAN OKAY_FILES OWNER PKG_DBDIR \ 
        PKG_DESTDIR PKG_TMPDIR PORTSDIR RELEASEDIR SHARED_ONLY \ 
        SUBPACKAGE WRKOBJDIR SUDO_PORT_V1 } :wsrc 
permit setenv { -ENV PS1=$DOAS_PS1 SSH_AUTH_SOCK } :wheel 
permit nopass tedu as root cmd /usr/sbin/procmap 
permit nopass keepenv root as root 

root就是root,为什么需要权限呢?

注意:我已将其标记sudodoas替代/继承,因此推理或概念可能来自sudo或适用于两者。

答案1

你断章取义地理解了这个评论。此行在以下情况下很有用建设港口:

permit nopass keepenv root as root

建筑港口总是来电doas。如果没有上面的行,即使将端口构建为root.通过上述线路构建端口,就像root在完整环境中完成的那样。

答案2

我不同意另一个答案的部分内容:自行建设港口强调不总是调用须藤(或 DOAS)和 应该由普通(专用)用户完成。只有某些 make 目标(例如,那些安装或卸载端口的目标,例如make install)才会调用该程序(如果在或环境SUDO中指定了该程序)。/etc/mk.conf在手册中提到此设置的原因是为了使用 dpb(1) 进行批量构建。


该行的原因是与 OpenBSD 的默认文件向后兼容sudoers,因为提交消息提到:

CVSROOT:        /cvs
Module name:    src
Changes by:     [email protected]     2015/08/28 07:19:50

Modified files:
        usr.bin/doas   : doas.conf.5 

Log message:
Document an example that lets root run unrestricted doas commands as
root ("permit nopass keepenv root as root"), matching the old
behaviour from OpenBSD's sudoers file ("root ALL=(ALL) SETENV: ALL").

OK sthen@

为什么这有用?想象一个脚本执行一些需要 root 权限的操作;像这样的东西:

#!/bin/sh
cmd1
doas cmd2
cmd3

您只能以有权使用 doas 的用户身份成功运行此脚本。默认情况下,用户(甚至 root 除外)有权使用 doas;您必须通过向/etc/doas.conf.如果没有该行permit root as root,如果您以 root 身份运行上面的脚本,它将会失败,这可能令人惊讶且不方便。

现在是我同意另一个答案的部分:如上所述,OpenBSD 中的默认构建脚本具有SUDO您可以设置sudodoas提升权限的变量。如果在 下运行任何命令$SUDO,您希望保留环境变量,例如目录前缀和构建系统正常工作所需的其他内容。


还有一件事:请注意,引用的手册摘录中只有第一个大示例是用于构建端口的。将引用的文本阅读为包含四个独立项目的项目符号列表:

下面的例子

  • 允许 wsrc 组中的用户构建端口;
  • [允许] Wheel 以任何用户身份执行命令,同时保留环境变量 PS1 和 SSH_AUTH_SOCK 并取消设置 ENV;
  • 允许 tedu 以 root 身份运行 procmap,无需密码;
  • 并且还允许 root 本身运行不受限制的命令。

显然,涉及 procmap 的示例与构建端口无关,第二个示例只是惯常做法,即组 Wheel 的成员是那些允许将权限提升到 root 的人(例如,通过 su、sudo 或 doas)。

现在你为什么想要这个?嗯,一些脚本或 makefile 包含 SUDO 变量。默认情况下,没有用户无权使用doas。您必须通过向/etc/doas.conf.

相关内容