Это для Ubuntu 14.04 и Centos 7.
Мне нужно ограничить количество пользователей, активно работающих как root. То есть вошли в систему как root в CLI.
По сути, я хочу, чтобы только один пользователь одновременно мог запускать команды с правами root. Цель здесь - одитинг.
Я изучал установку ограничений в /etc/security/limits.conf, но модуль pam_limits.so, похоже, влияет только на вход в систему. Или оболочки входа. Точно сказать не могу. Но какими бы ни были особенности, делает запретить пользователю подключаться к ящику по SSH более одного раза, но не запретить более чем одному пользователю стать пользователем root через "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
syscall с этими правилами в 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)