Самый быстрый способ определить права пользователя в /etc/sudoer
-
16-09-2019 - |
Вопрос
Пользователи будут иметь удаленный доступ к машинам на базе ***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
- Элегантно (надеюсь):-)
Минусы - - Перечислите их в комментариях, и я добавлю.