sudo 深入學習
引言 😜
sudo 作為一款許可權管理工具,平常在各個平台使用。但是真正算的上正確使用的又寥寥無幾。這篇文章,便是詳細介紹一下這個命令的正確使用方式。
參考資料 📖
- Sudo Main Page 官網
- /etc/sudoers 配置文件
sudoers(5)
visudo(8)
visudo(8)
是 sudo
提供的用於編輯配置文件的程序。使用該命令有以下優勢:
- 檢測配置文件語法錯誤並給出錯誤提示
- 它使用的文本編輯器默認遵從
$EDITOR
環境變數。 - 該命令提供了一些保護機制,保證了同一時刻只有一個人可以編輯配置文件。
配置 🧰
基本配置格式如下:
Username host=command
# username : 用戶
# host : 運行規則的主機
# command : 限制的命令
# command 支持多個命令,中間使用 ',' 分隔。 當一行分成多行時,使用 '\' 放在行尾。
# %group : % 開頭的表示用戶組
執行用戶
dwsmith db1 = (_postgresql) ALL
# 用戶 dwsmith 在 db1 主機上以用戶 _postgresql 執行命令
別名
如果只有一個用戶,一台主機,一個可以簡單概括的命令集。那麼一行配置就可以滿足需求。如果稍稍複雜一點,可以寫多行配置文件。但是當數量指數級增加時,顯然成百上千行配置會顯得臃腫許多。這個時候,別名將大大減少這種困惱。
- 用戶別名
User_Alias DBAs = dwsmith, kkrusch
- 執行用戶別名
Runas_Alias APPOWNER = _postgresql, www
- 主機別名
Host_Alias DB = db1, db2, db3
Host_Alias DMZ = 192.0.2.0/24
Host_Alias FIREWALL = 192.0.2.1, 192.0.2.2, 192.0.2.3
- 命令別名
Cmnd_Alias BACKUPS = /bin/mt, /sbin/restore, /sbin/dump
🗨️ 別名可以互相嵌套
# 別名使用
User_Alias USR_DB = dwsmith,kkrusch
Runas_Alias RAS_DB = _postgresql,www
Host_Alias H_DB = db1, db2, db3
Cmnd_Alias CMD_DB = /usr/local/bin/pg_*, /home/appowner/bin/*
USR_DB H_DB = (RAS_DB) CMD_DB
改變默認規則
默認 sudo
輸錯密碼會以提示信息調戲用戶。如果有些用戶不喜歡的話,則可以使用 Defaults
關鍵字修改。
Defaults !insults
Defaults@caddis insults
Defaults%lasnyder insults
Defaults!/sbin/newfs,/sbin/fsck insults
Defaults<APPOWNER insults
# ! 表示取消
# @ 表示操作對象是主機
# % 表示操作對象是用戶
# Defaults 後面的 ! 表示操作對象是命令
# < 表示操作對象是運行用戶
執行時環境變數
由於一些操作涉及到必要的環境變數,所以該配置文件提供了關鍵詞 env_keep
來確保一些環境變數的值。如:
Defaults env_keep += "SSH_CLIENT SSH_CONNECTION SSH_TTY SSH_AUTH_SOCK"
設置完環境變數後,需要指定該環境變數適配規則:
%wheel ALL=(ALL) SETENV: ALL
默認密碼緩存時間
當輸入密碼後,只有一段時間內再次使用命令則不需要輸入密碼。而這個時間間隔則有關鍵字 timestamp_timeout
控制。默認以分鐘為單位。
Defaults timestamp_timeout 10
指定用戶文本編輯器
當使用 sudo
命令的時候,會涉及到一些配置文件的修改操作。這個時候,如果直接配置編輯命令給用戶,則用戶退出編輯器後會發生什麼呢? 當然是擁有你這個賬號的許可權的一個 shell
。所以為了避免這種情況的發生。這裡,我們使用關鍵字 sudoedit
。
sbaxter dns1=/etc/rc.d/named,/sbin/mount_nfs, \
sudoedit /etc/named.conf, /etc/rndc.key
技術上來看,使用 sudoedit
並不會直接編輯該配置文件,而是先複製一份該配置文件,許可權給當前用戶。當用戶編輯完後,再複製替換掉原來的配置文件。默認編輯器使用環境變數 $SUDO_EDITOR, $VISUAL, or $EDITOR
指定的編輯器。
排除關鍵字 ⚠️
這裡需要提出的一點,排除關鍵字根本就是雞肋。因為排除的規則是不僅匹配執行文件,還要求路徑。如果繞過的話,目錄不同就可以。
日誌 📑
每一條執行的 sudo
命令都被 syslogd
記錄在 /var/log/secure
中。如:
Apr 30 14:16:50 treble sudo: mwlucas : TTY=ttyp8 ; PWD=/home/mwlucas ; USER=root ; COMMAND=/usr/bin/su -m