Мне было интересно, как запустить команду как другой пользователь из сценария.
У меня есть владелец скрипта, установленный как root. У меня также есть следующая команда, запускаемая в скрипте для запуска команды от имени пользователя hudson:
su -c command hudson
Это правильный синтаксис?
sudo cat /etc/passwd | grep user-abc
. Если вы видите что-то вроде этого:user-abc:x:994:994::/home/user-abc:/bin/false
тогда это не сработает. Это потому, что последняя часть "/bin/false
" означает, что для этого пользователя нет оболочки.Ответы:
Да. Вот это
--help
:И некоторое тестирование (я использовал,
sudo
поскольку я не знаю пароль дляnobody
учетной записи)Когда ваша команда принимает аргументы, вы должны заключить ее в кавычки. Если вы этого не сделаете, странные вещи будут происходить. Здесь я - как root - пытаюсь создать каталог в / home / oli (как oli) без кавычек полной команды:
Он только читается
mkdir
как значение для-c
флага и пытается использовать в/home/oli/java
качестве имени пользователя. Если мы процитируем это, это просто работает:источник
Примечание: «У меня есть владелец скрипта, установленный как root», ничего не делает; даже если у вас установлен бит setuid, он все равно не работает
Предполагая, что вы на самом деле запускаете скрипт от имени пользователя root, вы можете использовать его
sudo
.su
в первую очередь для переключения пользователей, аsudo
для выполнения команд, как и другие пользователи.-u
Флаг позволяет указать , какой пользователь , чтобы выполнить команду , как:источник
sudo
вы можете только получить это:root is not in the sudoers file
. Что делаетsu - <username> -c "command to run"
единственный вариант.sudo -u kilgore mv this that
)