首頁 > 軟體

Linux下的十項實用「sudo」設定選項

2020-06-16 17:22:00

 

無論是Linux還是其他類的UNIX系統,都只允許root使用者執行全部命令並執行軟體包的安裝、更新、移除以及其他一些會對系統造成重要修改的特定操作。

然而,也有部分系統管理員允許其他使用者正常使用sudo設定以執行此類重要命令並進行關鍵性系統操作。

也有一些系統管理員會共用root使用者密碼(這種作法並不推薦),這意味著普通系統使用者也能夠通過su命令存取root使用者賬戶。另外,sudo也允許使用者作為root(或者其他使用者身份)執行命令,具體由安全策略指定:

  • 讀取並解析/etc/sudoers,檢視呼叫使用者及其許可權。
  • 而後提示該呼叫使用者輸入密碼(通常為該使用者的密碼,也可為目標使用者的密碼,或者以NOPASSWD標籤跳過此步驟)。
  • 在此之後,sudo會建立一個名為setuid()的子進程,用以切換至該目標使用者。
  • 而後,它執行一條shell或者命令,並配合子進程中給定的引數。

以下為10個/etc/sudoers檔案設定,能夠對sudo命令的Defaults效果做出修改。

  1. $ sudo cat /etc/sudoers 

/etc/sudoers檔案

  1. # # 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.  
  2. # Defaults  
  3. env_reset Defaults  
  4. mail_badpass Defaults 
  5. secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults  
  6. logfile="/var/log/sudo.log" Defaults lecture="always" Defaults  
  7. badpass_message="Password is wrong, please try again" Defaults  
  8. passwd_tries=5 Defaults insults Defaults log_input,log_output 

Defaults條目型別

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

在本指南之內,我們將首先討論第一種Defaults型別。它的引數可以是標記、整數值、字串或者列表。

需要注意的是,各標記為明確boolean且可利用'!'運算子進行關閉。另外,兩項賦值運算子分別為+=(新增至列表)與-=(移除自列表)。

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

1. 設定安全PATH

此為每一條命令配合sudo執行時所使用的路徑,其中包含兩項重點:

  • 當系統管理員不信任sudo使用者掌握安全PATH環境變數時使用。
  • 用於劃分root path與user path,使用者通過exempt_group定義時不受此設定影響。

欲完成設定,請你新增以下行:

  1. Defaults 
  2. secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" 

2. 在TTY使用者登入對談上啟用sudo

用於通過真實tty呼叫sudo,而非使用cron或者cgi-bin指令碼等方法:

  1. Defaults requiretty 

3.利用pty執行sudo命令

有時候,攻擊者會利用sudo執行惡意程式(例如病毒或者惡意軟體),它會在主程式停止執行後繼續在使用者終端裝置上fork一個後台進程。

為了避免此類問題,大家可以利用use_pty引數設定sudo以要求它僅可通過psuedo-pty執行其他命令,而無論I/O記錄是否開啟:

  1. Defaults use_pty 

4.建立一個sudo紀錄檔檔案

在預設情況下,sudo會通過syslog(3)進行紀錄檔記錄。不過要指定特定紀錄檔檔案,大家可以使用logfile引數:

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

要在此客製化紀錄檔檔案中記錄主機名稱與四位數位年份,則可分別使用log_host與log_year引數:

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

以下為客製化sudo紀錄檔檔案範例:

5.記錄sudo命令的輸入/輸出結果

我們可使用log_input與log_output引數使sudo得以在pseudo-tty中執行命令,同時分別記錄全部使用者的輸入與輸出結果。

預設I/O紀錄檔目錄為/var/log/sudo-io,如果其中存在一條對談序列號,則將被儲存在該目錄中。大家可以通過iolog_dir引數指定您需要的目錄。

  1. Defaults log_input, log_output 

%{seq}等跳脫序列也受到支援,它會將序列號單調遞增為base-36序列號,例如000001,其中每兩位數位用於生成一個新的目錄,如00/00/01。具體範例如下:

  1. $ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log 

6.引導sudo使用者

為了引導sudo使用者在系統上使用密碼,我們可以使用lecture引數。它可設定為三種值:

  • always – 始終引導使用者。
  • once – 僅在使用者初次執行sudo命令時進行引導(不指定值時預設為此設定)。
  • never – 永遠不引導使用者。
  1. Defaults lecture="always" 

另外,大家也可以利用lecture_file引數設定一個客製化lecture檔案,在此檔案中輸入適當資訊:

  1. Defaults lecture_file="/path/to/file" 

Lecture Sudo Users

7.在輸入錯誤sudo密碼時顯示客製化資訊

當使用者輸入錯誤密碼時,可在命令列中顯示特定資訊。它的預設資訊為“sorry,try again”,大家可以使用badpass_message引數對內容進行修改:

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

8.增加sudo密碼嘗試次數

引數passwd_tries用於指定使用者能夠嘗試輸入密碼的次數。

它的預設值為3:

  1. Defaults passwd_tries=5 

要設定密碼超時(預設為5分鐘),可使用passwd_timeout引數,具體如下:

  1. Defaults passwd_timeout=2 

9.當輸入錯誤密碼時,讓sudo顯示侮辱性內容

當使用者輸入錯誤密碼時,sudo將通過insults引數顯示侮辱性內容。它會自動關閉badpass_message引數。

  1. Defaults insults 

10.了解更多sudo設定

另外,感興趣的朋友也可以參閱以下連結來了解更多sudo命令設定選項:su與sudo間的區別以及如何在Linux中設定sudo(英文原文)。

原文標題:10 Useful Sudoers Configurations for Setting ‘sudo’ in Linux,作者:Aaron Kili

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140329.htm


IT145.com E-mail:sddin#qq.com