我编辑我的问题以给出目标,而不是解决方案的假设。
- 基于 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 root
、sudo /usr/bin/bash
或sudo /usr/bin/{ANY_OTHER_SHELL}
编写自己的脚本/程序,使用一些命令来获得完全 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 权限!