Запустить часть скрипта bash от имени другого пользователя
33
Есть ли способ заставить часть скрипта работать от имени другого пользователя (не root)? Если это помогает, часть, которая будет запущена от имени другого пользователя, появляется в конце скрипта
команда sudo запускает команду как имя пользователя .
Если скрипт запускается от имени пользователя root, я не думаю, что он запросит пароль. Иначе, в этой статье обсуждается, как использовать sudo с паролем в одной командной строке? , а в этой статье обсуждается, как использовать sudo без пароля?
Это приятно и легко, но есть ли способ сделать это для группы команд вместо одной за раз?
Андрей
написать скрипт bash, сделать его исполняемым, chmod +x script.shа затем простоsudo -u username script.sh
NiCU
@ Андрей , я задавался этим сам и следующие работал для меня: Судо -u IC ш -c «cmd1 && cmd2»
Karussell
Также i
включите
6
Этот ответ хорош, но совет по поводу серверной ошибки немного опасен - он позволяет любому запускать что-либо от имени пользователя root! Поэтому я пишу здесь, потому что я не могу отформатировать комментарий.
Я бы порекомендовал использовать visudo, чтобы предоставить вам необходимые разрешения как можно точнее. Введите visudoи добавьте строку, например:
Будет ли это работать для команды, доступной только для конкретного пользователя?
Маниш Матхай
Вы можете указать, что только определенные пользователи могут запускать команду (в приведенных выше примерах замените usernameимя пользователя, которое должно быть в состоянии выполнить команду). Если исполняемый файл, который вы хотите запустить, исполняется только одним конкретным пользователем, это тоже нормально - просто передайте это имя пользователя в sudo -u username commandlineстроке скрипта.
Джеймс Полли
@Manish. Да. Файл sudoers говорит: «Разрешите этому имени пользователя на этом хосте запускать command1 без необходимости
ввода
6
# Я = нравится:
#test if running bash as a different user works
sudo -u nobody bash -c :&& RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
не уверен в этом, но если вы хотите, чтобы ТОЛЬКО конец этого скрипта запускался от имени другого пользователя, вы можете добавить его su someuserдо конца скрипта.
Я думаю, что это наиболее подходящий ответ, имея все другие ответы, предполагающие sudo, который часто не устанавливается по умолчанию в некоторых минимальных установках Linux.
Тим
1
Таким образом, конец скрипта будет выполняться другим пользователем (root). Пожалуйста, обратите внимание $[LINENO+2]и exit $?звонки. Это необходимо для того, чтобы конец сценария выполнялся всего один раз и чтобы сохранить код завершения sudoвызова.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1
Ответы:
Используйте команду sudo в скрипте.
В виде:
команда sudo запускает команду как имя пользователя .
Если скрипт запускается от имени пользователя root, я не думаю, что он запросит пароль. Иначе, в этой статье обсуждается, как использовать sudo с паролем в одной командной строке? , а в этой статье обсуждается, как использовать sudo без пароля?
источник
chmod +x script.sh
а затем простоsudo -u username script.sh
i
Этот ответ хорош, но совет по поводу серверной ошибки немного опасен - он позволяет любому запускать что-либо от имени пользователя root! Поэтому я пишу здесь, потому что я не могу отформатировать комментарий.
Я бы порекомендовал использовать visudo, чтобы предоставить вам необходимые разрешения как можно точнее. Введите
visudo
и добавьте строку, например:Если вам нужно запустить эту же вещь на многих хостах, вы можете открыть ее с помощью:
Но я бы ** не * использовал либо:
или имя пользователя hostname = ALL
У man-страницы sudoer много подробностей
источник
username
имя пользователя, которое должно быть в состоянии выполнить команду). Если исполняемый файл, который вы хотите запустить, исполняется только одним конкретным пользователем, это тоже нормально - просто передайте это имя пользователя вsudo -u username commandline
строке скрипта.# Я = нравится:
# ./бег
источник
Для сонаркуба:
sudo -u sonar /usr/bin/sonar start
где
sonar
имя пользователя, использованного для запуска команды/usr/bin/sonar start
источник
не уверен в этом, но если вы хотите, чтобы ТОЛЬКО конец этого скрипта запускался от имени другого пользователя, вы можете добавить его
su someuser
до конца скрипта.Я что-то пропустил?
Надеюсь, это поможет,
С уважением
источник
Таким образом, конец скрипта будет выполняться другим пользователем (root). Пожалуйста, обратите внимание
$[LINENO+2]
иexit $?
звонки. Это необходимо для того, чтобы конец сценария выполнялся всего один раз и чтобы сохранить код завершенияsudo
вызова.источник