André Laugks: Linux: Rechtevergabe

Hallo!

Ich muß jemanden von außen Zugang (SSH) zu meiner Linuxmaschine innerhalb meines privaten LANs legen. Dazu habe ich am Router ein Portforwording konfiguriert. Ich komme auch von außen auf die Maschine drauf.

Ich habe für diesen Zugriff einen neuen Benutzernamen (z.B. trulla) angelegt. Dieser Benutzer gehört zur Gruppe "extern". Das Verzeichnis /www/domain_fuer_außen/htdocs gehört dem Benutzer "trulla" und zur Gruppe "extern". Von dem Benutzerverzeichnis "trulla" liegt ein SymLink nach /www/domain_fuer_außen/htdocs.

Bsp:

/etc                                root      root
.
.
/www/domain_xyz/htdocs              andre     users
/www/domain_fuer_außen/htdocs       trulla    extern

Ich bin jetzt am überlegen, wie ich dem Benutzer "trulla" am _besten_ den Zugriff auf alle Verzeichnisse verbiete. trulla soll sich nur unterhalb des Verzeichnisses "/www/domain_fuer_außen/" bewegen können.

Ich könnte die "Other" auf 0 (z.B. rwx-r-x----) setzen, also nicht lesen, schreiben und ausführen. Ich überlege aber gerade ob ich das wirklich will und ich nicht etwas entscheidenes vergesse und eventuell somit Systemdienste "aussperre". Die böse Erwachung kommt dann sicherlich erst beim Neustart.

MfG, André Laugks

