Führt ein Shell-Skript als ein anderer Benutzer ohne Passwort aus

202

Ich möchte ein Skript von der Haupt-Ubuntu-Shell als ein anderer Benutzer ausführen, der kein Passwort hat.

Ich habe volle Sudoprivilegien, also habe ich folgendes versucht:

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

Dann muss ich mein Passwort eingeben, aber ich bin mir nicht sicher, ob das Skript wirklich unter diesem Benutzer läuft.

Wie kann ich bestätigen, dass das Skript jetzt wirklich unter diesem Benutzer ausgeführt wird?

    
rubo77 13.05.2013, 12:55

4 Antworten

283

Das können Sie mit su oder sudo tun, nicht für beide.

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

Die relevanten Teile von 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 kann den Benutzer nur wechseln, ohne ein Passwort anzugeben, wenn Sie root sind. Siehe Calebs Antwort

Sie können die /etc/pam.d/su -Datei ändern, um su ohne Passwort zuzulassen. Siehe Antwort .

Wenn Sie Ihre Auth-Datei wie folgt geändert haben, könnte jeder Benutzer, der Teil der Gruppe somegroup war, su bis otheruser ohne ein Passwort verwenden.

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

Testen Sie dann vom Terminal

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

Wenn du su anstelle von sudo verwenden willst, glaube ich, dass du so etwas verwenden kannst:

su - <username> -c "<commands>"
  • - simuliert eine Anmeldung des angegebenen Benutzers
  • -c sagt, dass Sie einen Befehl
  • ausführen möchten

ps. Leider kann ich Ruby mit rvm nicht mit dieser Methode installieren, aber das ist wahrscheinlich nicht verwandt.

    
Caleb 07.04.2015 02:01
6

Die obigen Antworten sind mir sehr nützlich, aber um die eigentliche Frage zu beantworten ...

  

Wie kann ich bestätigen, dass das Skript jetzt wirklich unter diesem Benutzer ausgeführt wird? -

Verwenden:

ps -ef | grep <command-name>

Die Ausgabe sollte Ihr Skript und den tatsächlichen Benutzer enthalten, der es ausführt. Leute auf BSD-ähnlichen Systemen, z.B. MAC kann ähnliche Informationen finden mit:

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

Ich hatte das gleiche Problem. Geben Sie einfach den Befehl screen -dmS testscreen ein, dies erzeugt einen getrennten Bildschirm in Ihrem nicht-sudo Benutzerkonto und Sie können ihn dann protokollieren und prüfen, ob dieser Bildschirm von screen -ls angezeigt wird.

    
liime 06.05.2017 10:35

Tags und Links