
Мой босс добровольно вызвал меня на должность системного администратора для нашего производственного сервера RedHat. Он попросил меня усилить меры безопасности, чтобы избежать подобных rm -f *
недавних инцидентов.
Прямо сейчас у нас 53 пользователя, которые sudo-входят в машину, и это кошмар аудита. Мне интересно, можно ли разрешить пользователям доступ только в определенные дни недели.
Например, могу ли я разрешить пользователю «Джо» входить в систему ТОЛЬКО по вторникам и четвергам, а «Джейн» — только по воскресеньям? Можно ли etc/sudoers
настроить, чтобы разрешить это?
Есть ли лучший способ вместо использования sudoers?
решение1
sudo
выполняет аутентификацию через PAM, как и почти все остальное на Linux-компьютере.
Так что вы должны быть в состоянии использовать pam_time.so
это.
По умолчанию, по крайней мере в Debian, этот модуль не включен. Вам нужно добавить строку, которая выглядит так:
account requisite pam_time.so
либо /etc/pam.d/sudo
включить только для sudo, либо /etc/pam.d/common-account
(после блока pam-auth-update) включить для всех программ в системе.
Затем отредактируйте /etc/security/time.conf
, чтобы установить ограничения. Имя службы должно быть sudo
. Например, чтобы разрешить Фреду использовать sudo
только между 15:00 и 17:00 в пятницу:
sudo;*;fred;Fr1500-1700
(ПРИМЕЧАНИЕ: я это не проверял.)
редактировать:Чтобы внести ясность, я согласен с другим ответом и различными комментаторами, у вас, похоже, слишком много людей запускают слишком много команд как root, и вам действительно нужно это исправить. И, конечно, если они могут стать root, они могут редактировать конфигурацию pam...
решение2
Я бы спросил, зачем 53 пользователям sudo для выполнения повседневной работы — для большинства пользователей (даже разработчиков) sudo должно быть редким исключением, а не таким обыденным делом, чтобы кто-то мог небрежно запустить команду sudo rm -rf *
.
Можно ли использовать групповые разрешения (или даже более продвинутые списки контроля доступа), чтобы предоставить людям доступ к файлам, которые им нужны для выполнения работы, возможно, с помощью некоторых скриптов или двоичных файлов с setuid или sudo, чтобы позволить им выполнять такие действия, как перезапуск служб? (обратите внимание, что сложно написать безопасный скрипт setuid/sudo, поэтому это скорее способ заставить честных людей быть честными).
Даже если вы можете ограничить доступ людей к sudo одним днем в неделю, это все равно будет 53 человека с доступом к sudo в течение недели, так что это не поможет решить вашу основную проблему.
Если на то пошло, я бы задался вопросом, нужен ли вообще такому количеству пользователей доступ к производственному серверу — можно ли отправлять журналы или любые другие данные/файлы, которые им нужны, на непроизводственную машину?
решение3
Самый простой способ — использовать каталог sudoers.d (через includedir) для вашей конфигурации. Затем вы можете иметь задания cron, которые могут помещать правила для каждого пользователя в этот каталог на желаемое вами время.
Директиву #includedir можно использовать в /etc/sudoers для создания каталога sudoers.d, в который можно поместить правила sudoers как часть ваших правил. Например, учитывая:
#includedir /etc/sudoers.d
sudo будет читать каждый файл в /etc/sudoers.d, пропуская имена файлов, которые заканчиваются на «~» или содержат символ «.», чтобы избежать проблем с менеджером пакетов или редактором временных/резервных файлов. Файлы анализируются в отсортированном лексическом порядке. То есть /etc/sudoers.d/01_first будет анализироваться до /etc/sudoers.d/10_second. Имейте в виду, что поскольку сортировка лексическая, а не числовая, /etc/sudoers.d/1_whoops будет загружен после /etc/sudoers.d/10_second. Использование постоянного количества начальных нулей в именах файлов может помочь избежать таких проблем.
Обратите внимание, что в отличие от файлов, включенных через #include, visudo не будет редактировать файлы в каталоге #includedir, если только один из них не содержит синтаксическую ошибку. Все еще возможно запустить visudo с флагом ‑f, чтобы редактировать файлы напрямую.
/etc/sudoers.d/joe будет присутствовать, когда вы захотите предоставить доступ пользователю joe, и вы можете просто удалить файл, чтобы лишить его доступа.
решение4
Вы можете добавить файл crontab, чтобы добавить пользователя в группу sudo, а затем второй файл crontab, чтобы удалить этого пользователя.