Судоходство на один день в неделю?

Судоходство на один день в неделю?

Мой босс добровольно вызвал меня на должность системного администратора для нашего производственного сервера 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, чтобы удалить этого пользователя.

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