強制使用 sudo 而不是以 root 身份從終端執行命令
我編輯我的問題以給出目標,而不是對解決方案的假設。
- 基於 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 須藤
$$ 6906 $$: 亞歷克西斯:TTY=pts/0;PWD=/家/亞歷克西斯;使用者=根;命令=/bin/su
簡而言之,我不希望使用者(輪子中的管理員)能夠切換到 root shell。如果有人想執行 root shell,他/她必須知道 root 的密碼。
這是不可能的——請讀到最後。如果使用者具有完全的 sudo 訪問權限,他們總是可以使用
sudo -i -u root
、或編寫自己的腳本/程序,這些腳本/程序將使用一些命令來獲得完全的 shell 訪問權限sudo /usr/bin/bash
。sudo /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 之類的東西。總結一下——據我所知,這是不可能的。我什至檢查是否有一些例外情況$$ for example, with PAM $$當使用通常只是守護程序的使用者時(如 httpd)。但是
httpd
安裝後你也可以使用sudo -u apache /usr/bin/bash
. 也許有一些基於 PAM 的解決方案,但是使用 google-fu,我無法找到它們。這也很困難,因為您有興趣禁用互動式訪問。在另一種情況下(完全禁用對 root 的訪問),您將使系統變磚,並且您必須在恢復模式下修復它。 但是有一個您可能更感興趣的解決方案 - 終端日誌記錄。您想了解終端歷史,而不是完全限制訪問。同時,您應該知道具有完全管理員訪問權限的使用者可以刪除他們的日誌 - 因此以防萬一,您應該使用 rsyslog 或其他日誌記錄解決方案將日誌放到不同的伺服器上。
因為您使用的是基於 RHEL 的發行版 - 您可能會閱讀以下內容。 https://www.redhat.com/sysadmin/terminal-logging