引言 😜

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

    在Powershell中使用開源命令

    在Windows上設置路徑,以便可以使用開源命令 當您在操作系統上啟動應用程序時,您的操作系統需要使用某些代碼庫和實用程序才能運行該應用程序。你的操作系統知道如何找到這些庫和實用程序,因為它有一個系統 […]
    Shell

    brew 4.0.0發布

    brew 用於 macOS(如果你需要的話,也包括 Linux)的附加軟體包管理器。 如果你在 Mac 上的終端窗口工作,Homebrew 是一個方便的工具,它可以讓你快速、輕鬆地安裝廣泛的 FOSS […]
    Shell

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

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