Jak uruchomić skrypt jako inny użytkownik bez hasła?

145

Mam skrypt.sh, który należy uruchomić jako użytkownik2. Jednak ten skrypt można uruchomić tylko pod user1 w mojej aplikacji.

Chciałbym uruchomić następujące polecenie:

su user2 -C script.sh

ale móc działać bez hasła.

Chcę również, aby było to bardzo restrykcyjne, ponieważ w user1 można uruchomić skrypt.sh tylko pod user2 i nic więcej.

Próbowałem to zrobić z plikiem sudoers i po godzinach prób byłem nieskończenie zdezorientowany.

Jeśli ktoś może podać wyraźny przykład tego, jak można to osiągnąć (zamiast czegoś ogólnego, takiego jak użycie sudoers), byłoby to bardzo mile widziane.

user788171
źródło
15
Nie jestem szczególnie blisko. To jest pytanie, jak zaprogramować system w określony sposób; jako taka dotyczy programowania powłoki i jest objęta zakresem SO, który dotyczy pytań dotyczących programowania. Jest oczywiste, że wiele osób nie postrzega tego jako tak nie na temat, aby należało głosować w dół; pytanie i odpowiedzi mają znaczną liczbę głosów pozytywnych.
Jonathan Leffler

Odpowiedzi:

121

Zadzwoń visudoi dodaj to:

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

Te ścieżki poleceń musi być absolutna ! Następnie zadzwoń sudo -u user2 /home/user2/bin/test.shz user1muszli. Gotowe.

piroskop
źródło
3
W pomocy Ubuntu znajduje się ładny opis formatu sudoers . Strona
podręcznika użytkownika
jak więc taka skalowalność miałaby działać dla wszystkich użytkowników jako użytkownik2, a nie tylko jako użytkownik1?
jiggunjer
193

spróbuj biegać:

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

Spowoduje to uruchomienie polecenia jako nazwa użytkownika, pod warunkiem, że masz uprawnienia do sudo jako ten użytkownik.

Jeronimo Robles
źródło
17
Działał jako zwykły użytkownik z pełnymi prawami sudo, takimi jak:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77
5
Tylko uwaga dla wszystkich użytkowników Mac, najwyraźniej składnia jest nieco inna: su username -c "command".
NHDaly
1
Jeśli próbujesz zacząć screenjako inny użytkownik, może to być pomocne - linuxquestions.org/questions/linux-software-2/ ...
Mint
2
jeśli username(lub w pytaniu user2) ma samo hasło, nie pozwoli to pominąć monitu o to. druga odpowiedź brzmi: hasło nie jest potrzebne, zarówno użytkownik1, jak i użytkownik2.
phil294
1
`su -c "Your command right here" -s /bin/sh username`

Powyższe polecenie jest poprawne, ale w Red Hat, jeśli selinux wymusza, nie pozwoli cronowi na wykonywanie skryptów jako inny użytkownik. przykład; execl: couldn't exec /bin/sh execl: Permission denied

Musiałem zainstalować setroubleshoot i setools i uruchomić następujące, aby na to zezwolić:

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
C Jaskoski
źródło