Linux: выполнить определенную команду от имени другого пользователя?
Я хочу, чтобы пользователи могли запускать определенную команду от имени другого пользователя, возможно ли это?
У меня есть скрипт, который читает удаленный файл через ssh, чтобы получить статус, что-то вроде:
#!/usr/bin/sh
state=$(ssh -q -i $HOME/.ssh/id_rsa" auto@remote-host "[ -f /path/to/state/file ] && cat /path/to/state/file 2>/dev/null")
printf "${state}"
У пользователя есть настройка ключа, позволяющая ему войти на удаленный компьютер без пароля. Я хочу, чтобы пользователи могли запускать этот скрипт, не беспокоясь о настройке собственного ключа, например:
bob@local-machine$ /path/to/state-check
Итак
su auto -c "/path/to/state-check"
Но для этого все равно потребуется доступ к паролю автоматического пользователя или sudo. Есть ли способ настроить файл, который позволит Бобу автоматически запускать определенные команды без пароля? Или мне следует перепроектировать инструмент так, чтобы файлы состояния извлекались и сохранялись локально? Я не совсем уверен, что это хороший способ сделать это. Я запускаю это на машинах RHEL 9.
2 ответа
Я хочу, чтобы пользователи могли запускать определенную команду от имени другого пользователя, возможно ли это?
Да
Для этого и создана команда.
Хотя многие начинающие системные администраторы Linux знают и используют только для запуска команд/повышения или повышения привилегий до root и полных прав администратора, и многие примеры предоставляют только неограниченные и неограниченные привилегии.sudo
явно предназначен для предоставления ограниченных привилегий , а также может использоваться для запуска одной и/или только некоторых конкретных команд под UID другого непривилегированного пользователя.
Кромеsudo
, упомянутый @HBruijn, вы также можете использовать из pkexecPolkit< a i=4> (также известный как Policy Kit). См. также: справочную страницуpolkit(8).