Как запустить скрипт от имени другого пользователя без пароля?

145

У меня есть script.sh, который должен быть запущен как user2. Тем не менее, этот скрипт может быть запущен только под user1 в моем приложении.

Я хотел бы выполнить следующую команду:

su user2 -C script.sh

но иметь возможность работать без пароля.

Я также хочу, чтобы это было очень ограничительным, так как в user1 можно только запустить script.sh под user2 и ничего больше.

Я пытался сделать это с файлом sudoers и просто бесконечно запутался после нескольких часов попыток.

Если кто-то может предоставить явный пример того, как это можно сделать (вместо чего-то общего, например, использовать sudoers), это будет с благодарностью.

user788171
источник
15
Я не особенно с близкими. Это вопрос о том, как запрограммировать систему определенным образом; как таковой, он касается программирования оболочки и находится в рамках SO, что касается вопросов о программировании. Ясно, что некоторые люди не считают это настолько не по теме, что за него следует отказаться; вопрос и ответы имеют значительное количество положительных голосов.
Джонатан Леффлер

Ответы:

121

Позвоните visudoи добавьте это:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

В пути команды должен быть абсолютным ! Тогда звоните sudo -u user2 /home/user2/bin/test.shиз user1снаряда. Готово.

pyroscope
источник
3
В справке по Ubuntu есть хорошее описание формата sudoers .
Справочная
Так как же это масштабировать для всех пользователей, чтобы они работали как user2, а не просто user1?
Джиггунджер
193

попробуйте запустить:

su -c "Your command right here" -s /bin/sh username

Это запустит команду под именем пользователя, если у вас есть права на sudo как этого пользователя.

Джеронимо Роблес
источник
17
Он работал как обычный пользователь с полными правами sudo, как это:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77
5
Только примечание для всех пользователей Mac, по- видимому , синтаксис немного отличается: su username -c "command".
NHDaly
1
Если вы пытаетесь начать screenкак другой пользователь, это может быть полезно - linuxquestions.org/questions/linux-software-2/…
Mint
2
если username(или в вопросе user2) сам пароль, это не позволит пропустить подсказку для него. другой ответ: пароль не требуется, и user1, и user2.
phil294
1
`su -c "Your command right here" -s /bin/sh username`

Вышеприведенная команда верна, но в Red Hat, если selinux применяет ее, она не позволит cron запускать сценарии от имени другого пользователя. пример; execl: couldn't exec /bin/sh execl: Permission denied

Мне пришлось установить setroubleshoot и setools и запустить следующее, чтобы это сделать:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
С Яскоски
источник