Самый быстрый способ определить права пользователя в /etc/sudoer

StackOverflow https://stackoverflow.com/questions/1133364

Вопрос

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

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

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

Я надеюсь на что-то попроще, но мой гугл-фу не дал никаких ответов.

Это было полезно?

Решение

Если 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

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

Другие советы

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

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

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

Плюсы -

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top