Як запустити скрипт як інший користувач без пароля?


145

У мене є script.sh, який потрібно запустити як user2. Однак цей сценарій можна запустити лише під користувачем user1 у моїй програмі.

Я хотів би виконати таку команду:

su user2 -C script.sh

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

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

Я намагався робити це з файлом sudoers і просто нескінченно плутався після годин спроб.

Якщо хтось може надати явний приклад того, як це можна досягти (замість чогось загального типу, як, наприклад, використовувати судори), це буде дуже вдячно.


15
Я не особливо з близькими. Це питання про те, як програмувати систему певним чином; як таке, мова йде про програмування оболонок і знаходиться в межах ЗО, що стосується питань програмування. Зрозуміло, що низка людей не вважає це настільки поза темою, що його слід проголосувати; питання і відповіді мають значну кількість голосів.
Джонатан Леффлер

Відповіді:


121

Зателефонуйте visudoта додайте це:

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

У шляху команди повинен бути абсолютним ! Потім дзвоніть sudo -u user2 /home/user2/bin/test.shз user1оболонки. Зроблено.


3
У довідці про Ubuntu є хороший опис формату sudoers . Сторінка чоловіка для судерів потворна :(
Mifeet

то як би ця шкала для всіх користувачів працювала як user2, а не просто user1?
jiggunjer

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/…
Монетний двір

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

Мені довелося встановити усунення несправностей та 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.