Come eseguire lo script come un altro utente senza password?


145

Ho script.sh che deve essere eseguito come user2. Tuttavia, questo script può essere eseguito solo con user1 nella mia applicazione.

Vorrei eseguire il seguente comando:

su user2 -C script.sh

ma essere in grado di funzionare senza password.

Voglio anche che questo sia molto restrittivo, poiché in user1 è possibile eseguire solo script.sh in user2 e nient'altro.

Ho provato a farlo con il file sudoers e sono stato infinitamente confuso dopo ore di tentativi.

Se qualcuno può fornire un esempio esplicito di come questo può essere realizzato (invece di qualcosa di generico come usare i sudoer), sarebbe molto apprezzato.


15
Non mi piace particolarmente con la chiusura. Questa è una domanda su come programmare il sistema in un modo particolare; come tale, si tratta di programmazione della shell ed è nell'ambito di SO che è per domande sulla programmazione. È chiaro che un certo numero di persone non lo considera così fuori tema che dovrebbe essere votato verso il basso; la domanda e le risposte hanno tutte un numero considerevole di voti positivi.
Jonathan Leffler,

Risposte:


121

Chiama visudoe aggiungi questo:

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

I percorsi dei comandi devono essere assoluti ! Quindi chiama sudo -u user2 /home/user2/bin/test.shda una user1shell. Fatto.


3
C'è una bella descrizione del formato sudoers nella guida di Ubuntu. La pagina man per i sudoers è brutta :(
Mifeet,

quindi come potrebbe essere eseguita questa scala per tutti gli utenti come user2, anziché solo user1?
jiggunjer,

193

prova a correre:

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

Questo eseguirà il comando come nome utente dato che disponi delle autorizzazioni per sudo come quell'utente.


17
Funzionava come un normale utente con diritti sudo completi come questo:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77,

5
Solo una nota per tutti gli utenti Mac, a quanto pare la sintassi è un po 'diverso: su username -c "command".
NHDaly,

1
Se stai cercando di iniziare screencome un altro utente, questo potrebbe essere utile - linuxquestions.org/questions/linux-software-2/…
Menta

2
se username(o nella domanda user2) ha una password stessa, ciò non consentirà di ignorare la richiesta. l'altra risposta fa: nessuna password necessaria, sia user1 che user2.
phil294

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

Il comando sopra è corretto, ma su Red Hat se selinux lo sta imponendo non permetterà a cron di eseguire script come un altro utente. esempio; execl: couldn't exec /bin/sh execl: Permission denied

Ho dovuto installare setroubleshoot e setools ed eseguire quanto segue per consentirlo:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.