為什麼 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,為什麼需要權限?
注意:我已將其標記
sudo
為doas
替代/繼任者,因此推理或概念可能來自sudo
或適用於兩者。
你把這個評論斷章取意。此行在建構埠時很有用:
permit nopass keepenv root as root
建設港口總是呼籲
doas
。如果沒有上面的行,即使將埠建構為root
.root
與完整環境一樣,使用所述線路建構埠。
我不同意其他答案的一部分:建構埠本身並不總是呼叫sudo(或doas), 應該由普通(專用)使用者完成。只有一些 make 目標,例如那些安裝或解除安裝埠的目標,如
make install
,將呼叫程序SUDO
,如果它在/etc/mk.conf
或環境中指定。在手冊中提到此設置的原因是使用 dpb(1) 進行批量建構。正如送出消息
sudoers
所述,該行與 OpenBSD 的預設文件向後兼容的原因是:CVSROOT: /cvs Module name: src Changes by: reyk@cvs.openbsd.org 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 組中的使用者建構埠;
- $$ permits $$輪子以任何使用者身份執行命令,同時保留環境變數 PS1 和 SSH_AUTH_SOCK 並取消設置 ENV;
- 允許 tedu 在沒有密碼的情況下以 root 身份執行 procmap;
- 並且還允許 root 以自己的身份執行不受限制的命令。
顯然,涉及 procmap 的範例與建構埠無關,第二個範例只是習慣性的事情,即 group wheel 的成員是那些被允許將權限提升到 root 的人(例如,通過 su、sudo 或 doas)。
現在你為什麼要這個?好吧,一些腳本或 makefile 包含一個 SUDO 變數。預設情況下,沒有使用者有權使用 doas。您必須通過向
/etc/doas.conf
.