Frage Sudo als anderer Benutzer und Laufbildschirm


Habe heute herausgefunden, dass der laufende Bildschirm als anderer Benutzer, in den ich sudo eintrete, nicht funktioniert!

d.h.

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails

Ich habe ein Skript, das als "Monitor" -Benutzer läuft. Wir führen es in einer Bildschirmsitzung aus, um die Ausgabe auf dem Bildschirm zu sehen. Das Problem ist, dass wir eine Anzahl von Benutzern haben, die sich mit ihrem eigenen Konto einloggen (d. H. Bob, James, Susie, etc ...) und dann sudo in den "Monitor" -Benutzer. Ihnen Zugriff auf den Benutzer "Monitor" zu gewähren, kommt nicht in Frage.


150
2018-02-25 15:07


Ursprung


Ist das der Fehler, den Sie bekommen? "Ihr Terminal kann nicht geöffnet werden" / dev / pts / 0 '- bitte überprüfen. " - Jim
Ja, das ist der eine. Ich verstehe, warum es passiert, aber gibt es einen Workaround? - luckytaxi
Ein Kommentar zu deinen Befehlen - ich sehe immer wieder Leute rennen sudo su "user" -. Warum nicht benutzen? sudo -u user -s? - Andrew Aylett
@Jim: +1 für die fehlende Fehlermeldung. - Dennis Williamson
@ Andrew Die meisten Leute, die ich kenne, tun sudo su - Ich denke, es ist genau das, woran sich die Leute gewöhnen (in meinem Fall ist es, weil Sie keine Sudo-Flaggen kennen müssen.) sudo su - Ich glaube nicht, dass ich jemals die Sudo-Manpage gelesen habe :) - voretaq7


Antworten:


Versuche zu laufen script /dev/null als der Benutzer Sie su vor dem Start Bildschirm - es ist ein Ghetto kleiner Hack, aber es sollte Bildschirm glücklich machen.


220
2018-02-25 16:46



Re: Sicherheitsimplikationen, keine, die mir bekannt sind (aber das heißt nicht, dass es keine gibt :) - IIRC dies beruht auf einem Nebeneffekt von "Skript" Öffnen eines neuen Endgeräts (wie der Benutzer es aufruft) und da Sie die Ausgabe des Skripts an / dev / null senden, gibt es nichts zu erfassen. Es ist auch definitiv sicherer als das Hinzufügen von Benutzern zu der Tty-Gruppe (IMHO) - voretaq7
@nalply Ehrlich gesagt, sollten Sie nicht mehrere Shells verwirrend finden, wenn Sie ein Unix-Systemadministrator sind - das heißt, script kann zum Starten verwendet werden screen. Dann müssen Sie nur zweimal (einmal für screeneinmal für su). (Dies ist etwas, das script Manpage kann für Sie klären, wenn Sie sich die Zeit nehmen, es zu lesen ...) - voretaq7
Oder lauf einfach sudo -u bob script -q -c 'screen -dr myscreen' /dev/null. Dann haben Sie nur ein Terminal zum Verlassen / Trennen von. - Andy Shulman
Danke, das hat mich gerettet. Aber warum repariert es das? Von dem, was ich verstehe, druckt alles von stdout bis ... nirgends. Und das behebt irgendwie den Bildschirm. - sudo
@sudo Um sein Ding zu machen script öffnet ein eigenes Gerät, das dem Benutzer gehört, der es ausgeführt hat (schau rein) /dev und Sie werden es nach dem Ausführen sehen script). screen dann ergreift das tty-Gerät (das dem laufenden Benutzer gehört) screen Es hat also keine Probleme, darauf zuzugreifen. Es ist ein totaler Hack-Job, aber es funktioniert. Betrachtet man einige meiner Maschinen, scheint es, dass neue Bildschirmversionen scheinen, setuid-root zu installieren, was auch funktioniert, aber bedeutet, dass Sie eine andere setuid-root-Binärdatei haben, die einige Leute zu Recht ungemütlich macht. - voretaq7


Ich verwende eine Wrapper-Funktion um screen für die Benutzer, die ich sudo su zu. Dies ist die Wrapperfunktion, die ich den Benutzern hinzugefügt habe ~/.bashrc:

