Frage Führen Sie ein Shell-Skript als einen anderen Benutzer ohne Kennwort aus


Ich möchte ein Skript von der Haupt-Ubuntu-Shell als ein anderer Benutzer ausführen, der kein Kennwort 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 dieses Skript jetzt wirklich unter diesem Benutzer läuft.

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


206
2018-05-13 10:55


Ursprung




Antworten:


Du kannst das mit machen su oder sudo, keine Notwendigkeit für beides.

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

Sie können das ändern /etc/pam.d/su Datei zu erlauben su ohne Passwort. Sieh dir das an Antworten.

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

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

Dann vom Terminal aus testen

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

287
2018-05-13 11:20



Kannst du bitte hinzufügen, wie es mit nur geht su auch? - rubo77
Das fragt mich nach einem Passwort :-( - IanVaughan
@IanVaughan, Mit der Standardkonfiguration (von sudo) werden Sie nach einem Passwort gefragt, es sei denn, Sie führen es als root aus. Sie können sudo so konfigurieren, dass "Benutzer A cmd C als Benutzer B ausführen kann, ohne dass ein Passwort erforderlich ist". Sehen help.ubuntu.com/community/Sudoers - geirha
Ich werde nach einem Passwort gefragt, wenn ich dies als root ausführe. Irgendwelche Vorschläge? - Nate
@Nate, hast du ein paar Änderungen an der sudoers-Datei vorgenommen? Die Standardkonfiguration ermöglicht es root, alles wie jeder andere auszuführen, ohne ein Passwort zu benötigen. - geirha


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 bin ich nicht in der Lage, Ruby mit Rvm mit dieser Methode zu installieren, aber das ist wahrscheinlich nicht verwandt.


87
2018-04-07 00:01



Ich musste hinzufügen sudo zum Anfang sonst hat es mich nach meinem Passwort gefragt. - IanVaughan
Das geht definitiv nicht ohne sudo. Mit Sudo funktioniert es zum Beispiel: sudo su - www-data -c "touch /tmp/test"hat erfolgreich eine Datei als www-data erstellt - rubo77
Um "su" zu verwenden, benötigen Sie das root-Passwort, der Punkt "sudo" soll das vermeiden. Wenn Sie das root-Passwort mit "su" wie oben verwenden, sollte es gut funktionieren. - Samuel Åslund


Die obigen Antworten sind für mich aber sehr nützlich um die eigentliche Frage zu beantworten ...

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

Benutzen:

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>

6
2018-05-11 18:30





Ich hatte das gleiche Problem. Einfach den Befehl eingeben screen -dmS testscreen Dadurch wird ein separater Bildschirm auf Ihrem nicht-sudo-Benutzerkonto erstellt und Sie können ihn dann protokollieren und prüfen, ob dieser Bildschirm vorhanden ist screen -ls.


2
2018-05-06 08:35