但有一个您可能更感兴趣的解决方案 - 终端日志记录。

但有一个您可能更感兴趣的解决方案 - 终端日志记录。

我编辑我的问题以给出目标,而不是解决方案的假设。

  • 基于 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 访问权限。这很微不足道。他们还可以恢复您所做的任何配置更改等。您可能会通过将默认根 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 权限!

相关内容