Vraag Voer een shell-script uit als een andere gebruiker zonder wachtwoord


Ik zou graag een script van de hoofd-ubuntu-shell willen uitvoeren als een andere gebruiker zonder wachtwoord.

Ik heb volledige sudo-privileges, dus ik heb dit geprobeerd:

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

Dan moet ik mijn wachtwoord invoeren, maar ik weet niet zeker of dat script nu echt onder die gebruiker draait.

Hoe kan ik bevestigen dat het script nu echt onder die gebruiker wordt uitgevoerd?


206
2018-05-13 10:55


oorsprong




antwoorden:


U kunt dat doen met su of sudo, geen behoefte aan beide.

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

De relevante delen van 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 kan alleen van gebruiker veranderen zonder een wachtwoord op te geven als je root bent. Zie Caleb's antwoord 

U kunt de /etc/pam.d/su bestand om toe te staan su zonder wachtwoord. Zie dit antwoord.

Als u uw auth-bestand hebt gewijzigd in het volgende, elke gebruiker die deel uitmaakte van de groep somegroup kon su naar otheruser zonder een wachtwoord.

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

Test vervolgens vanaf de terminal

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

287
2018-05-13 11:20



Kun je alsjeblieft toevoegen hoe je het doet met alleen su te? - rubo77
Dit vraagt ​​me om een ​​wachtwoord :-( - IanVaughan
@IanVaughan, met de standaardconfiguratie (van sudo), wordt u om een ​​wachtwoord gevraagd, tenzij u het als root uitvoert. U kunt sudo zo configureren dat "gebruiker A cmd C als gebruiker B mag uitvoeren zonder een wachtwoord te vereisen". Zien help.ubuntu.com/community/Sudoers - geirha
Ik word om een ​​wachtwoord gevraagd als dit als root wordt uitgevoerd. Suggesties? - Nate
@ Nate, heb je wat wijzigingen aangebracht in het sudoers-bestand. De standaardconfiguratie staat root toe om alles als iedereen te draaien zonder een wachtwoord te vereisen. - geirha


Als je su in plaats van sudo wilt gebruiken, denk ik dat je zoiets als dit kunt gebruiken:

su - <username> -c "<commands>"
  • -  simuleert een login van de opgegeven gebruiker
  • -c  vertelt het dat je een commando wilt uitvoeren

ps. Helaas kan ik robijn niet installeren met rvm met deze methode, maar dat is waarschijnlijk niet gerelateerd.


87
2018-04-07 00:01



Ik moest toevoegen sudo tot het begin anders vroeg het me om mijn wachtwoord. - IanVaughan
Dit werkt absoluut niet zonder sudo. met sudo werkt het, bijvoorbeeld: sudo su - www-data -c "touch /tmp/test"succesvol een bestand gemaakt als www-data - rubo77
Om "su" te gebruiken, hebt u het root-wachtwoord nodig, het punt van "sudo" is om dat te voorkomen. Als je het root-wachtwoord gebruikt met "su" zoals hierboven, zou het goed moeten werken. - Samuel Åslund


De bovenstaande antwoorden zijn erg nuttig voor mij maar om de eigenlijke vraag te beantwoorden ...

Hoe kan ik bevestigen dat het script nu echt onder die gebruiker draait?

Gebruik:

ps -ef | grep <command-name>

De uitvoer moet uw script bevatten en de daadwerkelijke gebruiker die het uitvoert. Mensen op BSD-achtige systemen, b.v. MAC kan soortgelijke informatie vinden met:

ps aux | grep <command-name>

6
2018-05-11 18:30





Ik had hetzelfde probleem. Typ gewoon het commando screen -dmS testscreen dit zal een vrijstaand scherm creëren op uw niet-sudo gebruikersaccount en dan kunt u het loggen en controleren of dit scherm er is screen -ls.


2
2018-05-06 08:35