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

203

Vorrei eseguire uno script dalla shell di Ubuntu principale come 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?

    
posta rubo77 13.05.2013 - 12:55

4 risposte

285

Puoi farlo con su o sudo , senza bisogno di entrambi.

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

Le parti pertinenti 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 può solo cambiare utente senza fornire una password se sei root. Vedi la risposta di Caleb

Puoi modificare il file /etc/pam.d/su per consentire su senza password. Consulta questa risposta .

Se hai modificato il tuo file auth al seguente, qualsiasi utente che faceva parte del gruppo somegroup potrebbe 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

[email protected]$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser
    
risposta data geirha 13.05.2013 - 13:20
87

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

su - <username> -c "<commands>"
  • - simulerà un accesso 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.

    
risposta data Caleb 07.04.2015 - 02:01
6

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

  

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

Usa:

ps -ef | grep <command-name>

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

ps aux | grep <command-name>
    
risposta data Samuel Åslund 11.05.2017 - 20:30
2

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

    
risposta data liime 06.05.2017 - 10:35

Leggi altre domande sui tag