Linux中國

在 Linux 中設置 sudo 的十條 sudoers 實用配置

sudo 允許已授權用戶按照指定的安全策略、以 root 用戶 (或者是其他的用戶角色) 許可權來執行某個命令。

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

以下列出十個 /etc/sudoers 文件配置,使用 Defaults 項修改 sudo 命令的行為。

$ sudo cat /etc/sudoers

/etc/sudoers 文件:

#
# 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     ### 對任意主機登錄的所有用戶起作用
Defaults@Host_List      parameter,   parameter_list     ### 對指定主機登錄的所有用戶起作用
Defaults:User_List      parameter,   parameter_list     ### 對指定用戶起作用
Defaults!Cmnd_List      parameter,   parameter_list     ### 對指定命令起作用
Defaults>Runas_List     parameter,   parameter_list     ### 對以指定目標用戶運行命令起作用

在本文討論範圍內,我們下面的將以第一個 Defaults 作為基準來參考。parameter 參數可以是標記 (flags)、整數值或者是列表 (list)。

值得注意的是,標記 (flag) 是指布爾類型值,可以使用 ! 操作符來進行取反,列表 (list) 有兩個賦值運算符:+= (添加到列表) 和 -= (從列表中移除)。

Defaults     parameter
或
Defaults     parameter=值
或
Defaults     parameter -=值
Defaults     parameter +=值
或
Defaults     !parameter

1、 安置一個安全的 PATH 環境變數

PATH 環境變數應用於每個通過 sudo 執行的命令,需要注意兩點:

  1. 當系統管理員不信任 sudo 用戶,便可以設置一個安全的 PATH 環境變數。
  2. 該設置將 root 的 PATH 和用戶的 PATH 分開,只有在 exempt_group 組的用戶不受該設置的影響。

可以添加以下內容來設置:

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

2、 允許 tty 用戶會話使用 sudo

該設置允許在一個真實的 tty 中進行調用 sudo,但不允許通過 cron 或者 cgi-bin 腳本等方法來調用。添加以下內容來設置:

Defaults  requiretty   

3、 使用 pty 運行 sudo 命令

少數情況下,攻擊者可以通過 sudo 來運行一個惡意程序 (比如病毒或者惡意代碼),這種惡意程序可能會分叉出一個後台運行的進程,即使主程序完成執行,它仍能夠運行在用戶的終端設備上。

為了防止出現這樣的情況,你可以通過 use_pty 參數來設置 sudo 使用偽終端來運行其他命令,而不必管 I/O 日誌的開啟狀態。如下:

Defaults  use_pty

4、 創建 sudo 日誌文件

默認下,sudo 通過 syslog(3) 來記錄到日誌。但是我們可以通過 logfile 參數來指定一個自定義的日誌文件。如下:

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

使用 log_hostlog_year 參數可以對應記錄日誌主機名和 4 位數年份到自定義日誌文件。如下:

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

下面是自定義 sudo 日誌文件的例示:

Create Custom Sudo Log File

創建 sudo 日誌文件

5、 記錄 sudo 命令的輸入/輸出

log_inputlog_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

記錄 sudo 命令的輸入/輸出

cat 命令 來查看該目錄的其餘部分。

6、 為 sudo 用戶提示命令用法

如下,使用 lecture 參數可以在系統中為 sudo 用戶提示命令的用法:

參數屬性值有三個選擇:

  1. always – 一直提示
  2. once – 用戶首次運行 sudo 時提示 (未指定參數屬性值時的默認值)
  3. never – 從不提示
Defaults  lecture="always"

此外,你還可以使用 lecture_file 參數類自定義提示內容,在指定的文件中輸入適當的提示內容即可:

Defaults  lecture_file="/path/to/file"

Lecture Sudo Users

為 sudo 用戶提示命令用法

7、 輸入錯誤的 sudo 密碼是顯示自定義信息

當某個用戶輸錯密碼時,會有一個對應的信息顯示在屏幕上。默認是「抱歉,請重新嘗試。(sorry, try again)」,你可以通過 badpass_message 參數來修改該信息:

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

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

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

默認為 3。

Defaults   passwd_tries=5

Increase Sudo Password Attempts

增加 sudo 密碼嘗試限制次數

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

Defaults   passwd_timeout=2

9、 在輸錯密碼時讓 sudo 羞辱用戶

使用了 insults 參數之後,一旦你輸出了密碼,sudo 便會在命令窗口中顯示羞辱你的信息。這個參數會自動關閉 badpass_message 參數。

Defaults  insults

Let's Sudo Insult You When Enter Wrong Password

在輸錯密碼時讓 sudo 羞辱用戶

10、 更多關於 sudo 的配置

此外,欲了解更多 sudo 命令的配置,請自行閱讀:su 與 sudo 的差異以及如何配置 sudo

文畢。你也可以在評論區分享其他有用的 sudo 配置或者 Linux 技巧

作者簡介:Aaron Kili 是一名 Linux 和 F.O.S.S 忠實擁護者、高級 Linux 系統管理員、Web 開發者,目前在 TecMint 是一名活躍的博主,熱衷於計算機並有著強烈的只是分享意願。

譯者簡介:GHLandy —— 欲得之,則為之奮鬥。 If you want it, work for it.

via: http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/

作者:Aaron Kili 譯者:GHLandy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國