引言 😜

sudo 作為一款許可權管理工具,平常在各個平台使用。但是真正算的上正確使用的又寥寥無幾。這篇文章,便是詳細介紹一下這個命令的正確使用方式。

參考資料 📖

visudo(8)

visudo(8)sudo 提供的用於編輯配置文件的程序。使用該命令有以下優勢:

  • 檢測配置文件語法錯誤並給出錯誤提示

  • 它使用的文本編輯器默認遵從 $EDITOR 環境變數。
  • 該命令提供了一些保護機制,保證了同一時刻只有一個人可以編輯配置文件。

配置 🧰

基本配置格式如下:

    Username host=command

    # username : 用戶
    # host : 運行規則的主機
    # command : 限制的命令
    # command 支持多個命令,中間使用 ',' 分隔。 當一行分成多行時,使用 '\' 放在行尾。
    # %group : % 開頭的表示用戶組 
執行用戶
    dwsmith db1 = (_postgresql) ALL

    # 用戶 dwsmith 在 db1 主機上以用戶 _postgresql 執行命令
別名

如果只有一個用戶,一台主機,一個可以簡單概括的命令集。那麼一行配置就可以滿足需求。如果稍稍複雜一點,可以寫多行配置文件。但是當數量指數級增加時,顯然成百上千行配置會顯得臃腫許多。這個時候,別名將大大減少這種困惱。

  1. 用戶別名
User_Alias DBAs = dwsmith, kkrusch
  1. 執行用戶別名
Runas_Alias APPOWNER = _postgresql, www
  1. 主機別名
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
  1. 命令別名
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

對這篇文章感覺如何?

太棒了
5
不錯
0
愛死了
0
不太好
0
感覺很糟
0
chase for something eternal

    You may also like

    Leave a reply

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

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

    More in:Shell

    Shell

    向你的命令行腳本添加 Shebang 行

    #!/bin/sh 上面這行代碼,常常出現在 shell 腳本中,是一個 shell 腳本的標準起始行,也被稱作 Shebang 行。 Shebang 即 SHArp(#) 和 bang(!) 的組合 […]
    Shell

    Linux 下擴展交換空間

    一般來說,當應用程序使用大量物理內存(RAM)並且不夠用時操作系統會開始使用交換空間(Swap Space)。這種情況下,操作系統會把不活動的物理頁面置換到交換空間。釋放出來的空閑內存可以繼續被其他應用程序使用。等到物理內存使用量降下來後,交換的內存區域又會換回到物理內存中。系統管理員應該確保系統交換空間足夠,保證操作系統在內存不夠用時始終能夠通過置換頁面的方式獲取可用的物理內存。接下來,我們就來介紹如何創建、擴展和刪除交換空間。