Но есть решение, которое может вас больше заинтересовать — ведение журнала терминала.

Но есть решение, которое может вас больше заинтересовать — ведение журнала терминала.

Я редактирую свой вопрос, чтобы обозначить цель, а не предположение о решении.

  • Дистрибутивы на базе 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 в оболочке root.

1 ноя 13:28:29 3020m sudo[6906]: алексис: TTY=pts/0 ; PWD=/home/alexis ; USER=корень;КОМАНДА=/bin/su


Вкратце,Я не хочу, чтобы пользователь (администратор в wheel) мог переключиться в оболочку root.Если кто-то хочет запустить оболочку root, он/она должен знать пароль root.

решение1

Это невозможно - пожалуйста, дочитайте до конца. Если у пользователя есть полный доступ sudo, он всегда может использовать sudo -i -u root, sudo /usr/bin/bash, sudo /usr/bin/{ANY_OTHER_SHELL}или написать свой собственный скрипт/программу, которая будет использовать несколько команд для получения полного доступа к оболочке. Это тривиально. Они также могут отменить любые изменения конфигурации, которые вы сделали и т. д. Вы можете немного скрыть это, изменив оболочку root по умолчанию на /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.

Но любой опытный пользователь может использовать «голый» вызов bash с помощью sudo:

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

Поэтому сокрытие доступа /usr/sbin/nologinне является эффективным.

Вы также можете добавить какой-нибудь скрипт в bash или любую другую конфигурацию оболочки, чтобы проверить, является ли пользователь тем, rootкоторый будет выводить сообщения типа Please use sudoи выходить из системы. Но еще раз, опытные пользователи смогут использовать такие вещи, как --norcи --noprofileили указывать свою собственную конфигурацию в bash. Подводя итог, - насколько мне известно, это невозможно. Я даже проверяю, есть ли какие-то исключительные случаи [например, с PAM] при использовании пользователя, который обычно является только демоном (например, httpd). Но с 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!

Связанный контент