Wenn man erst mal längere Zeit mit Ubuntu gearbeitet hat wird man sich daran gewöhnt haben keinen Root Account mehr zu besitzen. Das bedeutet auf einem normalen Desktop-Rechner einfach, dass man sich ein Passwort weniger merken muss und trotzdem mit Hilfe von sudo und su alles machen kann, was man auch mit einem Root Account machen kann.
Deswegen möchte man dies vielleicht auch auf anderen Distributionen so handhaben. Wichtig ist jedoch, dass man mindestens einen Benutzer in der /etc/sudoers stehen hat bzw. die Gruppe wheel und einen Benutzer darin welcher mit Hilfe von sudo Root-Befehle ausführen darf. Wenn man das nicht vorher macht, besitzt man keinen Account mehr mit welchem man administrative Aufgaben auf dem System ausführen kann. Mehr zur sudoers findet man sowohl in der manpage von sudoers wie auch im Ubuntuusers-Wiki.
Der Standard-Befehl zum Deaktivieren bzw. Sperren eines Accounts lautet:
passwd -l [LOGIN]
Dies kann man auch benutzen um den Root Account zu sperren:
$ sudo passwd -l root
und wenn man nun versucht sich mit seinem Root Passwort einzuloggen dann bekommt man nur noch gesagt, dass das Passwort ungültig ist:
$ su Passwort: su: ungültiges Kennwort
Man kann sich nun also nichtmehr als Root einloggen, wie es auch gewünscht ist.
Allerdings hat man damit noch mehr getan. Und zwar kann man, da der Account gesperrt ist, auch nichtmehr mit sudo in den Root Account hineinwechseln:
$ sudo su Ihr Konto ist abgelaufen. Wenden Sie sich an den Systemadministrator su: ungültiges Kennwort
Das ist eigentlich nicht so tragisch, da man mit:
$ sudo -s
auch weiterhin eine Root-Shell starten kann. Einige Daemon-Prozesse jedoch, die als Root laufen, werden beim Starten nun Probleme machen.
Unter Ubuntu ist dies deswegen anders gelöst. Zuerst entsperrt man den Root Account mal wieder, wenn man ihn wie oben beschrieben gesperrt hat. Das geht mit diesem Befehl:
$ sudo passwd -u root
Nun öffnet man die /etc/shadow mit einem Texteditor seiner Wahl zum Beispiel:
$ sudo vim /etc/shadow
und sucht die Zeile die mit „root“ beginnt, was häufig die erste sein wird. Dort entfernt man jetzt den Hash seines Root Passwortes, welcher zwischen dem ersten und dem zweiten Doppelpunkt steht:
root:$1$2z3AVhPy$.AzfO1iDPFurJnp1hh0Jm/:12345::::::
und ersetzt diesen Hash mit einem Ausrufezeichen:
root:!:12345::::::
Nun hat man genau das Verhalten, das man von Ubuntu kennt. Ein Einloggen als Root ist von nun an nichtmehr möglich. Man kann jedoch weiterhin mit:
in diesen Account hineinwechseln. Und natürlich ist es immernoch möglich mit:$ sudo su
$ sudo -s
eine Root-Shell zu öffnen oder einfach mit sudo einen Befehl als Root auszuführen.
Ist das nicht schon standardmäßig vorgegeben, wenn man kein root-Passwort eingegeben hat. (Also direkt nach der Installation von Ubuntu) 😉
Wenn man direkt in der passwd-, group- oder shadow-Datei editiert, sollte man besser die Wrapper vipw bzw. vigr verwenden. Die beinhalten nämlich einen Plausibilitätscheck, so dass man sich nicht via Syntaxfehler aus dem System aussperrt.
Z.B. so:
sudo EDITOR=emacs vipw -s
@hardy: Es geht im Artikel ja gerade um Nicht-Ubuntu Distributionen 😉
@otzenpunk: Danke für den Hinweis! Ich kannte bis jetzt nur visudo und wusste nicht, dass solch ein Syntaxcheck-Wrapper auch für die passwd, shadow und groups existiert.
auf meinem debian lenny habe ich per passwd -l root den root account deaktiviert. dennoch kann ich mir ohne probleme mit sudo su bzw sudo su – eine root shell aufrufen.
Wenn man sich dann nicht mehr, per sudo su, als root anmelden könnte, hat das ganze sudo prinzip ja keinen sinn mehr 😉
Denn durch sudo lässt du den Befehl ja mit root Privilegien, folglich als root, ausführen.
rene@kiste:~$ sudo ps -ef
UID PID PPID C STIME TTY TIME CMD
rene 5260 5259 0 16:14 pts/0 00:00:00 bash
root 5314 5260 0 16:20 pts/0 00:00:00 ps -ef
Ich weiß jetzt natürlich nicht wie du sudo konfiguriert hast.
Aber ich höre das jetzt echt zum ersten mal, soll nicht heißen das es das nicht gibt.
Finde ich aber sehr ungewöhnlich.
Mich würde Interessieren wie Sicher dies ist.
Als kleines Beispiel: VPN-Server zu Hause, alles abgesichert, was nur geht. Trotzdem hat Jemand Zugriff darauf und auch noch auf das Intranet, womit alle angeschlossenen Computer faktisch in Gefahr sind. Nicht möglich? Oh doch, man verschafft sich Zugriff über ein Programm des VPN-Servers, dann ist man automatisch der Inhaber. Danach noch „sudo -i“ und schon ist man root. Damit kann man schon etwas anfangen, denn das ganze Intranet ist für diesen User offen, inclusive die Verbindung der VPN.
Eizige Abhilfe schafft dann nur noch das Auskommentieren von sudo aus den Dateien: /etc/sudoers & /etc/sudoers.d/DATEI-nopasswd, gefolgt vom Zurücksetzen vom eventuellen root-Passwort: sudo passwd -dl root oder als root passwd -dl root. Mit einem PC, wo man ständig Veränderungen vollzieht, ist das nicht effektiv, denn man muss zumindest den sudo wieder aktivieren, aber ein Server, der 24/7 läuft, da ist es für die staatlichen und nichtstaatlichen „bösen“ Jungs und Mädels eine wirkliche Herausforderung, denn da müssten sie beweisen, dass sie das Können haben, was man von ihnen glauben soll.