如何在 Linux 上控制 sudo 訪問
已發表: 2022-01-29
sudo命令可讓您在 Linux 上運行命令,就像您是其他人一樣,例如root 。 sudo還允許您控制誰可以訪問root's功能,具有粒度。 授予用戶完全訪問權限或讓他們使用一小部分命令。 我們向您展示如何。
sudo 和 Root 權限
我們都聽說過(過於簡單化)Linux 中的一切都是文件。 事實上,操作系統中的幾乎所有東西,包括進程、文件、目錄、套接字和管道,都通過文件描述符與內核通信。 因此,儘管一切都不是文件,但大多數操作系統對象的處理方式就像它們是一樣。 在可能的情況下,Linux 和類 Unix 操作系統的設計都遵循這一原則。
“一切都是文件”的概念在 Linux 中影響深遠。 很容易看出,Linux 中的文件權限如何成為用戶特權和權限的支柱之一。 如果你擁有一個文件或目錄(一種特殊的文件),你可以對它做你喜歡的事情,包括編輯、重命名、移動和刪除它。 您還可以設置文件的權限,以便其他用戶或用戶組可以讀取、修改或執行該文件。 每個人都受這些權限的約束。
除了超級用戶之外,每個人都被稱為root 。 root帳戶是一個特殊的特權帳戶。 它不受操作系統中任何對象的權限的約束。 root 用戶可以對任何事情做任何事情,而且幾乎可以在任何時間做任何事情。
當然,任何有權訪問root's人都可以這樣做。 他們可能惡意或無意地造成嚴重破壞。 事實上, root用戶也可能因犯錯而造成嚴重破壞。 沒有人是萬無一失的。 這是危險的東西。
這就是為什麼現在認為根本不以root身份登錄是最佳做法的原因。 使用普通用戶帳戶登錄並使用sudo在您需要的短時間內提升您的權限。 通常這只是發出一個命令。
相關: Linux 中的“一切都是文件”是什麼意思?
sudoers 列表
sudo已經安裝在用於研究本文的 Ubuntu 18.04.3、Manjaro 18.1.0 和 Fedora 31 計算機上。 這並不奇怪。 sudo自 1980 年代初就已經存在,並且已成為幾乎所有發行版的超級用戶操作的標準方式。
當您安裝現代發行版時,您在安裝期間創建的用戶將添加到名為sudoers的用戶列表中。 這些是可以使用sudo命令的用戶。 因為您擁有sudo權限,所以您可以使用它們將其他用戶添加到 sudoer 列表中。
當然,不顧一切地分發完整的超級用戶身份,或者分發給只有部分或特定需求的任何人,都是魯莽的。 sudoers 列表允許您指定允許各種用戶使用sudo的命令。 這樣,你不會給他們王國的鑰匙,但他們仍然可以完成他們需要做的事情。
以其他用戶身份運行命令
最初,它被稱為“超級用戶做”,因為您可以以超級用戶的身份做事。 它的範圍現在已經擴大,您可以使用sudo來執行命令,就像您是任何用戶一樣。 它已被重命名以反映該新功能。 它現在被稱為“替代用戶做”。
要使用sudo以其他用戶身份運行命令,我們需要使用-u (用戶)選項。 在這裡,我們將以用戶mary運行 whoami 命令。 如果您使用不帶-u選項的sudo命令,您將以root身份運行該命令。
當然,因為您使用的是sudo ,系統會提示您輸入密碼。
sudo -u mary whoami

whoami的響應告訴我們運行該命令的用戶帳戶是mary 。
您可以使用sudo命令以其他用戶身份登錄,而無需知道他們的密碼。 系統將提示您輸入自己的密碼。 我們需要使用-i (登錄)選項。
sudo -i -u 瑪麗
密碼
我是誰
ls -hl
出口

