Sudo

為什麼 root 需要通過 doas 像自己一樣執行不受限制的命令?

  • May 13, 2021

我剛剛遇到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或適用於兩者。

你把這個評論斷章取意。此行在建構埠時很有用:

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您可以設置sudodoas提升權限的變數。如果在 下執行任何命令$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.

引用自:https://unix.stackexchange.com/questions/297410