Funktionsbildschirm () {
  / usr / bin / script -q -c "/ usr / bin / screen $ {*}" / dev / null
}

Dadurch kann ich alle Optionen und Parameter für verwenden screen das möchte ich vielleicht benutzen. Ich überlege, diese Funktion systemweit einzurichten.


32
2017-08-13 13:45



Funktioniert perfekt. Für diejenigen, die dieses systemweit wünschen, empfehle ich, dies zu /etc/bash.bashrc hinzuzufügen - funktioniert für alle Benutzer. - Someguy123
Dies wird keine Argumente angeben, um korrekt zu screenen, ansonsten eine gute Lösung. - augurar


Vorausgesetzt, dass sie sich trotzdem in den Host einwählen, können Sie die öffentlichen SSH-Schlüssel für jeden Benutzer hinzufügen, der Zugriff auf das Monitor-Konto in der Datei ~ monitor / .ssh / authorized_keys benötigt. Dann können sie auf dem entfernten Rechner jedes Benutzers laufen

ssh -t monitor@remote.machine-Bildschirm -RD


7
2018-02-25 16:52



Dies ist ein weiterer guter Ansatz - Sie müssten erzwungene Befehle in der autorisierten Schlüsseldatei angeben (pro LuckyTaxi "gibt ihnen der Zugriff auf den 'Monitor' Benutzer ist nicht in Frage" Hinweis oben - erzwungene Befehle könnten sie auf nur beschränken Anhängen der Bildschirmsitzung) - voretaq7
Ich war nicht sicher, wie ich das in meiner Antwort ansprechen sollte, weil er sagte "ihnen Zugang zu geben ... kommt nicht in Frage", aber sagte auch "... sie sudo in den 'Monitor' Benutzer". Aber ich stimme zu, die Befehlsbeschränkung in authorized_keys sollte dafür sorgen. - Alex


Angenommen, wir sprechen über diesen Fehler:

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.

Hier ist ein One-Liner (könnte zum Beispiel als "alias gobob" verwendet werden):

sudo su - bob -c "script -c bash /dev/null"'

Erläuterung:

Dies startet eine Shell (wie die Login-Shell) als Benutzer Bob. Benutzer Bob startet script, die aufgerufen wird, um eine Bash aufzurufen (könnte Bindestrich oder Ksh ... sein) und eine Kopie der Sitzung wird weggeworfen.


6
2018-02-22 08:36





Wahrscheinlich müsste ich die Berechtigungen für das fragliche Gerät ändern oder den Monitor einer Gruppe hinzufügen, die die Erlaubnis hat, dieses Gerät zu lesen, das wäre meine erste Neigung. Aber Sie müssten die Sicherheitsaspekte abwägen.


0
2018-02-25 15:51





Du sagst du tust:

sudo su "monitor" -

Ich wundere mich über den nachlaufenden Strich. Normalerweise mache ich:

sudo su - username

Der Bindestrich (auf der su-Seite) sagt Su "die Shell zu einer Login-Shell zu machen". Das bedeutet, dass es alle üblichen Shell-Start-Skripte eingibt und Dinge wie PATH und HOME richtig einstellt.


0
2018-02-25 18:44



Nee. sudo su - username und sudo su username - mach das selbe. - Tim Ludwinski


Ich habe gerade dieses Problem getroffen. Gelöst es mit chmod +rw $(tty) vor dem Ausführen von Sudo. Das Problem mit dieser Lösung ist, dass jeder danach eine Verbindung zu Ihrem Terminal herstellen kann.


-2
2018-06-22 02:09



Klingt nach einer großartigen Lösung. - Evan Carroll
@EvanCarroll Es ist eine großartige Lösung, außer dem Teil, wo es gibt die ganze Welt Lese- und Schreibzugriff auf sein Terminal. Nur ein kleines Sicherheitsproblem - Kein Programm würde sich darum kümmern, außer natürlich alles, was Terminal-Sicherheit überprüft, bevor sie Passwörter akzeptiert (gpg zum Beispiel). Und sicher wird er nie auf einem System mit böswilligen Benutzern sein, die die tty und schnüffeln Passwörter ... - voretaq7
Sei gewarnt: Versuchen Sie das nie zu Hause! das ist gefährlich!!! - ruizpauker