Это для Ubuntu 14.04 и Centos 7.
Мне нужно ограничить количество пользователей, активно работающих с правами root. т.е. вошли в систему как root на CLI.
В основном, Я хочу, чтобы только один пользователь одновременно мог запускать команды от имени пользователя root. Целью здесь является аудит.
Я изучал возможность установки ограничений в /etc/security/limits.conf, но модуль pam_limits.so, похоже, влияет только на вход в систему. Или оболочки входа. Точно сказать не могу. Но какими бы ни были особенности, он запрещает пользователю подключаться по SSH к ящику более одного раза, но не предотвращает, чтобы более одного пользователя становились суперпользователем через «sudo su». Таким образом, установка limits.conf может разрешить одновременный вход более чем одному пользователю с правами root.
Вот строка limits.conf, которую я пробовал, которая ограничивает это:
root hard maxlogins 1
Затем я попытался ограничить пользователей в группе @admins . Я решил, что только этим пользователям разрешено использовать sudo su для получения root-прав (на основе имеющихся у нас пользовательских правил sudo)
@admins hard maxlogins 1
Кажется, это делает то, что я хочу, но кажется неуклюжим / неправильным. Назовите это интуицией - я не совсем понимаю, что считаю неправильным в этом.
Наконец, «Почему?». Почему у меня есть это требование?
Мы пытаемся реализовать элементы управления, чтобы соответствовать требованию 8.5 PCI-DSS 3.1 «Не использовать групповые, общие или общие идентификаторы, пароли или другие методы аутентификации» - акцент на «общий ". В среде Windows вы просто разрешаете пользователям делать все, что угодно, и никто не разделяет основную учетную запись администратора. Среды Linux спроектированы таким образом, что для некоторых вещей вы действительно хотите войти в систему как root. В среде Linux должен быть совместимый с PCI способ решения этой проблемы.
Это решает мою проблему: Записывать в журнал все команды, выполняемые администраторами на производственных серверах
Резюме
1) Установите auditd
2) проверьте execve
системный вызов с этими правилами в audit.rules
-a exit,always -F arch=b64 -F euid=0 -S execve
-a exit,always -F arch=b32 -F euid=0 -S execve
3) Добавьте audit = 1
в grub.conf
Примеры для Centos и Ubuntu:
#Centos
grep audit=1 /etc/default/grub || \
( sed -i.bak -e '/^GRUB_CMDLINE_LINUX=/ s/" *$/ audit=1"/' /etc/default/grub && \
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg )
#ubuntu
grep audit=1 /etc/default/grub || \
( sed -i.bak -e '/^GRUB_CMDLINE_LINUX=/ s/" *$/ audit=1"/' /etc/default/grub && \
/usr/sbin/update-grub )
4) Поместите эту строку в эти файлы / etc / pam.d / {login, kdm, sshd}
session required pam_loginuid.so
(я включил это резюме, поскольку ссылки на решения противоречат способу Serverfault)