
我的老闆自願擔任我們生產 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 將該使用者刪除。