每週一天 Sudoers 嗎?

每週一天 Sudoers 嗎?

我的老闆自願擔任我們生產 Redhat 伺服器的系統管理員。他要求我加強安全保衛,避免rm -f *發生不久前發生的類似事故。

現在,我們有 53 個用戶透過 sudo 進入機器,這是一場審計噩夢。我想知道是否可以僅允許用戶在一周中的特定日期訪問。

例如,我可以允許用戶“Joe”僅在周二和周四登錄,而“Jane”僅在周日登錄嗎?可以etc/sudoers定制以允許這樣做嗎?

除了使用 sudoers 之外,還有更好的方法嗎?

答案1

sudo與 Linux 機器上的幾乎所有其他內容一樣,它透過 PAM 進行身份驗證。

所以你應該能夠使用來pam_time.so做到這一點。

至少在 Debian 上預設情況下,該模組未啟用。您需要新增一行,如下所示:

account    requisite  pam_time.so

/etc/pam.d/sudo啟用 sudo 或/etc/pam.d/common-account(在 pam-auth-update 區塊之後)啟用系統上的所有程式。

然後編輯/etc/security/time.conf以設定您的限制。服務名稱應該是sudo.例如,要允許 Fredsudo僅在周五下午 3 點到 5 點之間使用:

sudo;*;fred;Fr1500-1700

(注意:我還沒有對此進行測試。)

編輯:需要明確的是,我同意其他答案和各種評論者的觀點,似乎有太多人以 root 身分執行太多命令,而你確實需要解決這個問題。當然,如果他們可以成為 root,他們就可以編輯 pam 配置...

答案2

我會質疑為什麼 53 個用戶需要 sudo 來完成日常工作——對於大多數用戶(甚至開發人員)來說,sudo 應該是一個罕見的例外,而不是有人隨意運行命令的例行公事sudo rm -rf *

您能否使用群組權限(或更高級的 ACL)來讓人們存取完成工作所需的文件,也許使用一些 setuid 或 sudo 腳本或二進位檔案來讓他們執行諸如重新啟動服務之類的操作? (請注意,編寫安全的 setuid/sudo 腳本很困難,因此更重要的是讓誠實的人保持誠​​實)。

即使您可以限制人們每週只有一天可以訪問 sudo,一周內仍然有 53 個人可以訪問 sudo,因此這並不能真正幫助解決您的核心問題。

就此而言,我會質疑是否有這麼多用戶需要訪問生產伺服器——您可以將日誌或他們需要的任何資料/文件發送到非生產電腦嗎?

答案3

最簡單的方法是使用 sudoers.d 目錄(透過includedir)進行設定。然後,您可以使用 cron 作業,根據您的需求將每個使用者的規則放入該目錄中。

#includedir 指令可在 /etc/sudoers 中使用來建立 sudoers.d 目錄,您可以將 sudoers 規則作為規則的一部分放入其中。例如,給定:

#includedir /etc/sudoers.d

sudo 將讀取 /etc/sudoers.d 中的每個文件,跳過以“~”結尾或包含“.”的文件名字元以避免導致套件管理器或編輯器臨時/備份檔案出現問題。文件依詞彙順序進行解析。也就是說, /etc/sudoers.d/01_first 將在 /etc/sudoers.d/10_second 之前解析。請注意,由於排序是詞法排序,而不是數字排序,因此 /etc/sudoers.d/1_whoops 將在 /etc/sudoers.d/10_second 之後載入。在檔案名稱中使用一致數量的前導零可以避免此類問題。

請注意,與透過 #include 包含的文件不同,visudo 不會編輯 #includedir 目錄中的文件,除非其中之一包含語法錯誤。仍然可以使用 -f 標誌運行 visudo 來直接編輯文件。

當您希望 joe 具有存取權限時,/etc/sudoers.d/joe 就會出現,您只需刪除該檔案即可取消存取權限。

答案4

您可以新增一個 crontab 將使用者放入 sudo 群組,然後新增第二個 crontab 將該使用者刪除。

相關內容