您以mary身份登錄。 mary 用戶帳戶的“.bashrc”、“.bash_aliases”和“.profile”文件的處理與 mary 用戶帳戶的所有者自己登錄一樣。
- 命令提示符更改以反映這是用戶帳戶
mary的會話。 -
pwd命令報告您現在位於mary's主目錄中。 -
whoami告訴我們您正在使用用戶帳戶mary。 - 目錄中的文件屬於
mary用戶帳戶。 -
exit命令將您返回到正常的用戶帳戶會話。
編輯 sudoers 文件
要將用戶添加到可以使用sudo的人員列表中,您需要編輯sudoers文件。 僅使用visudo命令執行此操作非常重要。 visudo命令可防止多人同時嘗試編輯 sudoers 文件。 它還會在您保存文件內容時執行語法檢查和解析。
如果您的編輯未通過測試,則不會盲目保存文件。 你得到選擇。 您可以取消並放棄更改,返回並再次編輯更改,或強制保存不正確的編輯。 最後一個選項是一個非常糟糕的主意。 不要試圖這樣做。 您可能會發現自己處於每個人都被意外鎖定而無法使用sudo的情況。
儘管您使用visudo命令開始編輯過程,但visudo不是編輯器。 它調用您現有的編輯器之一來執行文件編輯。 在 Manjaro 和 Ubuntu 上, visudo命令啟動了簡單的編輯器nano 。 在 Fedora 上, visudo推出了功能更強大但不太直觀的vim 。
相關:如何退出 Vi 或 Vim 編輯器
如果你更喜歡在 Fedora 上使用nano ,你可以很容易地做到這一點。 首先,安裝nano :
須藤 dnf 安裝納米

然後必須使用以下命令調用visudo :
sudo EDITOR=nano visudo

這看起來是一個很好的別名候選者。 nano編輯器打開,其中加載了 sudoers 文件。

將用戶添加到 sudo 組
使用visudo打開 sudoers 文件。 使用此命令或上述命令來指定您選擇的編輯器:
須藤 visudo

滾動瀏覽 sudoers 文件,直到看到%sudo條目的定義。

百分號表示這是組定義而不是用戶定義。 在某些發行版中, %sudo行的開頭有一個井# 。 這使該行成為註釋。 如果是這種情況,請刪除哈希並保存文件。
%sudo行分解如下:
- %sudo :組的名稱。
- ALL= :此規則適用於該網絡上的所有主機。
- (ALL:ALL) :該組的成員可以以所有用戶和所有組的身份運行命令。
- All :該組的成員可以運行所有命令。
稍微改一下,該組的成員可以在此計算機或此網絡中的任何其他主機上以任何用戶或任何組的身份運行任何命令。 因此,授予某人 root 權限和使用sudo的能力的一種簡單方法是將他們添加到sudo組。
我們有兩個用戶,Tom 和 Mary,分別擁有用戶帳戶tom和mary 。 我們將使用usermod命令將用戶帳戶tom添加到sudo組。 -G (groups) 選項指定我們要將tom帳戶添加到的組。 -a (追加)選項將此組添加到用戶帳戶tom已在的組列表中。如果沒有此選項,用戶帳戶tom將被放置在新組中,但從任何其他組中刪除。

sudo usermod -a -G sudo tom

讓我們檢查一下 Mary 在哪些組中:
團體

用戶帳戶mary僅在mary組中。
讓我們檢查一下湯姆:
團體

tom用戶帳戶(因此也稱為 Tom)在組tom和sudo中。
讓我們試著讓 Mary 做一些需要sudo權限的事情。
sudo 少 /etc/shadow

Mary 無法查看受限文件“/etc/shadow”的內部。 她因未經許可嘗試使用sudo而受到輕責。 讓我們看看湯姆的票價:
sudo 少 /etc/shadow

一旦湯姆輸入他的密碼,他就會看到 /etc/shadow 文件。

只需將他添加到sudo組,他就被提升為可以使用sudo的精英行列。 完全不受限制。
授予用戶受限的 sudo 權限
Tom 已獲得完全的sudo權限。 他可以做任何root或sudo組中的任何其他人可以做的事情。 這可能會給他更多的權力,而不是你樂意交出的。 有時需要用戶執行需要root權限的功能,但沒有正當理由讓他們擁有完全的sudo訪問權限。 您可以通過將它們添加到 sudoers 文件並列出它們可以使用的命令來實現這種平衡。
讓我們認識一下用戶帳戶harry的所有者 Harry。 他不在sudo組中,也沒有sudo權限。
團體

