• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] kate als root

Escho

Advanced Hacker
Hallo

Ich möchte die xorg.conf mit kate verändern. Dabei stelle ich folgendes Verhalten fest:

1. sudo
Code:
sudo kate /etc/X11/xorg.conf
root's password:
kate: cannot connect to X server
2. su
Code:
su
Passwort:
kate /etc/X11/xorg.conf
keine weitere Reaktion

3. kdesu
Code:
kdesu kate /etc/X11/xorg.conf
Es tut sich ein Fenster zur Passworteingabe auf, danach startet kate problemlos

Warum funktioniert das mit kdesu, mit den anderen beiden Möglichkeiten aber nicht?

Edgar
 
A

Anonymous

Gast
Escho schrieb:
Warum funktioniert das mit kdesu, mit den anderen beiden Möglichkeiten aber nicht?

1. Um irgend etwas auf auf der grafischen Oberfläche anzuzeigen muss das Enviroment des Befehls den entsprechenden x-Server kennen.
Das steht in der exportierten Variable DISPLAY

Wenn root also aus der Konsole etwas anzeigen will muss die DISPLAY Variable gesetzt und exprotiert sein. typisch
Code:
export DISPLAY=":0"

2. Damit nicht von überall und von jedem einfach so ein Fenster auf dem X-Server geöffnet werden kann, ist das typischerweise gesperrt, und nur dem User auf dem eigenem Server erlaubt. Dieser User ( also der User der einen Windowsmanager auf dem X-Server betreibt) kann eine weitere Freigabe für den X-Server erteilen, dass zB andere User oder User von anderen Rechnern aus Fenster auf dem X-Server anzeigen können. Der Befehl dazu ist xhost
Code:
xhost +
zB gibt den Xserver ohne irgendwelche Beschränkungen für alles frei.

3. Andere User können also im Normalfall kein Fenster öffnen ohne das der User der den X-Server benutzt es ihnen mit xhost erlaubt hat. Beim wechsel auf root-Konsolen gibt es einige Befehle die diese Freigabe gleich automatisch mit koonfigurieren. ZB kdesu, Deshalb ist es so, das manchmal root aus der Konsole etwas anzeigen kann, aber nicht mit Sicherheit immer. Es kommt eben darauf an wie letztlich die Konsole für Root geöffnet und konfiguriert wurde.

kdesu funktioniert also desshalb, weil dort vorher immer automatisch mit xhost (oder verlgeichbarer Funktion in einer Programmiersprache) eine Freigabe erfolgt, Dann wird die Rootkonsole gestartet und konfiguriert, in dieser Umgebung dann wird die DISPLAY Variable richtig gesetzt, und nach dem Beenden der Rootkonsole dann mit xhost die Berechtigung wieder entzogen wird.

Ähnliches läuft auch ab bei ssh bei Nutzung der Optionen -X und -Y das sogenannte "X11 forwarding" (hier läuft das nur etwas komplierter ab, da die Freigabe des eigenen X-Servers über das Netz auf einen anderen Rechner erfolgt, und das ganze noch innerhalb von ssh getunnelt wird)


robi
 
OP
Escho

Escho

Advanced Hacker
Oder zusammenfassend: Bleib weg von einem XServer, wenn du als root unterwegs sein willst. Danke für die prima Erklärung. Da werde ich in morgen ein bißchen mit "export" spielen, um meine Neugier zu befriedigen. ;)

Edgar
 
OP
Escho

Escho

Advanced Hacker
Ich blick das nicht ganz:
Code:
~> xhost +
access control disabled, clients can connect from any host
~> sudo kate
root's password:
kate: cannot connect to X server
Ich habe mit xhost + alles freigegeben, trotzdem erkennt root den XServer nicht. Display ist aber exportiert:
Code:
# export
...
declare -x DISPLAY=":0.0"
...
Warum funktioniert das nicht?

Edgar
 
A

Anonymous

