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


Mi piacerebbe eseguire uno script dalla shell di Ubuntu principale come un utente diverso che non ha password.

Ho i privilegi 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 attualmente in esecuzione su quell'utente.

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


206
2018-05-13 10:55


origine




risposte:


Puoi farlo con su o sudo, non c'è 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.

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

È possibile modificare il /etc/pam.d/su file per consentire su senza password. Guarda questo risposta.

Se hai modificato il tuo file auth al seguente, qualsiasi utente facente parte del gruppo somegroup poteva su a otheruser senza 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

287
2018-05-13 11:20



Puoi per favore aggiungere come farlo con giusto su pure? - rubo77
Questo mi chiede una password :-( - IanVaughan
@IanVaughan, Con la configurazione predefinita (di sudo), ti verrà chiesta una password a meno che tu non la esegua come root. È possibile configurare sudo per "consentire all'utente A di eseguire cmd C come utente B senza richiedere una password". Vedere help.ubuntu.com/community/Sudoers - geirha
Mi viene richiesta una password quando si esegue questo come root. Eventuali suggerimenti? - Nate
@Nate, hai apportato alcune modifiche al file sudoers. La configurazione predefinita consente a root di eseguire qualsiasi cosa come chiunque, senza richiedere una password. - geirha


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

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

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


87
2018-04-07 00:01



Dovevo aggiungere sudo all'inizio altrimenti mi ha chiesto la mia password. - IanVaughan
Questo sicuramente non funziona senza sudo. con sudo funziona, ad esempio: sudo su - www-data -c "touch /tmp/test"creato con successo un file come www-data - rubo77
Per usare "su" è necessaria la password di root, il punto di "sudo" è quello di evitarlo. Se hai la password di root usando "su" come sopra, dovrebbe funzionare bene. - Samuel Åslund


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

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

Uso:

ps -ef | grep <command-name>

L'output dovrebbe includere lo script e l'utente effettivo che lo esegue. Persone su sistemi simili a BSD, ad es. Il MAC può trovare informazioni simili con:

ps aux | grep <command-name>

6
2018-05-11 18:30





Ho avuto lo stesso problema. Basta digitare il comando screen -dmS testscreen questo creerà una schermata distaccata sul tuo account utente non-sudo e quindi potrai loggarla e controllare se questa schermata è presente screen -ls.


2
2018-05-06 08:35