Самый быстрый способ определения разрешений пользователей в / etc / sudoer - PullRequest
2 голосов
/ 15 июля 2009

Пользователи будут получать удаленный доступ к *** nix-машинам через SSH, и мне нужно определить самый быстрый способ проверить, имеет ли имя пользователя, которое они используют в настоящее время, доступ NOPASSWD в файле / etc / sudoers .

Возможные варианты:

  • grep для имени пользователя в / etc / sudoers, анализируйте вывод командной строки, чтобы определить, имеет ли он NOPASSWD, если нет, удалите строку и добавьте новые разрешения
  • Просто добавьте строку разрешения в файл независимо (плохая идея).
  • Попытайтесь ввести sudo в защищенный файл и посмотрите, запрашивает ли он пароль.

Я надеюсь на что-то более простое, но мой гугл-фу не нашел ответов.

Ответы [ 2 ]

4 голосов
/ 16 июля 2009

Если sudo -v успешно, пользователю разрешено использовать sudo; в случае сбоя пользователь не авторизован для использования sudo.

# su user -c 'setsid sudo -v </dev/null'; echo $?
[sudo] password for user:
1
# su root -c 'setsid sudo -v </dev/null'; echo $?
0

Без setsid , sudo попытается запросить пароль в интерактивном режиме, даже если все stdin / stdout / stderr были перенаправлены. Если у вас нет управляющего терминала, это не нужно, но вам, вероятно, понадобится что-то кроме su для изменения прав пользователя, например fork + setreuid .

1 голос
/ 15 июля 2009

Если вам действительно нужен «самый быстрый» способ *, я думаю, вы создаете веб-сервер, который будет обрабатывать много одновременных запросов.

Это поднимает еще одну проблему - проблему параллелизма. Как правило, многие процессы чтения и записи в один и тот же важный файл являются рецептом катастрофы.

Создайте небольшой независимый процесс для решения задачи. Он должен иметь минимальный интерфейс, который будет получать запросы от клиентов и обновления для файла /etc/sudoer. Что-то вроде has_NOPASSWD_access() и set_NOPASSWD_access(). Он должен читать файл только тогда, когда он должен быть записан, поэтому вы значительно сократите время ввода-вывода, необходимое для обработки запроса.

Плюсы -

  • Быстрый: ввод-вывод не требуется для простого чтения файла, поскольку он сохраняется в буфере с момента первоначального чтения
  • Потокобезопасный: только один сервер пишет и читает файл sudoer
  • Принцип единого выбора - только этот процесс обрабатывает файл sudoer
  • Элегант (надеюсь): -)

Минусы - - Перечислите их в комментариях, и я добавлю.

...