Gast
Escho schrieb:
Warum funktioniert das nicht?
Das ist recht verwirrend aber mit ein paar einfachen Tests kannst du sehr schnell herausfinden was da abläuft, setz mal folgende Befehle ab und vergleiche mal die Ausgabe von der jeweils bekannten Shellumgebung.
Code:
env
sudo env
Es ist also während des abarbeitens des Befehls hinter sudo sogut wie kein Enviroment gesetzt.
Zwar sagt
Code:
rob@priv0001:~> sudo echo $DISPLAY
:0
Aber das ist eine Täuschung, kannst du ganz leicht erkennen.
Code:
rob@priv0001:~> sudo echo "$DISPLAY $USER"
:0 rob
echo hier als root ausgeführt und dennoch zeigt er den USER als rob und nicht als root :schockiert: :schockiert: :schockiert:

Die Erklärung dazu ist ganz einfach, die Variablen werden schon ersetzt während des Programmaufrufes, und dieser Programmaufruf erfolgt noch unter dem User und nicht als root. ;) root zeigt dabei nur an was der User für Variablen gesetzt hat. :???:

bei
Code:
sudo bash
wird zwar eine komplette Bashumgebung aufgesetzt, allerdings auch hier ohne DISPLAY
Wenn du also DISPLAY nicht explizied setzt kann root mit sudo auf dem x-Server nichts anzeigen.
explizied setzen könnte man jetzt zB so hier versuchen.
Code:
sudo DISPLAY=":0";kate
mit dem Ergebniss das rumgemeckert wird das der Befehl DISPLAY nicht gefunden wird und kate dann zwar geöffnet wird, allerdings nicht als root. (kate wird dann schon wieder von der ursprünglichen Shell ausgeführt, es sind also bei sudo so einfach gar keine Kommandoverknüpfungen möglich) :???: :???: :???: :???:

Bleibt also nur der ganz große Umweg wenn man das wirklich so in einer Zeile mit sudo machen will, zB so hier
Code:
sudo bash -lc 'export DISPLAY=:0 ;kate'

Und was lernen wir nun daraus: sudo ist ein sehr gewöhnungsbedürftiges und dummes Tool. ;) ;) ;) ;)
für einfache Shellaufrufe gedacht für Grafische Programme ungeeignet, dafür gibt es ja dann auch kdesu ( bei gnome sollte es auch was geben.)

robi
 
OP
Escho

Escho

Advanced Hacker
Ich denke, ich kann es soweit nachvollziehen, warum sudo hier nicht so ohne weiteres zum Erfolg führt. Nun aber: what about su? :???:
Code:
~> xhost +
access control disabled, clients can connect from any host
~> su
Passwort:
# echo $DISPLAY
:0.0
# echo $HOME
/root
die Variable DISPLAY ist exportiert und das sogar als root.
Code:
# kate /etc/X11/xorg.conf
tut aber trotzdem nichts. Wenn ich in der Systemüberwachung nachschaue, kann ich erkennen daß ein Prozess mit dem Namen kate unter dem Benutzer root läuft. Es tut sich aber nichts und ich muß in der Konsole den Prozess mit Strg+Z stoppen, um zum Eingabepromt zurückzukommen.
Was hab ich denn hier übersehen?

Edgar
 
A

Anonymous

Gast
na nun gut nun haben wir sudo "madig" gemacht, jetzt nehmen wir uns su vor ;)

nimmst du nur su ohne die Option "-" oder "-l" oder "--login" (weitere Störoptionen könnten "-m" "-p" sein, nicht getestet)
dann erhältst du schon mal eine wunderbares Misch-Masch und keine saubere Umgebung. Es wird die aktuelle Userumgebung genommen, geclont und einiges umgestellt aber längst nicht alles und nicht wirklich sauber und nicht alle Variablen werden wirklich richtig auf den anderen User oder auf Root umgelegt. Das betrifft uA solche Variablen wie INPUTRC LOGNAME MAIL PATH TEXINPUTS USER und andere mehr, die danach immernoch auf den alten Werten stehen bleiben.
Einige dieser Variablen greifen dann auf versteckte Verzeichnisse im Home des alten Users zu und dort hat der normale User schonmal keine richtigen Berechtigungen, und root fühlt sich dort auch nicht wohl. Also ist su ohne weitere Option schon mal mit Vorsicht zu genießen. In diesem Fall hier hätte es den Vorteil, das das aktuelle Verzeichnis (also PWD) gleich beibt und die notwendige DISPLAY Variable mit nach root übernommen wird. Aus oben genannten Gründen sollte man jedoch (nicht zuletzt wegen der für root wichtigen anderen PATH Variableinhalte) möglichst immer mit kompletten Login also zB mit "-" zu anderen Usern oder zu root wechseln.