--
L-Andre @ gmx.de
  1. Moin!

    Ich muß jemanden von außen Zugang (SSH) zu meiner Linuxmaschine innerhalb meines privaten LANs legen.

    Das halte ich für sehr problematisch. Deine Maschine ist mit Sicherheit nicht für derartigen Mehrbenutzerbetrieb eingerichtet worden. Deshalb sind bei der Installation wahrscheinlich Designentscheidungen anders ausgefallen, als sie für eine sichere Abschirmung der Benutzer gegeneinander notwendig wären.

    Ich bin kein Experte für die Konfiguration eines sicheren Mehrbenutzersystems. Meine Server nutze ich in der Regel alleine, oder zusammen mit vertrauenswürdigen Mitbenutzern, so dass sich mir gewisse Fragestellungen noch nicht gestellt haben.

    Bsp:

    /etc                                root      root
    .
    /www/domain_xyz/htdocs              andre     users
    /www/domain_fuer_außen/htdocs       trulla    extern

    Ich bin jetzt am überlegen, wie ich dem Benutzer "trulla" am _besten_ den Zugriff auf alle Verzeichnisse verbiete. trulla soll sich nur unterhalb des Verzeichnisses "/www/domain_fuer_außen/" bewegen können.

    Das stelle ich mir bei einem Shellzugang bzw. SCP-Zugang schwierig vor. Die sicherste Methode dürfte sein, den Benutzer in einer chroot-Umgebung einzusperren. Das bedeutet aber, dass du einen sshd doppelt installieren mußt (einen für dich, einen chrooted für trulla), und den zweiten sshd dann eben auf einen anderen Port setzt.

    Alternativ: Mit FTP kannst du die Zugriffe ebenso auf ein bestimmtes Verzeichnis beschränken.

    Aber ich gebe zu bedenken: Alles, was dein Webserver userid-mäßig lesen kann, kann auch trulla lesen, wenn die Möglichkeit besteht, Skripte auszuführen, und du keine Sicherheitsmaßnahmen dagegen getroffen hast (bei PHP beispielsweise den Safe-Mode benutzt - ich brauchte den bislang nicht, also frag mich keine Details).

    Ich könnte die "Other" auf 0 (z.B. rwx-r-x----) setzen, also nicht lesen, schreiben und ausführen. Ich überlege aber gerade ob ich das wirklich will und ich nicht etwas entscheidenes vergesse und eventuell somit Systemdienste "aussperre". Die böse Erwachung kommt dann sicherlich erst beim Neustart.

    Die Unix-Dateirechte sind für eine solche Aufgabenstellung eigentlich zu wenig detailliert, würde ich meinen. Nun gut, root liest ja sowieso alles - und ansonsten hängt die Möglichkeit, das so zu machen, davon ab, welche User und Gruppen es gibt, wie die einander zugeordnet sind und welche Verzeichnisse von welchen Usern tatsächlich benötigt werden.

    Das meinte ich u.A. mit Designentscheidungen. Wenn man weiß, dass man das System usermäßig gegeneinander absichern muß, wird man sich an diesem Punkt viele Gedanken machen müssen. Wenn man das erst hinterher drüberstülpen will, geht das vermutlich eher schief.

    Ein neuer Benutzer hat aber typischerweise auf die Systemdateien allenfalls nur Leserechte. trulla kann also beispielsweise den Binärcode von allen Programmen lesen (und sie auch ausführen, wenn's denn sein muß), ihn aber nicht verändern. Wenn du analysierst, welche Zugriffe du verbieten willst (dazu mußt du wissen, welche Daten wo liegen, und wie geschützt die werden sollen), dann kannst du darauf basierend die Rechte setzen.

    Deine Fragestellung ist jedenfalls nicht trivial.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. Hallo!

      Erstmal danke für Deinen Beitrag!

      Meine Server nutze ich in der Regel alleine, oder zusammen mit vertrauenswürdigen Mitbenutzern, so dass sich mir gewisse Fragestellungen noch nicht gestellt haben.

      Auf meine Maschine hat sonst auch keiner Zugriff. Dieser Person zu Zugreiffen darf, halte ich für vertrauenswürdig.

      Das mit der doppelten SSH-Installation werde ich aber mal aus Interesse ausprobieren.

      MfG, André Laugks

      --
      L-Andre @ gmx.de
      1. Ich hatte mir ja vorgenommen, jeden Beitrag den ich sende noch einmal zu lesen.

        Auf meine Maschine hat sonst auch keiner Zugriff. Dieser Person zu Zugreiffen darf, halte ich für vertrauenswürdig.

        Auf meine Maschine hat sonst auch keiner Zugriff. Diesez Person die zugreifen darf, halte ich für vertrauenswürdig.

        MfG, André Laugks

        --
        L-Andre @ gmx.de
        1. Hallo,

          Auf meine Maschine hat sonst auch keiner Zugriff. Dieser Person zu Zugreiffen darf, halte ich für vertrauenswürdig.
          Auf meine Maschine hat sonst auch keiner Zugriff. Diese_z_ Person die zugreifen darf, halte ich für vertrauenswürdig.

          Warning: potential recursion loop

          (SCNR)

          Achja, ich kann sogar noch etwas sinnvolles beitragen: ich vermute, dass am passendsten fuer Dein Problem eine "chrootete" shell ist. Beim Anlegen des Benutzers kannst du ihm ja eine Login-Shell zuordnen, die kannst Du einfach auf chroot /var/www/ich_habe_leider_vergessen_wie_das_verzeichnis_hiess legen ;-)
          Da musst Du Dich natuerlich darum kuemmern, dass unterhalb dieses Verzeichnisses eine chroot-Umgebung liegt, aber ein zweiter sshd muss dafuer nicht laufen.
          (Ich glaube zumindest, dass das so klappt, probiert habe ich es noch nicht.)

          Viele Gruesse,
          Gero

  2. hallo Andre,

    Ich bin jetzt am überlegen, wie ich dem Benutzer "trulla" am _besten_ den Zugriff auf alle Verzeichnisse verbiete. trulla soll sich nur unterhalb des Verzeichnisses "/www/domain_fuer_außen/" bewegen können.

    "Am besten" geht das meiner Meinung nach, indem du ihn in eine neue Gruppe steckst, für die die gewünschte Rechtevergabe gilt. Solange du mit deiner Gruppe "extern" noch anderes vorhast, ist die Einschränkung der Rechte für ein einzelnes Mitglied dieser Gruppe zwar theoretisch möglich, aber praktisch mit relativ viel Aufwand verbunden.

    Ich könnte die "Other" auf 0 (z.B. rwx-r-x----) setzen, also nicht lesen, schreiben und ausführen. Ich überlege aber gerade ob ich das wirklich will

    Ich nehme an, daß du inzwischen darauf gekommen bist, daß du das tatsächlich nicht unbedingt willst  -  hängt aber bissel davon ab, wer noch in dieser Gruppe enthalten ist. (Und _ganz_ leise: "rwx-r-x----" ist keine exakte Angabe, was du meinst, ist so etwas wie 721)

    und ich nicht etwas entscheidenes vergesse und eventuell somit Systemdienste "aussperre". Die böse Erwachung kommt dann sicherlich erst beim Neustart.

    Wie du deine Gruppen zusammengestellt hast, kannst nur du alleine wissen. Systemdienste sollten allerdings alle in anderen Gruppen stecken. Und das "böse Erwachen" kannst du überprüfen, indem du dich einfach auf einer anderen Konsole mal als Benutzer "trulla" anmeldest. Neustart ist dafür nicht zwingend nötig.

    Grüße aus Berlin

    Christoph S.

    1. Hallo!

      Ich nehme an, daß du inzwischen darauf gekommen bist, daß du das tatsächlich nicht unbedingt willst  -  hängt aber bissel davon ab, wer noch in dieser Gruppe enthalten ist. (Und _ganz_ leise: "rwx-r-x----" ist keine exakte Angabe, was du meinst, ist so etwas wie 721)

      Ich habe jetzt mal den wichtigsten Dateien/Ordnern 750 vergeben. Das ist so und so kein Dauerzustand. Die Person die zugreift, zähle ich zu einer vertrauenwürdigen person.

      MfG, André Laugks

      --
      L-Andre @ gmx.de
    2. Hallo Christoph,

      Ich nehme an, daß du inzwischen darauf gekommen bist, daß du das tatsächlich nicht unbedingt willst  -  hängt aber bissel davon ab, wer noch in dieser Gruppe enthalten ist. (Und _ganz_ leise: "rwx-r-x----" ist keine exakte Angabe, was du meinst, ist so etwas wie 721)

      Das verstehe ich nicht. Wieso ist das keine exakte Angabe, und was ist der Unterschied davon zu 721?

      Danke & Gruesse,
      Gero

      1. hallo Gero,

        (Und _ganz_ leise: "rwx-r-x----" ist keine exakte Angabe, was du meinst, ist so etwas wie 721)
        Das verstehe ich nicht. Wieso ist das keine exakte Angabe, und was ist der Unterschied davon zu 721?

        Die Schreibweisen "-rwx-w---x" und "721" bedeuten exakt dieselbe Rechtervergabe. Die Ziffern stehen für folgende Rechtezuweisungen:
        1 für Ausführen (--x),
        2 für Schreiben (-w-),
        3 für Schreiben und Ausführen (-wx),
        4 für Lesen (r--),
        5 für Lesen und Ausführen (r-x),
        6 für Lesen und Schreiben (rw-)
        7 für Lesen, Schreiben und Ausführen (rwx)
        sowie 0 für nichts (---)

        Es sind also neun Zeichen, die über die "Rechte" entscheiden. _Davor_ steht dann im listing, das du mit "ls -l" erhalten kannst, noch ein Zeichen, das - sein kann oder d (für directory) oder l (für link)... Die gesamte Zeichenkette besteht aus zehn Zeichen. Aber das _erste_ davon hat noch nichts mit den Lese-/Schreibrechten zu tun, kann also kein "r" sein.

        Grüße aus Berlin

        Christoph S.

        1. Hallo Christoph,

          Es sind also neun Zeichen, die über die "Rechte" entscheiden. _Davor_ steht dann im listing, das du mit "ls -l" erhalten kannst, noch ein Zeichen, das - sein kann oder d (für directory) oder l (für link)... Die gesamte Zeichenkette besteht aus zehn Zeichen. Aber das _erste_ davon hat noch nichts mit den Lese-/Schreibrechten zu tun, kann also kein "r" sein.

          Du hast Recht, ich habe das letzte "-" uebersehen, bin davon ausgegangen, dass es genau 9 Zeichen waren.
          Trotzdem:

          Die Schreibweisen "-rwx-w---x" und "721" bedeuten exakt dieselbe Rechtervergabe.

          Das ist falsch. "-rwx-w---x" und "0721" bedeuten die gleiche Rechtevergabe.
          Im ersten Byte werden noch setuid, setgid etc. angegeben.
          Das war auch der Grund, warum ich das Posting ueberhaupt schrieb, weil die "ausgeschriebene" Schreibweise (falls sie denn korrekt gewesen waere) eigentlich exakter war als Deine numerische, Du allerdings das Gegenteil behauptet hast.

          Gut, Danke und Entschuldigung,

          Gruesse,
          Gero