Harry 能夠安裝軟件很有用,但我們不希望他擁有完整的sudo權限。 好的,沒問題。 讓我們啟動visudo :
須藤 visudo

向下滾動文件,直到超過組定義。 我們將為哈利添加一條線。 因為這是用戶定義而不是組定義,所以我們不需要以百分號開頭。

用戶帳戶 harry 的條目是:
哈利 ALL=/usr/bin/apt-get
請注意,“harry”和“ALL=”之間有一個製表符。
這讀作用戶帳戶harry可以在連接到該網絡的所有主機上使用列出的命令。 列出了一個命令,即“/usr/bin/apt-get”。 我們可以通過將它們添加到命令列表中來授予 Harry 訪問多個命令的權限,並以逗號分隔。
將該行添加到 sudoers 文件中,然後保存該文件。 如果您想仔細檢查該行的語法是否正確,我們可以使用-c (僅檢查)選項讓visudo掃描文件並為我們檢查語法:
sudo visudo -c

進行檢查, visudo報告一切正常。 Harry 現在應該能夠使用apt-get來安裝軟件,但如果他嘗試使用任何其他需要sudo的命令,則應該被拒絕。
sudo apt-get 安裝手指

已授予 Harry 適當的sudo權限,他可以安裝該軟件。
如果 Harry 嘗試使用需要sudo的不同命令會發生什麼?
sudo 現在關閉

哈利被阻止運行命令。 我們已成功授予他特定的、受限的訪問權限。 他可以使用指定的命令,而不能使用其他命令。
使用 sudoers 用戶別名
如果我們想給 Mary 相同的權限,我們可以在 sudoers 文件中為用戶帳戶mary添加一行,就像我們對 Harry 所做的那樣。 另一種更簡潔的實現相同目的的方法是使用User_Alias 。
在 sudoers 文件中, User_Alias包含用戶帳戶名稱的列表。 然後可以在定義中使用User_Alias的名稱來表示所有這些用戶帳戶。 如果您想更改這些用戶帳戶的權限,您只需編輯一行。
讓我們創建一個User_Alias並在我們的 sudoers 文件中使用它。
須藤 visudo

在文件中向下滾動,直到到達 User_Alias 規範行。
通過鍵入以下內容添加User_Alias :
User_Alias INSTALLERS = 哈利,瑪麗
每個元素由空格分隔,而不是製表符。 邏輯分解為:
- User_Alias :這告訴
visudo這將是一個User_Alias。 - INSTALLERS :這是此別名的任意名稱。
- = harry, mary :要包含在此別名中的用戶列表。
現在我們將編輯我們之前為用戶帳戶harry添加的行:
哈利 ALL=/usr/bin/apt-get
將其更改為:
安裝程序全部=/usr/bin/apt-get
這表示“INSTALLERS” User_Alias定義中包含的所有用戶帳戶都可以運行apt-get命令。 我們可以用 Mary 來測試一下,她現在應該可以安裝軟件了。
sudo apt-get install colordiff
![]()
Mary 能夠安裝該軟件,因為她在“INSTALLERS” User_Alias中,並且User_Alias已被授予這些權利。
三個快速 sudo 技巧
當您忘記將sudo添加到命令時,請鍵入
須藤!!
最後一個命令將在行首添加sudo重複。
使用sudo並使用密碼進行身份驗證後,在 15 分鐘內您不必再將密碼與其他sudo命令一起使用。 如果您想立即忘記您的身份驗證,請使用:
須藤 -k
有沒有想過在哪裡可以看到失敗的sudo命令嘗試? 他們轉到“/var/log/auth.log”文件。 您可以通過以下方式查看它:
少 /var/log/auth.log

我們可以看到用戶帳戶 mary 的條目,當她嘗試以用戶“root”運行shutdown命令時,她在 TTY pts/1 登錄。
憑藉強大的力量……
…具有將其部分委託給其他人的能力。 現在您知道如何有選擇地授權其他用戶。

