Esegui uno script shell come un altro utente che non ha password


245

Vorrei eseguire uno script dalla shell principale di Ubuntu come un altro utente che non ha password.

Ho i privilegi di sudo completi, quindi ho provato questo:

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

Quindi devo inserire la mia password, ma non sono sicuro che lo script sia realmente in esecuzione con quell'utente.

Come posso confermare che lo script è attualmente in esecuzione con quell'utente?

Risposte:


354

Puoi farlo con suo sudo, senza bisogno di entrambi.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Le parti rilevanti di man sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

supuoi cambiare utente senza fornire una password se sei root. Vedi la risposta di Caleb

È possibile modificare il /etc/pam.d/sufile per consentire susenza password. Vedere questo risposta .

Se hai modificato il tuo file auth nel modo seguente, qualsiasi utente che faceva parte del gruppo somegrouppoteva sufarlo otherusersenza una password.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Quindi prova dal terminale

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

4
Puoi per favore aggiungere come farlo anche solo su?
rubo77,

2
Questo mi chiede una password :-(
IanVaughan

1
@IanVaughan, Con la configurazione predefinita (di sudo), ti verrà chiesta una password a meno che non la esegui come root. È possibile configurare sudo per "consentire all'utente A di eseguire cmd C come utente B senza richiedere una password". Vedi help.ubuntu.com/community/Sudoers
geirha

1
Mi viene richiesta una password quando si esegue questo come root. Eventuali suggerimenti?
Nate,

1
@NamGVU tieni presente che l'ordine conta. Se i tuoi sudoer hanno una regola più in basso che imposta altre autorizzazioni per il tuo utente, o un gruppo di cui sei membro, che sovrascriverà la tua regola NOPASSWD.
Geirha,

100

Se vuoi usare su invece di sudo, credo che puoi usare qualcosa del genere:

su - <username> -c "<commands>"
  • - simulerà un accesso dell'utente specificato
  • -c dice che si desidera eseguire un comando

ps. Sfortunatamente non sono in grado di installare ruby ​​usando rvm con questo metodo, ma probabilmente non è correlato.


5
Ho dovuto aggiungere sudoall'inizio altrimenti mi ha chiesto la mia password.
IanVaughan,

2
Questo sicuramente non funziona senza sudo. con sudo funziona, ad esempio: sudo su - www-data -c "touch /tmp/test"ha creato con successo un file come www-data
rubo77

Per usare "su" è necessaria la password di root, il punto di "sudo" è evitarlo. Se hai la password di root usando "su" come sopra dovrebbe funzionare bene.
Samuel Åslund,

6

Le risposte sopra sono davvero utili per me, ma per rispondere alla domanda reale ...

Come posso affermare che lo script è davvero in esecuzione sotto quell'utente adesso? -

Uso:

ps -ef | grep <command-name>

L'output dovrebbe includere lo script e l'utente reale che lo esegue. Le persone su sistemi simili a BSD, ad esempio MAC, possono trovare informazioni simili con:

ps aux | grep <command-name>

Gli utenti Linux possono usare ps aux.
Decano Howell,

@DeanHowell; È vero, ma gli utenti MAC non possono usare "ps -ef" e "ps aux" sono le opzioni BSD, disponibili solo come funzionalità di compatibilità mentre "ps -ef" sono opzioni Unix / POSIX standardizzate.
Samuel Åslund,

2

Ho avuto lo stesso problema. Basta digitare il comando screen -dmS testscreenper creare una schermata separata sul proprio account utente non sudo e quindi è possibile registrarlo e verificare se questa schermata è presente screen -ls.

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.