Führen Sie einen einzelnen Befehl als anderer Benutzer aus. Einschränkungen für „sudo“

Führen Sie einen einzelnen Befehl als anderer Benutzer aus. Einschränkungen für „sudo“

Ich arbeite an einem Rechner, auf dem ich keinen Root-Zugriff habe, aber es gibt eine Liste zulässiger sudoBefehle. Einer dieser Befehle ist /bin/su - foouser. Ich kann also eingeben sudo su - foouserund erhalte eine interaktive Shell als foouser. Dann kann ich einige Dinge als ausführen foouser.

Das Problem ist, dass es foousersich um einen gemeinsam genutzten Benutzer/eine gemeinsam genutzte Shell handelt, die zum Starten bestimmter wichtiger Produktionsprozesse verwendet wird. Ich kann sie nicht einfach anpassen oder so einrichten, wie ich es möchte. Und ich sollte nicht konsequent darin arbeiten, was meine Terminals und den Befehlsverlauf zwischen denen aufteilt, bei denen ich als ich selbst angemeldet bin, und denen, bei denen ich angemeldet bin foouser.

Was ich wirklich gerne hätte, wäre eine Möglichkeit, einen einzelnen Befehl als auszuführen foouser, ihn zu blockieren, stdout und stderr wie üblich in meine Shell auszugeben und dann zurückzukehren, wobei ich immer noch als ich selbst angemeldet bin (und nicht als foouser). Dies könnte beispielsweise in einem Skript gekapselt werden, das as_foo barden Befehl barals ausführt foouser, stdout und stderr ausgibt, den Rückgabecode von zurückgibt barund mich dann wieder in meine Shell zurückbringt.

Ich kann die Systemadministratoren bitten, die Berechtigungen zu ändern. Sie könnten beispielsweise bardie Sudo-Liste ergänzen, und dann könnte ich (glaube ich) su -cbar auf die beschriebene Weise ausführen. Aber wenn ich am nächsten Tag ausführen möchte bar2, muss ich erneut mit ihnen sprechen.

Gibt es einen Ausweg aus diesem Dilemma? Das scheint ziemlich albern, denn ich kann offensichtlich foouserso viele Befehle ausführen, wie ich will, also sehe ich keinen Unterschied in Bezug auf die Sicherheit. Ich kann einfach keinen offensichtlichen, praktischen Weg finden, dies zu ermöglichen.

Antwort1

sudo su - foouser <command>erfordert, dass Sie zumindest über eingeschränkten Root-Zugriff verfügen, um su - foouser <command>als Root ausgeführt zu werden.

sudo -u foouser <command>sudokönnen Sie in einem Schritt alles tun, was Sie möchten. Dafür ist es jedoch erforderlich, dass der Systemadministrator Ihnen auf diese Weise Zugriff auf das Konto gewährt hat foouser:

ignacio ALL=(foouser) ALL

statt so:

ignacio ALL=(root) su - foouser

Wenn Sie die Konfiguration sudoauf diese Weise durchführen, können Sie beispielsweise einen Alias ​​wie gewünscht definieren:

as_foo='sudo -u foouser'

Und indem Sie das vermeiden su -, können Sie möglicherweise weiterhin Ihre eigenen Anpassungen verwenden: Die Verwendung sudoauf diese Weise ändert nur die Benutzeridentität, behält aber HOMEden vorherigen Wert bei und liest alle Shell-Startskripte und andere Anpassungen ausdeinHome-Verzeichnis anstelle von foouser's.

(Natürlich müssen diese Skripte dann auch für den anderen Benutzer lesbar sein, und alle gemeinsam genutzten Skripte, die Sie möglicherweise ausführen, sollten besser foouserausdrücklich auf das Home-Verzeichnis von verweisen, als /home/foouserstatt nur $HOME.)

Es gibt jedoch einige sudoEinstellungen, die verhindern können, dass diese Lösung funktioniert: Wenn die always_set_homeOption „sudo“ in der Datei „sudoers“ festgelegt ist oder wenn env_resetdie Option festgelegt ist, ohne sie HOMEzur env_keepListe hinzuzufügen, HOMEwird sie trotzdem zurückgesetzt. Versuchen Sie in einer solchen Situation, die -EOption zum sudoBefehl hinzuzufügen, um explizit die Beibehaltung Ihrer Umgebung anzufordern.

Und wenn Sie wirklich etwas mit der Umgebung ausführen möchten, die foousergenau so eingestellt ist wie bei der Anmeldung als foouser(also das Äquivalent von sudo su - foouser), fügen Sie die -iOption hinzu, dies ausdrücklich anzufordern. Dies sudo -i -u foouserist ein 100 % genauer Ersatz für sudo su - foouser.

Wenn Sie ein System mit einer so alten Version von finden, sudodass diese Option nicht vorhanden ist -i, verwenden Sie stattdessen die -HOption mit sudo: Dies ist kein perfekter Ersatz, könnte aber ausreichen. Eine so alte Version von sudowird wahrscheinlich auch einige bekannte sicherheitsrelevante Fehler aufweisen, sodass es sich trotzdem lohnt, sie zu aktualisieren.

Sie können es sudo -lals Sie selbst verwenden, um genau zu sehen, wie Ihr Sudo-Zugriff definiert ist und welche Sudo-Optionen (auch als Standardeinträge bezeichnet) für Sie wirksam sind.

Antwort2

Übergeben Sie zusätzliche Argumente an su.

sudo su - foouser sh -c 'echo $USER'

verwandte Informationen