![为什么 root 需要通过 doas 运行不受限制的命令?](https://linux22.com/image/90937/%E4%B8%BA%E4%BB%80%E4%B9%88%20root%20%E9%9C%80%E8%A6%81%E9%80%9A%E8%BF%87%20doas%20%E8%BF%90%E8%A1%8C%E4%B8%8D%E5%8F%97%E9%99%90%E5%88%B6%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我刚刚遇到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,为什么需要权限呢?
注意:我已将其标记sudo
为doas
替代/继承,因此推理或概念可能来自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
您可以设置sudo
或doas
提升权限的变量。如果在 下运行任何命令$SUDO
,您希望保留环境变量,例如目录前缀和构建系统正常工作所需的其他内容。
还有一件事:请注意,引用的手册摘录中只有第一个大示例是用于构建端口的。将引用的文本阅读为包含四个独立项目的项目符号列表:
下面的例子
- 允许 wsrc 组中的用户构建端口;
- [允许] Wheel 以任何用户身份执行命令,同时保留环境变量 PS1 和 SSH_AUTH_SOCK 并取消设置 ENV;
- 允许 tedu 以 root 身份运行 procmap,无需密码;
- 并且还允许 root 本身运行不受限制的命令。
显然,涉及 procmap 的示例与构建端口无关,第二个示例只是惯常做法,即组 Wheel 的成员是那些允许将权限提升到 root 的人(例如,通过 su、sudo 或 doas)。
现在你为什么想要这个?嗯,一些脚本或 makefile 包含 SUDO 变量。默认情况下,没有用户无权使用doas。您必须通过向/etc/doas.conf
.