Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
lpi1:dateirechte [2014/07/12 08:50] 127.0.0.1 Externe Bearbeitung |
lpi1:dateirechte [2021/02/17 10:55] (aktuell) |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== Befehle Dateirechte ====== | + | ====== Übung: finde die minimal nötigen Berechtigungen ====== |
| - | === Benutzer anlegen === | + | |
| - | useradd -m benutzer | + | |
| - | === Benutzer löschen === | + | |
| - | userdel -r benutzer | + | |
| - | === Dateizugriffsrechte betrachten === | + | mkdir -m 000 /tmp/dir1 /tmp/dir2 |
| + | echo geheim > file1 | ||
| + | chmod 000 file1 | ||
| + | |||
| + | Welche (minimalen) Berechtigungen müssen jeweils bei ''/tmp/dir1'', ''/tmp/dir2'' und ''file1'' hinzugefügt werden, damit ''file1'' mit | ||
| + | cp file1 /tmp/dir1/file2 | ||
| + | ins Verzeichnis ''/tmp/dir1'' kopiert werden kann? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Welche (minimalen) Berechtigungen müssen jeweils bei ''/tmp/dir1'', ''/tmp/dir2'' und ''file2'' hinzugefügt werden, damit ''file2'' mit | ||
| + | mv /tmp/dir1/file2 /tmp/dir2/ | ||
| + | ins Verzeichnis ''dir2'' verschoben werden kann? | ||
| + | |||
| + | |||
| + | ====== Übung: mit umask Berechtigung setzen ====== | ||
| + | |||
| + | Welche ''umask'' muss man setzen, damit neu angelegte | ||
| + | * Dateien die Berechtigung ''%%rw- r-- -w-%%'' und | ||
| + | * Verzeichnisse die Berechtigung ''rwx r-x -w-'' | ||
| + | bekommen? | ||
| + | ====== Befehle Dateirechte ====== | ||
| + | ^ Dateizugriffsrechte betrachten | | ||
| ls -l datei | ls -l datei | ||
| - | === Verzeichnisrechte betrachten === | + | | |
| + | ^ Dateizugriffsrechte von Dateien im Verzeichnis betrachten | | ||
| + | ls -l verzeichnis | ||
| + | | | ||
| + | ^ Verzeichnisrechte betrachten (nicht der Einträge im Verzeichnis) | | ||
| ls -ld verzeichnis | ls -ld verzeichnis | ||
| - | + | | | |
| - | === Besitzer der Datei ändern === | + | ^ Besitzer der Datei ändern | |
| chown benutzer datei | chown benutzer datei | ||
| - | === Gruppe der Datei ändern === | + | | |
| + | ^ Gruppe der Datei ändern | | ||
| chown :users datei | chown :users datei | ||
| chgrp users datei | chgrp users datei | ||
| - | + | | | |
| - | === SUID Recht der Datei ändern === | + | ^ SUID Recht für die Datei ''/bin/cat'' setzen | Programm starten und real bzw. effective UID ansehen: |
| - | chmod u+s programm | + | |
| - | + | ||
| - | programm starten und real bzw. effective UID prüfen: | + | |
| - | ps -eo cmd,ruser,euser | + | |
| chmod u+s /bin/cat | chmod u+s /bin/cat | ||
| + | Als Nutzer: | ||
| cat & | cat & | ||
| - | ps -eo cmd,ruser,euser -C cat | + | ps -C cat -o cmd,ruser,euser |
| - | + | | | |
| - | === GUID Recht der Datei ändern === | + | ^ Wo darf ich schreiben? | |
| - | chmod g+s datei | + | find / /dev -xdev -writable -ls |
| - | + | | | |
| - | === Gruppen eines Benutzers anzeigen === | + | ^ Was darf eine Gruppe? | |
| - | id benutzer | + | |
| - | + | ||
| - | === Was darf eine Gruppe? === | + | |
| find / /dev -xdev -group users -ls | find / /dev -xdev -group users -ls | ||
| - | + | | | |
| - | === Alle SUID-root Dateien finden === | + | ^ Alle SUID-root Dateien finden | |
| find / -xdev -type f -user root -perm /4000 -ls 2>/dev/null | find / -xdev -type f -user root -perm /4000 -ls 2>/dev/null | ||
| find / -xdev -type f -perm -u=s -ls | find / -xdev -type f -perm -u=s -ls | ||
| - | + | | | |
| - | === Allen Programmen das Ausführungsrecht nehmen === | + | ^ Allen Programmen das Ausführungsrecht nehmen | |
| find verzeichnis/ -type f -perm /0111 -exec chmod a-x {} \; | find verzeichnis/ -type f -perm /0111 -exec chmod a-x {} \; | ||
| - | oder schneller | ||
| find verzeichnis/ -type f -perm /0111 -print0 | xargs -0 chmod a-x | find verzeichnis/ -type f -perm /0111 -print0 | xargs -0 chmod a-x | ||
| + | | | ||
| ====== Beispiel: Schreibrechte im Verzeichnis - mehr als man denkt ====== | ====== Beispiel: Schreibrechte im Verzeichnis - mehr als man denkt ====== | ||
| Zeile 82: | Zeile 98: | ||
| </file> | </file> | ||
| - | ====== Beispiel: Weniger Rechte für Eigentümer und Gruppe ====== | + | ====== Übung: Weniger Rechte für Eigentümer und Gruppe ====== |
| - | chmod 246 /verzeichnis/datei | + | Erzeuge ein Verzeichnis ''/srv/open'' mit großzügigen Berechtigungen: |
| + | mkdir -m 777 /srv/open | ||
| + | Erzeuge eine Datei ''/srv/open/datei356'' mit folgendem Inhalt: | ||
| + | <file txt /srv/open/datei356> | ||
| + | #!/bin/bash | ||
| + | echo executable | ||
| + | </file> | ||
| + | |||
| + | Setze die Berechtigungen zu ''356'': | ||
| + | chmod 356 /srv/open/datei356 | ||
| + | |||
| + | Wer darf was? | ||
| + | |||
| + | | ''r'' ''w'' ''x'' ^Mitglied der Gruppe ^nicht Mitglied der Gruppe^ | ||
| + | ^ Besitzer| ''_'' ''_'' ''_'' | ''_'' ''_'' ''_'' | | ||
| + | ^ nicht Besitzer| ''_'' ''_'' ''_'' | ''_'' ''_'' ''_'' | | ||
| + | |||
| + | Tip: | ||
| + | Das Lesen (''r'') von Dateien kann man mit | ||
| + | head -0 /srv/open/datei356 | ||
| + | testen. ((''head -0'' zeigt die ersten 0 Zeilen, also nichts, aber öffnet die Datei. Im Fehlerfall erscheint eine Meldung. )) | ||
| + | Das Schreiben (''w'') von Dateien kann man zerstörungsfrei mit | ||
| + | >> /srv/open/datei356 | ||
| + | testen. | ||
| + | (( | ||
| + | sysctl fs.protected_regular | ||
| + | <file> | ||
| + | fs.protected_regular = 2 | ||
| + | </file> | ||
| + | |||
| + | https://www.kernel.org/doc/Documentation/sysctl/fs.txt: | ||
| + | //This protection is similar to protected_fifos, but it | ||
| + | avoids writes to an attacker-controlled regular file, where a program expected to create one. | ||
| + | |||
| + | When set to "0", writing to regular files is unrestricted. | ||
| + | |||
| + | When set to "1" don't allow O_CREAT open on regular files that we don't own in world writable sticky directories, unless they are owned by the owner of the directory. | ||
| - | ====== Beispiel: Gruppenzugehörigkeiten leben länger als man denkt ====== | + | When set to "2" it also applies to group writable sticky directories.// |
| + | )) | ||
| + | Das Ausführen (''x'') kann man testen, in dem man | ||
| + | /srv/open/datei356 | ||
| + | ausführt. | ||
| + | ====== Beispiel: Gruppenzugehörigkeiten kleben am Prozess länger als man denkt ====== | ||
| groupadd projekt | groupadd projekt | ||
| useradd -m -G projekt iw | useradd -m -G projekt iw | ||
| touch /tmp/datei | touch /tmp/datei | ||
| - | chown root:projekt | + | chown root:projekt /tmp/datei |
| chmod g+w /tmp/datei | chmod g+w /tmp/datei | ||
| su - iw | su - iw | ||
| Zeile 101: | Zeile 158: | ||
| echo test1 >> /tmp/datei | echo test1 >> /tmp/datei | ||
| - | ====== Beispiel: Ungewollte Reinkarnation unter Linux ====== | + | ====== Beispiel: Ungewollter Eigentümerwechsel nach dem Löschen eines Nutzers ====== |
| useradd -m chef | useradd -m chef | ||
| userdel chef | userdel chef | ||
| useradd -m raumpflege | useradd -m raumpflege | ||
| ls -l /home | ls -l /home | ||
| + | |||
| + | Daher sollte man vor oder nach dem Löschen einer Benutzerkennung sämtliche Dateien, die diesem Benutzer gehörten, als ''root'' übernehmen oder einem anderen, für diesen Zweck erstellten technischen Benutzer übereignen. | ||
| + | ====== Beispiel: SUID-Bit Dateien finden und SUID-Bit dauerhaft entfernen ====== | ||
| + | SUID-Bit Dateien finden (als root): | ||
| + | |||
| + | find / /boot -xdev -perm /u+s -type f -user root -ls | ||
| + | |||
| + | SUID-Bit dauerhaft entfernen: | ||
| + | Ubuntu / Debian: | ||
| + | dpkg-statoverride --update --add root root 0755 /bin/ping | ||
| ====== Beispiel: Auswirkung von mount-Optionen ====== | ====== Beispiel: Auswirkung von mount-Optionen ====== | ||
| - | mkdir /mnt/hda2 | + | mkdir /mnt/sda2 |
| - | mount -o ro /dev/hda2 /mnt/hda2 | + | mount -o ro /dev/sda2 /mnt/sda2 |
| - | touch /mnt/hda2/test | + | touch /mnt/sda2/test |
| Weitere Mount-Optionen mit Auswirkungen auf Dateirechte: | Weitere Mount-Optionen mit Auswirkungen auf Dateirechte: | ||
| - | |Option |Bedeutung| | + | ^Option ^Bedeutung| |
| |nodev |Gerätedateien sind nicht erlaubt| | |nodev |Gerätedateien sind nicht erlaubt| | ||
| |noexec | Ausführbare Dateien sind nicht erlaubt | | |noexec | Ausführbare Dateien sind nicht erlaubt | | ||
| |nosuid | S-BIT wird ignoriert | | |nosuid | S-BIT wird ignoriert | | ||
| - | |noatime|Keine Aktualisierung der atime | | ||
| - | |relatime|atime wird nur aktualisiert, wenn ein Schreibzugriff in der inode erfolgt | | ||
| |ro | Dateien sind nicht veränderbar | | |ro | Dateien sind nicht veränderbar | | ||
| + | ====== Beispiel: Ungewollter Eigentümerwechsel bei Backup und Restore ====== | ||
| + | === Server A === | ||
| + | |||
| + | useradd -u 2000 nutzer_a | ||
| + | useradd -u 2001 nutzer_b | ||
| + | useradd -u 2002 nutzer_c | ||
| + | useradd -u 2003 nutzer_d | ||
| + | |||
| + | === Server B === | ||
| + | useradd -u 2000 nutzer_a | ||
| + | useradd -u 2003 nutzer_b | ||
| + | useradd -u 2001 nutzer_e | ||
| + | |||
| + | mkdir /tmp/backup | ||
| + | |||
| + | === Server A === | ||
| + | mkdir /tmp/workdir | ||
| + | |||
| + | touch /tmp/workdir/file_{a,b,c,d} | ||
| + | chown nutzer_a /tmp/workdir/file_a | ||
| + | chown nutzer_b /tmp/workdir/file_b | ||
| + | chown nutzer_c /tmp/workdir/file_c | ||
| + | chown nutzer_d /tmp/workdir/file_d | ||
| + | rsync -a /tmp/workdir/file_* server_b:/tmp/backup | ||
| - | ====== Einstellung zum Erzeugen neuer Dateien ====== | + | === Server B === |
| - | umask 007 z.B. Für Gruppenarbeit | + | ls -l /tmp/backup |
| - | umask 077 z.B. Für Singles, Einzelarbeiter | + | |
| - | /etc/profile Systemweite Einstellen der umask | + | === Server A === |
| + | mkdir /tmp/restore | ||
| + | rsync -a server_b:/tmp/backup/file_* /tmp/restore | ||
| + | ls -l /tmp/restore | ||
| - | |||
| - | ====== Links ====== | ||
| - | * [[ http://www.heise.de/security/news/meldung/69292 | Sind ACLs unter Windows "besser"? ]] | ||
| - | * [[ http://www.matthiess.de/freie-software/linux/posix-acl-erste-schritte | Erste Schritte mit posix-acls ]] | ||
| - | * [[ http://www.suse.de/~agruen/acl/linux-acls/online | Detailierte Beschreibung Linux ACLs ]] | ||