Centos

強制使用 sudo 而不是以 root 身份從終端執行命令

  • November 1, 2021

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

  • 基於 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/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 之類的東西。總結一下——據我所知,這是不可能的。我什至檢查是否有一些例外情況

$$ 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

引用自:https://unix.stackexchange.com/questions/675652