Server richtig absichern - zweiten Benutzer ohne Root Rechte / Root SSH Login deaktivieren

  • Hallo zusammen,


    ich hätte mal eine Frage bezüglich der Serversicherheit.


    Wir haben auf unseren Servern ausschließlich Debian laufen. Standardmäßig wird der Root Login per SSH dann deaktiviert (+ufw+fail2ban). Man loggt sich per SSH mit dem Non-Root Benutzer ein, und wechselt per su in den root Modus. dazu muss man das Root-PW eingeben. Das m.E. nach den Vorteil, dass wenn jemand es schafft, sich Zugriff zu verschaffen, er noch an dieses Root-PW herankommen muss.


    In diversen Anleitungen im Internet ist aber zu sehen das der Non-Root benutzer in die Sudo Gruppe mit aufgenommen wird. Somit kann er mit Sudo auch mit Root Berechtigungen arbeiten. Dazu muss er sein eigenes, also das Non-Root PW eingeben.


    Machen wir hier etwas Grundsätzlich falsch, und das mit der Sudo Gruppe wäre richtig? Mir persönlich kommt es unsicherer vor, weil man ja das Root-PW niemals braucht. Also was ist hier "State of the Art"?

  • Ich persönlich würde dir das Thema SSH Public-Key-Authentifizierung ans Herz legen. Dazu den SSH Port ändern und per nftables den SSH Zugang an eine feste IP binden. Das wäre ein guter Schritt zum Thema Sicherheit

  • In diversen Anleitungen im Internet ist aber zu sehen das der Non-Root benutzer in die Sudo Gruppe mit aufgenommen wird. Somit kann er mit Sudo auch mit Root Berechtigungen arbeiten. Dazu muss er sein eigenes, also das Non-Root PW eingeben.

    Kann man machen aber ist meiner Meinung definitiv falsch. Sudo verfolgt das Ziel, dass man nicht mehr so oft mit Root Rechten arbeitet bzw. das man die Root Rechte beschränkt. Zum Beispiel soll ein Webentwickler den Webserver Dienst Neustarten dürfen aber ansonsten nichts am System oder an den anderen Diensten was machen dürfen. Dann kann man die Berechtigung in der Sudoers Datei hinterlegen. Wenn nun der Webentwickler sudo aufruft, dann wird der Befehl mit Root Rechten durchgeführt. Sudo prüft dann halt, ob der Benutzer dafür berechtigt ist.


    Bei der Installation von Sudo wird immer eine Default Gruppe sudo erstellt. Diese sudo Gruppe hat standardgemäß alle Root Rechte. Das ist notwendig, da man sich beispielsweise bei Ubuntu sich sonst aussperren würde bzw. keine Möglichkeit hätte Root zu werden, da bei Ubuntu bei der Installation kein Root Passwort vergeben wird. Wenn man aber Sudo wirklich nutzen möchte, dann sollte man auch die Sudoers Datei entsprechend anpassen und nicht alle User in die sudo Gruppe hinzufügen, da ansonsten Sudo überflüssig wäre. Zumal man dadurch auch den SSH Schutz aushebelt, dass der Root sich nicht via SSH anmelden darf. Es mag zwar auf den ersten Blick ein normaler User sein, wenn dieser aber in der sudo Gruppe ist, dann ist er quasi auch Root.

  • Ich persönlich würde dir das Thema SSH Public-Key-Authentifizierung ans Herz legen. Dazu den SSH Port ändern und per nftables den SSH Zugang an eine feste IP binden. Das wäre ein guter Schritt zum Thema Sicherheit

    Danke für die Tipps, aber ich möchte das Thema hier nicht ausschweifen lassen. Möglichkeiten den Server abzusichern gibt es ja genug und vieles wurde hier im Forum schon mehrmals durchgekaut.

    Mir gehts wirklich nur explizit um das Thema mit der Sudo Gruppe und dem zweiten Non-Root Benutzer.


    Kann man machen aber ist meiner Meinung definitiv falsch. Sudo verfolgt das Ziel, dass man nicht mehr so oft mit Root Rechten arbeitet bzw. das man die Root Rechte beschränkt. Zum Beispiel soll ein Webentwickler den Webserver Dienst Neustarten dürfen aber ansonsten nichts am System oder an den anderen Diensten was machen dürfen. Dann kann man die Berechtigung in der Sudoers Datei hinterlegen. Wenn nun der Webentwickler sudo aufruft, dann wird der Befehl mit Root Rechten durchgeführt. Sudo prüft dann halt, ob der Benutzer dafür berechtigt ist.


    Bei der Installation von Sudo wird immer eine Default Gruppe sudo erstellt. Diese sudo Gruppe hat standardgemäß alle Root Rechte. Das ist notwendig, da man sich beispielsweise bei Ubuntu sich sonst aussperren würde bzw. keine Möglichkeit hätte Root zu werden, da bei Ubuntu bei der Installation kein Root Passwort vergeben wird. Wenn man aber Sudo wirklich nutzen möchte, dann sollte man auch die Sudoers Datei entsprechend anpassen und nicht alle User in die sudo Gruppe hinzufügen, da ansonsten Sudo überflüssig wäre.

    Gut, das heißt so wie wirs machen, den zweiten Benutzer komplett ohne Sudo Rechte anzulegen und nur im Notfall dann per su+Root PW zum Root Nutzer zu wechseln, ist deiner Meinung nach korrekt =) Frag mich warum die das dann in Anleitungen mit Aufnahmen..

  • Meine "vielleicht zweifelhafte" Meinung dazu ;)

    Ob nun sudo oder su, mit beidem hast du Rootrechte bzw. um die man hier und da auch nicht drum herum kommen wird;)

    Durchgesetzt hat sich meiner Meinung schon die einzelne Ausführung von Commands mit sudo.


    Sudo bietet im Prinzip "nur" folgende Vorteile der Nachvollziehbarkeit und einen eventuell gewissenhafteren Einsatz:

    • Per sudo ist es nicht notwendig irgendwie/irgendwo das singulär vorhandene Root PW einzutippern
    • Du kannst quasi jeden Nutzer per sudo'er Datei/Gruppe einzeln verwalten und diesem Rootrechte per sudo geben
    • Du kannst für jeden Nutzer festlegen, welche z.B. Commands/Befehele erlaubt sind und welche nicht bzw. welche mit erhöhten Rootrechten ausgeführt werden dürfen -> Black/Whitelist
    • Es ist möglich, die sudo Aktivitäten zu loggen bzw. welche Commands/Befehele von einem spezifischen Nutzer ausgeführt wurden.
    • Durch das fehlen einer Rootshell, kann nicht versehentlich irgendein Befehl mit Rootrechten ausgeführt werden bzw. es muss erst sudo geschrieben werden. (Jedoch mit sudo -i, sudo su bekommt man auch eine Login/Rootshell. Das kann ab und an auch praktisch sein ;))

    Ich würde z.B. den Rootnutzer komplett deaktivieren.

    Genau und zum Thema SSH würde ich ebenfalls zu einem Public/Private Key greifen und am besten einen PW-Login im SSH Daemon/Server verbieten, wenn es möglich ist bzw. auch einen Rootlogin.


    • Per sudo ist es nicht notwendig irgendwie/irgendwo das singulär vorhandene Root PW einzutippern

    Ich empfinde das eher als Nachteil, da der Nutzer dann ja ohne zusätzliche "Barriere" sudo ausführen kann?


    Ich würde z.B. den Rootnutzer komplett deaktivieren.

    Dann hast du einen Non-Root Benutzer, der aber in der Sudo Gruppe drin ist und ohne zusätzliches Passwort per Sudo alles ausführen kann? Ist das nicht unsicherer?

  • Ob nun sudo oder su, mit beidem hast du Rootrechte bzw. um die man hier und da auch nicht drum herum kommen wird;)

    Das ist nicht ganz richtig. Sudo hat rein gar nichts mit dem Befehl su zu tun und ist damit nicht vergleichbar. Mit su wechselst du einfach nur den Benutzer. Das kann der Root sein aber auch irgendein anderer Benutzer. Wichtig ist allerdings, dass du dafür entsprechend das Kennwort des Benutzers brauchst. Ist also wie als wenn du in Windows den Benutzer wechselst.


    Sudo ist ein Tool, mit dem der Benutzer einen Befehl mit dem Namen und den Berechtigungen von Root ausführt. Vorausgesetzt der Benutzer ist dafür Berechtigt. Der Benutzer muss also nicht das Kennwort von Root wissen!


    Das ist halt doch ein großer Unterschied. ;)

  • Ich empfinde das eher als Nachteil, da der Nutzer dann ja ohne zusätzliche "Barriere" sudo ausführen kann?

    Der Benutzer soll doch sudo verwenden, falls er höhere Berechtigungen benötigt. Allerdings sollte er nur für die Befehle berechtigt sein, die der Benutzer für seine Arbeit benötigt. Die Berechtigungen werden in der Soduers Datei definiert. Das ist das eigentliche Ziel von Sudo.


    Klar, wenn man den Benutzer in die sudo Gruppe hinzufügt, also die Default Gruppe, welche vollständige Root Rechte hat, dann ist klar, dass dann Sudo nicht nur überflüssig ist, sondern auch noch potentiell eine Gefahr darstellt. Denn nun kann der normale Benutzer Befehle mit Root ausführen ohne das Kennwort von Root zu wissen. Deshalb sollte man das eigentlich nicht machen. Die Benutzer in der Gruppe sudo kann man also quasi auch als Root darstellen.

  • Das ist nicht ganz richtig. Sudo hat rein gar nichts mit dem Befehl su zu tun und ist damit nicht vergleichbar. Mit su wechselst du einfach nur den Benutzer. Das kann der Root sein aber auch irgendein anderer Benutzer. Wichtig ist allerdings, dass du dafür entsprechend das Kennwort des Benutzers brauchst. Ist also wie als wenn du in Windows den Benutzer wechselst.


    Sudo ist ein Tool, mit dem der Benutzer einen Befehl mit dem Namen und den Berechtigungen von Root ausführt. Vorausgesetzt der Benutzer ist dafür Berechtigt. Der Benutzer muss also nicht das Kennwort von Root wissen!


    Das ist halt doch ein großer Unterschied. ;)

    Das stimmt :) Mit su wechselt man tatsächlich nur einen spezifischen Nutzer. Hier hatte ich jedoch explizit "su" angenommen ohne irgendwelche NutzerID/Nutzer als Parameter. Somit wird per Default der Rootnutzer genommen -> man pages "... When called with no user specified, su defaults to running an interactive shell as root. ..."

  • Der Benutzer soll doch sudo verwenden, falls er höhere Berechtigungen benötigt. Allerdings sollte er nur für die Befehle berechtigt sein, die der Benutzer für seine Arbeit benötigt. Die Berechtigungen werden in der Soduers Datei definiert. Das ist das eigentliche Ziel von Sudo.


    Klar, wenn man den Benutzer in die sudo Gruppe hinzufügt, also die Default Gruppe, welche vollständige Root Rechte hat, dann ist klar, dass dann Sudo nicht nur überflüssig ist, sondern auch noch potentiell eine Gefahr darstellt. Denn nun kann der normale Benutzer Befehle mit Root ausführen ohne das Kennwort von Root zu wissen. Deshalb sollte man das eigentlich nicht machen. Die Benutzer in der Gruppe sudo kann man also quasi auch als Root darstellen.

    Ja das ist klar, aber bei dem Szenario von BarneyBurp ist der Root-User ja deaktiviert. Das heißt es müsste einen Non-Root User geben der keine Limitierungen bei Sudo hat, sonst kann man den Server ja nicht mehr richtig Administrieren :D

  • Vorausgesetzt man kann sich nicht per Passwort direkt beim root Benutzer anmelden und weder su noch sudo haben Sicherheitslücken, ist es letztenendes im direkten Vergleich meiner Meinung nach egal. Bei beiden Methoden hat man prinzipiell noch die Barriere mit einem weiteren Passwort.


    Wenn es eine "richtige" Methode geben würde, würde der Debian Installer nicht empfehlen ein root Passwort zu setzen oder es eben doch zulassen keins zu setzen wodurch der erste Benutzer seine sudo Berechtigungen bekommt.


    Ansonsten eben das, was BarneyBurp geschrieben hat. Falls ich doch mal einen root Benutzer habe, füge ich einen neuen Benutzer hinzu, daraufhin gefolgt von passwd -dl root und RootLogin no:)

  • Ich empfinde das eher als Nachteil, da der Nutzer dann ja ohne zusätzliche "Barriere" sudo ausführen kann?


    Dann hast du einen Non-Root Benutzer, der aber in der Sudo Gruppe drin ist und ohne zusätzliches Passwort per Sudo alles ausführen kann? Ist das nicht unsicherer?

    Also ja und nein. Dann ist es nicht möglich zumindest als Root direkt eine Shell zu bekommen bzw. zumindest nicht ohne z.B. sudo.
    Genau dann hat man quasi einen NonRootnutzer der mit seinem Passwort über sudo Rootbefehle ausführen kann.
    Auf deine Benutzer- bzw. allgemein Passwörter muss du allerdings so oder so aufpassen ;)


    Wenn du jetzt an jeden Nutzer deines Systems, uneingeschränkt sudo vergibst, hat jemand mit diesem einen Passwort leichtes spiel. Andersherum wäre es aber auch problematisch, wenn dein einer Nutzer der nur per su zum Root werden kann ständig dein RootPW erfragt.


    Am sichersten ist es natürlich gar kein Root zu benötigen ;)

  • Also ich bin in der Regel der einzige, der irgendwelche Rootbefehle ausführen darf auf meinen Servern. Insofern sehe ich im zusätzlichen sudo-Benutzer keinen Vorteil. Root darf sich natürlich per ssh nicht anmelden, auch nicht mit Key. Der Benutzer mit dem ich mich anmelde ist ein stinknormaler User, der sich wie alle anderen auch nur per Key anmelden kann. In dem Fall sehe ich das eigentlich als sicherer an als einen Sudo-Benutzer zu erstellen, der dann praktisch root ist, weil er eh alles darf. Ich könnte natürlich hergehen und die Rootbefehle irgendwie sinnvoll auf mehrere Sudo-User aufteilen, damit wenigstens kein User alles darf, aber das ist mir für meinen Fall definitiv zu heftig.


    Ich könnte mir dann ja gleich einen Zettel an den Monitor kleben auf dem steht, welche Benutzer welche Befehle ausführen darf und am besten gleich das jeweilige Passwort dazu ;) . Da merke ich mir lieber mein 20+ stelliges root-Passwort.

  • In dem Falle ist es wohl richtig. Sudo hat in diesem Sinne keinen Sicherheitsvorteil bzw. "nur" einen Abstraktions/Tracevorteil.

    Allerdings finde ich es, selbst als Einzelnutzer eines Systems, deutlich angenehmer mit sudo zu arbeiten. Einfach um kritische Ausführungen von z.B. unbekannten Skripten zu verhindern.
    Habe ich eine Rootshell, ist schnell mal was ausgeführt was ich eventuell gar nicht beabsichtigt habe, dann halt direkt als Root.
    Natürlich muss jeder selber aufpassen und trotzdem kann mal was daneben gehen (auch mit sudo) ;)

  • In den meisten Fällen dürften wir hier ja von einem Szenario ausgehen, bei dem man sowieso Vollzugriff auf das System hat, weil es man selbst dafür verantwortlich ist bzw. den Auftrag dazu hat. Ich melde mich hier einfach mal aus dem Lager der Befürworter der Root-Shell zu Wort. Persönlich nutze ich sudo nur um eine echte Root Shell (z.B. sudo -i) zu erhalten. Andere Befehle werden so gut wie nie mittels sudo ausgeführt. Das hat einen recht simplen Grund: Die Root Shell unterscheidet sich optisch (prompt) von der Shell eines normalen Users. Entweder weil das die Distribution schon so standardmäßig ausliefert (eher die Regel) oder weil man das selbst so konfiguriert hat. Daher wird hier ja gerne eine Warnfarbe (rot) genutzt. Ich sehe also direkt, dass ich hier in einer "gefährlichen" Umgebung arbeite. Gerade wenn man (wie ich z.B.) sehr viele Systeme administriert und es im Alltag daher schnell mal dazu kommt, dass man auch sehr viele Terminals offen hat, ist ein optischer Hinweis mehr als nützlich. Ein Befehl ist sonst sehr schnell in dem falschen Terminal eingegeben. Daher kann ich aus Erfahrung sagen, dass man sich manchmal auch am besten vor sich selbst schützt, wenn man optische Hinweise hat, die man nicht so einfach ignorieren kann. Das hat man halt nicht, wenn ich einfach nur vor jeden Befehl ein "sudo" setze. Das wird auch gerne mal zur Gewohnheit und man macht es, obwohl man es gar nicht bräuchte und hat dann auf einmal ganz andere Probleme.

  • Ich melde mich hier einfach mal aus dem Lager der Befürworter der Root-Shell zu Wort.

    Hier ebenso. Ich nutze auch lokal tmux, aber auf den Servern traditionell screen, mit entsprechend eindeutig unterschiedlicher Farbgebung.

    »Hauptsache BogoMIPS!«

    Fleischfresser

  • Und auch bei mir ist es so.

    Wenn ich auf den Servern eingeloggt bin, dann zu administrativen Dingen.

    um meine Sicherheit zu erhöhen, habe ich einen normalen User angelegt und den Rootlogin

    abgeschaltet. Den brauche ich nur für den Login (mit keys), sonst nicht. Danach wechsel ich mit su in denn Rootmodus.

    Sudo macht Sinn wenn man mehrere verschiedene User/Teiladmin auf dem System hat, die administrative Dinge machen dürfen.

    Aber wenn einer alleine als root auf dem System ist, sollte man schon wissen welche Befehle man ausführt und was sie bewirken.

    Und sich nicht selber kontrollieren müssen oder über ein Programm.

    It's me, only me, pure michi 🦆

    RS 1000 SAS G8 | Cyber Quack

    VPS: 50 G7 |B Ostern 2017|200 | Karneval | piko

    WH: SmallEi | Adv17 Family |4000 SE|1000 SE