Linux系統比起其他系統更安全。實施安全措施的一種方式是使用使用者管理政策和使用者權限,普通用戶未經許可不能執行系統操作。
如果普通用戶需要進行系統範圍的更改,他需要使用‘su’或‘sudo’命令。

注意 – 本文章更適用於基於Ubuntu的發行版,但也適用於大多數流行的Linux發行版。
‘su’與‘sudo’
‘su’強制您與其他用戶共享您的root密碼,而‘sudo’則使得可以無需root密碼執行系統命令。‘sudo’讓您使用您自己的密碼來執行系統命令,即可以無需root密碼委派系統責任。
什麼是‘sudo’?
‘sudo’是一個具有root權限的setuid二進制文件,代表授權用戶執行root命令,用戶需要輸入自己的密碼來執行系統命令,然後跟著‘sudo’。
誰可以執行‘sudo’?
我們可以運行‘/usr/sbin/visudo’來添加/刪除可以執行‘sudo’的用戶列表。
$ sudo /usr/sbin/visudo
A screen shot of ‘/usr/sbin/visudo‘ file, looks something like this:
sudo清單預設如下:
root ALL=(ALL) ALL
注意:您必須是root才能編輯/usr/sbin/visudo文件。
授予sudo存取權
在許多情況下,系統管理員,特別是新手可能將“root ALL=(ALL) ALL”這樣的字串當作範本,授予其他用戶無限制的權限,這可能非常具有潛在危險。
編輯‘/usr/sbin/visudo’文件為以下模式可能非常危險,除非您完全信任所有列出的用戶。
root ALL=(ALL) ALL adam ALL=(ALL) ALL tom ALL=(ALL) ALL mark ALL=(ALL) ALL
sudo的參數
A properly configured ‘sudo‘ is very flexible and number of commands that needs to be run may be precisely configured.
配置的‘sudo‘行的語法為:
User_name Machine_name=(Effective_user) command
以上語法可以分為四個部分:
- 用戶名:這是‘sudo‘用戶的名稱。
- 機器名:這是有效的‘sudo‘命令所在的主機名。當您有很多主機時很有用。
- (有效用戶):允許執行命令的‘有效用戶’。這一列讓您允許用戶執行系統命令。
- 命令:用戶可以運行的命令或一組命令。
建議閱讀: 設置Linux中sudo的10個有用的sudoers配置
一些情況及其相應的‘sudo‘行:
問題1。您有一個用戶mark,是數據庫管理員。您應該僅在數據庫服務器(beta.database_server.com)上提供給他所有訪問權限,而不是在任何主機上。
對於上述情況,‘sudo‘行可以寫為:
mark beta.database_server.com=(ALL) ALL
問題2。您有一個用戶‘tom’,他應該在同一數據庫服務器上以root以外的用戶身份執行系統命令,如上所述。
對於上述情況,‘sudo‘行可以寫為:
mark beta.database_server.com=(tom) ALL
問題3。您有一個sudo用戶‘cat’,他應該僅運行命令‘dog’。
為了實現上述情況,我們可以將‘sudo’寫為:
mark beta.database_server.com=(cat) dog
問題4。如果用戶需要被授予多個命令怎麼辦?
如果用戶需要運行的命令數量在10以下,我們可以將所有命令放在一起,用空格分隔它們,如下所示:
mark beta.database_server.com=(cat) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3 ...
如果命令清單變化很大,手動輸入每個命令都不可能做到,我們需要使用別名。別名!對,就是 Linux 工具,可以用簡短且容易記住的關鍵字代替冗長的命令或命令清單。
A few alias Examples, which can be used in place of entry in ‘sudo‘ configuration file.
User_Alias ADMINS=tom,jerry,adam user_Alias WEBMASTER=henry,mark
WEBMASTERS WEBSERVERS=(www) APACHE Cmnd_Alias PROC=/bin/kill,/bin/killall, /usr/bin/top
可以指定系統群組,而不是用戶,只需在群組後加上「%」,如下:
%apacheadmin WEBSERVERS=(www) APACHE
問題5.試想一下如何執行不需要輸入密碼的「sudo」命令?
我們可以使用「sudo」命令的“NOPASSWD”標誌來執行不需要輸入密碼的「
adam ALL=(ALL) NOPASSWD: PROCS
這樣,使用者「adam」可以在無需輸入密碼的情況下執行所有“PROCS”別名下的命令。
建議閱讀: 讓 Sudo 在輸入錯誤密碼時侮辱你
“sudo”提供您強大而安全的環境,相比之下比‘su‘更具靈活性。此外,“sudo”配置很容易。一些 Linux 發行版預設啟用了“sudo”,而今天的大多數發行版需要您啟用它作為安全措施。
要將用戶(bob)新增到 sudo,只需以 root 身份執行以下命令。
adduser bob sudo
這就是全部內容。我會再帶來另一篇有趣的文章。在那之前,請繼續關注並保持與 Tecmint 的連繫。別忘了在評論區提供寶貴的反饋意見。
Source:
https://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/