Nun kenne ich kate nicht sonderlich und arbeite auch nicht damit, und kenne die Tools, Libarys und Systeme überhaupt nicht auf die es aufbaut. (mein Editor für fast alles im System ist vim). Mir ist aber bekannt, das kate zB mit Session arbeitet und diese auch abspeichert, wahrscheinlich noch mehr von solchen temporären Gezeugse. Eventuell hängt es daran das es bei dir nicht wirklich funktioniert. Bei mir dauert es zwar etwas länger, er bringt mir auch Errormeldungen wie
Code:
kio (KSycoca): ERROR: No database available!
zeigt mir aber dann doch ein kate-Fenster nachdem ich mit su auf root gewechselt bin. Wie aber aus dieser Fehlermeldung schon zu ersehen, hängt das ganze dann schon wieder an der KDE-Umgebung, und da arbeitet dieser Rechner hier noch mit einer alten 3.5er, Das kann bei dir mit irgend einer 4er schon ganz anders aussehen.

Escho schrieb:
Es tut sich aber nichts und ich muß in der Konsole den Prozess mit Strg+Z stoppen, um zum Eingabepromt zurückzukommen.
Vielleicht hängt es auch daran, Strg+Z ist normalerweise auf
Code:
susp = ^Z
gesetzt, Damit hältst du den Befehl einfach an, er steht einfach sinnlos im Hintergrund und blockiert dir eventuell wichtige oder unwichtige Dateien für die Konfiguration von kate.
Solche Prozesse entweder gleich mit STRG+C (entspricht kill 15) beenden oder nach dem suspendieren dann mit kill %1 oder ähnlichen abschießen. Wenn du da mehrere Prozesse so suspendiert hast, dann schau mal in der entsprechenden Bash mit jobs nach ob da nicht noch ein paar Prozesse mehr da hinten in der Ecke rumliegen. ;)

prinzipell sollte also kate nach dem wechsel mit su zu root gehen, bei mir geht es auch.

besser währe der Wechsel mit
Code:
su -
danach müsstest du zwar die DISPLAY noch setzen und exportieren aber dann bist du wirklich richtiger root. Dann dürften solche Probleme eigentlich nicht aufkommen. Aber es bleibt die Aussage für solche Wechsel zu arbeiten auf der X-Oberfläche ist kdesu der richtige Befehl.

robi
 
OP
Escho

Escho

Advanced Hacker
Nur kurz als Zwischeninfo:
Code:
su -l
und die Sache klappt. :up: Das schaue ich mir morgen noch einmal etwas genauer an und gebe dann "Rapport". Vielen Dank erstmal.

Edgar
 
OP
Escho

Escho

Advanced Hacker
So, ich habe mir das alles jetzt noch einmal angesehen und denke, daß es zu dem Gesagten eigentlich nur mehr wenig hinzuzufügen gibt.
Vielleicht ist folgendes noch interessant: Su funktioniert bei mir erst seit KDE 4 nicht mehr so, wie ich es noch von KDE 3.5 gewohnt war. Damals habe ich wegen meines Mausartikels http://www.linupedia.org/opensuse/Logitech_MX1000 (man beachte den korrekten Genitiv) andauernd in der xorg.conf herumgebastelt, und zwar mit kate. Und damals hat das noch mit su anstandslos geklappt.

Aus meiner kleinen Anfrage hat sich ein richtiger Lehrgang entwickelt, in dem ich Dinge erfahren habe, die sonst nicht so einfach zu finden sind.
Ich ziehe meinen (virtuellen) Hut vor dir, Robi! :up:

Edgar
 
Oben