Verwendung von su mit Befehlen


4

Ubuntu Server 12.04

Auf einem Remote-Server, in den ich ssh einsetze, habe ich einen speziellen Benutzer eingerichtet mit:

sudo adduser --system --disabled-login --disabled-password --group suser

um einige Wartungsfunktionen auszuführen. Gelegentlich nehme ich an einer Anmeldesitzung teil für suser:

sudo su -l suser -s /bin/bash

um einige aufgaben zu erledigen ... allerdings möchte ich in der lage sein einige git befehle auszuführen über:

sudo su suser -c <COMMAND>

von meinem realen Benutzer und keine Anmeldung an den Benutzer.

Leider konnte ich nicht feststellen, wie ich das mache . Ich habe die einzigen Möglichkeiten ausprobiert, die für mich sinnvoll sind:

sudo su suser -c git clone https://example.com/repos/project.git
sudo su suser -c "git clone https://example.com/repos/project.git"
   or even
sudo su suser -c mkdir /home/suser/test
sudo su suser -c "mkdir /home/suser/test"

aber nichts passiert und ich komme zur Eingabeaufforderung zurück. Kann mir jemand helfen oder erklären, warum dies nicht möglich ist?

Antworten:


5

Das Problem ist, dass susermit /bin/falseals Standard-Shell erstellt wurde. Wenn Sie versuchen, Befehle als suserdurch sudoauszuführen, versucht das System daher, sie unter Verwendung /bin/false/einer Shell auszuführen, die keine echte Shell ist, und schlägt fehl. Sie können entweder eine Shell für suserfestlegen oder diese bei der Ausführung in der Befehlszeile angeben sudo. Alternativ können Sie verwenden sudo‚s - -uOption.

  1. Verwendung -u:

    sudo -u suser mkdir /home/suser/foo

    Dies funktioniert, weil standardmäßig sudoverwendet wird /bin/bash(oder was auch immer Sie als Standard festgelegt haben $SHELL). Daher wird ein Befehl ausgeführt, der suserjedoch verwendet wird bash, sodass der Befehl korrekt ausgeführt wird.

  2. Set suser's Standard-Shell:

    sudo chsh suser 

    Geben Sie /bin/bash(oder was auch immer Sie bevorzugen) in die erscheinende Eingabeaufforderung ein. Sie sollten nun in der Lage sein, Befehle wie folgt zu starten suser:

    sudo su suser -c "mkdir /home/suser/test"
  3. Setze die Shell explizit:

    sudo su suser -s /bin/bash -c "mkdir /home/suser/test"

Das war's ... facepalm Ich hatte den falschen Eindruck, dass ich, da ich es nicht getan -lhabe, die aktuelle Shell und Umgebung beibehalten habe. Vielen Dank!
JDex
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.