设置 ‘sudo’ 的 10 个有用的 Sudoers 配置

在Linux和其他類Unix操作系統中,只有root用戶可以運行所有命令並執行系統上的某些關鍵操作,例如安裝和更新、刪除軟件包、創建用戶和組、修改重要系統配置文件等。

然而,擔任root用戶角色的系統管理員可以通過sudo命令和一些配置,允許其他普通系統用戶運行一些命令以及執行一些重要的系統操作,包括上述提到的操作。

另外,系統管理員可以共享root用戶密碼(這不是一種推薦的方法),以便普通系統用戶通過su命令訪問root用戶帳戶。

sudo允許被授權的用戶按照安全策略的指定執行命令作為root(或其他用戶):

  1. 它讀取並解析/etc/sudoers,查找調用用戶及其權限,
  2. 然後提示調用用戶輸入密碼(通常是用戶的密碼,但也可以是目標用戶的密碼。或者可以使用NOPASSWD標籤跳過),
  3. 之後,sudo創建一個子進程,在其中調用setuid()切換到目標用戶
  4. 接下來,在上述子進程中執行一個shell或給定的命令作為參數。

以下是十個/etc/sudoers文件配置,用於修改sudo命令的行為,使用Defaults條目。

$ sudo cat /etc/sudoers
/etc/sudoers File
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults	logfile="/var/log/sudo.log"
Defaults	lecture="always"
Defaults	badpass_message="Password is wrong, please try again"
Defaults	passwd_tries=5
Defaults	insults
Defaults	log_input,log_output

Defaults條目類型

Defaults                parameter,   parameter_list     #affect all users on any host
Defaults@Host_List      parameter,   parameter_list     #affects all users on a specific host
Defaults:User_List      parameter,   parameter_list     #affects a specific user
Defaults!Cmnd_List      parameter,   parameter_list     #affects  a specific command 
Defaults>Runas_List     parameter,   parameter_list     #affects commands being run as a specific user

對於本指南的範圍,我們將專注於以下形式的第一類Defaults。參數可以是標誌、整數值、字符串或列表。

您應該注意,標誌隱含為布爾值,可以使用'!'運算符關閉,而列表有兩個額外的賦值運算符,+=(添加到列表)和-=(從列表中刪除)。

Defaults     parameter
OR
Defaults     parameter=value
OR
Defaults     parameter -=value   
Defaults     parameter +=value  
OR
Defaults     !parameter       

1. 設置安全PATH

這是用於運行帶有sudo的每個命令的路徑,它有兩個重要性:

  1. 當系統管理員不信任sudo用戶具有安全的PATH環境變量時使用
  2. 將“根路徑”和“用戶路徑”分開,只有由exempt_group定義的用戶不受此設置影響。

要設置它,添加以下行:

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2. 在TTY用戶登錄會話上啟用sudo

要啟用sudo從真實tty中調用,但不通過諸如croncgi-bin腳本等方法,添加以下行:

Defaults  requiretty   

3. 使用pty運行Sudo命令

A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.

為了避免這種情況,您可以配置sudo僅從虛擬pty運行其他命令,使用use_pty參數,無論I/O日誌記錄是否打開,如下所示:

Defaults  use_pty

4. 創建一個Sudo日誌文件

預設情況下,sudo 通過 syslog(3) 進行記錄。但是,要指定自定義日誌文件,請使用如下的 logfile 參數:

Defaults  logfile="/var/log/sudo.log"

要在自定義日誌文件中記錄主機名稱和四位數年份,分別使用 log_host 和 log_year 參數,如下所示:

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

以下是一個自定義 sudo 日誌文件的示例:

Create Custom Sudo Log File

5. 記錄 Sudo 命令輸入/輸出

log_input 和 log_output 參數使 sudo 能夠在虛擬終端中運行命令,並分別記錄所有用戶輸入和所有輸出發送到屏幕。

默認的 I/O 日誌目錄是 /var/log/sudo-io,如果有會話序列號,則會存儲在此目錄中。您可以通過 iolog_dir 參數指定自定義目錄。

Defaults   log_input, log_output

支持一些轉義序列,例如 %{seq},它會擴展為一個單調增加的基數 36 序列號,例如 000001,其中每兩位數用於形成一個新目錄,例如下面的示例中的 00/00/01:

$ cd /var/log/sudo-io/
$ ls
$ cd  00/00/01
$ ls
$ cat log
Log sudo Input Output

您可以使用 cat 命令查看該目錄中的其餘文件。

6. 講解 Sudo 用戶

要向系統中的 sudo 用戶講解密碼使用情況,請使用如下的 lecture 參數。

它有 3 個可能的值:

  1. always – 總是向用戶講解。
  2. 一次-僅在用戶第一次執行sudo命令時講解(當未指定值時使用)
  3. 永不-永不對用戶進行講解。
 
Defaults  lecture="always"

此外,您可以使用lecture_file參數設置自定義講解文件,請在文件中輸入適當的消息:

Defaults  lecture_file="/path/to/file"
Lecture Sudo Users

7. 在輸入錯誤的sudo密碼時顯示自定義消息

當用戶輸入錯誤的密碼時,命令行上會顯示特定消息。默認消息為“對不起,請重試”,您可以使用badpass_message參數修改消息如下:

Defaults  badpass_message="Password is wrong, please try again"

8. 增加sudo密碼嘗試次數限制

參數passwd_tries用於指定用戶可以嘗試輸入密碼的次數。

默認值為3:

Defaults   passwd_tries=5 
Increase Sudo Password Attempts

使用passwd_timeout參數設置密碼超時(默認為5分鐘),添加以下行:

Defaults   passwd_timeout=2

9. 讓Sudo在輸入錯誤密碼時對您進行侮辱

如果用戶輸入錯誤密碼,sudo將在終端上顯示侮辱語句,這將自動關閉badpass_message參數。

Defaults  insults 
Let’s Sudo Insult You When Enter Wrong Password

閱讀更多讓Sudo在輸入不正確密碼時對您進行侮辱

10. 了解更多Sudo配置

此外,您可以通過閱讀:su 和 sudo 之間的區別以及如何在 Linux 中配置 sudo 來了解更多 sudo 命令配置。

就是這樣!您可以通過下面的評論部分與其他用戶分享其他有用的 sudo 命令配置或 Linux 的技巧和提示

Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/