su和sudo之间的区别以及如何在Linux中配置sudo

Linux系統比起其他系統更安全。實施安全措施的一種方式是使用使用者管理政策和使用者權限,普通用戶未經許可不能執行系統操作。

如果普通用戶需要進行系統範圍的更改,他需要使用‘su’或‘sudo’命令。

Linux: su v/s 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

以上語法可以分為四個部分:

  1. 用戶名:這是‘sudo‘用戶的名稱。
  2. 機器名:這是有效的‘sudo‘命令所在的主機名。當您有很多主機時很有用。
  3. (有效用戶):允許執行命令的‘有效用戶’。這一列讓您允許用戶執行系統命令。
  4. 命令:用戶可以運行的命令或一組命令。

建議閱讀: 設置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/