但有一個您可能更感興趣的解決方案 - 終端日誌記錄。

但有一個您可能更感興趣的解決方案 - 終端日誌記錄。

我編輯我的問題以給出目標,而不是解決方案的假設。

  • 基於 RHEL 的發行版
  • root 使用者永遠不會被使用,其密碼也是保密的

所有運行的命令sudo都記錄在/var/log/secure.當使用者使用 切換到 root 時sudo su/sudo -i,不會記錄在會話下執行的所有命令。

我的目標是專注於管理員在做什麼。


例子

如果用戶這樣做:

alexis$ sudo visudo   # this is logged
alexis$ sudo su       # this is logged
root# visudo          # this isn't logged since it's run under root

該命令visudo然後su被記錄為由使用者啟動alexis但由 root 執行。然而,以下所有指令都不會被記錄,因為它們是在 root shell 中以 root 身分執行的。

11 月 1 日 13:28:29 3020m sudo[6906]: 亞歷克西斯: TTY=pts/0 ; PWD=/home/亞歷克西斯;用戶=;命令=/bin/su


簡單來說,我不希望使用者(輪子中的管理員)能夠切換到 root shell。如果有人想執行 root shell,他/她必須知道 root 的密碼。

答案1

這是不可能的 - 請讀到最後。如果使用者俱有完全 sudo 存取權限,他們始終可以使用sudo -i -u rootsudo /usr/bin/bashsudo /usr/bin/{ANY_OTHER_SHELL}編寫自己的腳本/程序,使用一些命令來獲得完全 shell 存取權限。這是微不足道的。他們還可以恢復您所做的任何配置更改等/sbin/nologin

[vagrant@eurolinux8-vbuilder ~]$ sudo chsh root -s  /sbin/nologin 
Changing shell for root.
chsh: Warning: "/sbin/nologin" is not listed in /etc/shells.
Shell changed.
[vagrant@eurolinux8-vbuilder ~]$ sudo -i
This account is currently not available.

但任何進階用戶都可以透過 sudo 使用「裸」bash 呼叫:

[vagrant@eurolinux8-vbuilder ~]$ sudo /usr/bin/bash
[root@eurolinux8-vbuilder vagrant]# 

因此,模糊訪問並不是/usr/sbin/nologin很有效。

您也可以為 bash 或任何其他 shell 配置添加一些腳本,以檢查使用者是否root會列印諸如Please use sudo註銷之類的訊息。但再一次,高級用戶將能夠使用--norc--noprofile或將自己的配置指向 bash。總而言之 - 據我所知,這是不可能的。當使用通常僅是守護程序的使用者(如 httpd)時,我甚至檢查是否有一些特殊情況(例如,使用 PAM)。但httpd安裝後也可以使用sudo -u apache /usr/bin/bash。也許有一些基於 PAM 的解決方案,但透過 google-fu,我無法找到它們。這也很困難,因為您有興趣停用互動式存取。在另一種情況下(完全停用對 root 的存取),您將導致系統變磚,並且必須在復原模式下修復它。

但有一個您可能更感興趣的解決方案 - 終端日誌記錄。

您想了解終端歷史記錄,而不是完全限制存取。同時,您應該知道具有完全管理員存取權限的使用者可以刪除其日誌 - 因此,為了以防萬一,您應該使用 rsyslog 或其他日誌記錄解決方案將日誌放入不同的伺服器。

因為您使用的是基於 RHEL 的發行版 - 您可能會閱讀以下內容。 https://www.redhat.com/sysadmin/terminal-logging

答案2

將變更恢復到 PAM。你不需要它們。

相反,請使用visudo編輯文件/etc/sudoers並註解掉以%wheel和/或開頭的行%sudo。這將阻止這些群組中的用戶使用sudo.

在寫出更改之前,您應該為自己添加一行。否則,請確保您擁有有效的 root 密碼(如果su沒有sudo)或使用其他一些方法sudo來獲得 root 權限!

相關內容