|
Das sticky-Bit hat historischen Ursprung und
wird heute nur noch auf Verzeichnisse
angewendet (Früher blieben mit dem t-Bit versehene
Programme auch nach Beendigung im Hauptspeicher).
Ist das Sticky Bit auf einem Verzeichnis z.B. /tmp
gesetzt, dann dürfen Dateien nur noch von dessen
Besitzer und vom Verzeichnisbesitzer gelöscht
werden.
root@linux #
chmod 1777 public_tmp
root@linux #
ls -la public_tmp
drwxrwxrwt 7 root root 4096 2003-07-06 19:17 .
|
SUID und SGID sind nur für Programme sinnvoll.
Diese werden mit der Benutzerkennung
(SUID - Set User ID) bzw mit der Gruppenkennung
(SGID - Set Group ID) der Programmdatei ausgeführt.
Anwendung findet dies beisielsweise beim
Programm passwd, welches ja Schreibrechte
auf die Datei /etc/shadow benötigt um das
Passwort zu ändern. Das Programm wird also von
einem realen Nutzer aufgerufen, läuft aber
unter root-Rechten ab:
root@linux #
ls -la /usr/bin/passwd
-rwsr-xr-x 1 root root 24248 2003-04-26 21:50 /usr/bin/passwd
|
# User ID bei Ausführung des apache setzen
chmod 4755 /usr/bin/passwd
#Gruppen ID bei Ausführung von my_script setzen
chmod 2755 /usr/bin/my_script
Bit-Maske
|
Bedeutung
|
4000
|
User ID setzen (bei Programmen)
|
2000
|
Gruppen ID setzen (bei Programmen)
|
1000
|
Lösch- und Überschreibschutz aktivieren (Verzeichnisse)
|
400
|
Eigentümer lesen
|
200
|
Eigentümer schreiben / modifizieren
|
100
|
Eigentümer ausführen /Verzeichnis wechseln
|
|
|
40
|
Gruppe lesen
|
20
|
Gruppe schreiben / modifizieren
|
10
|
Gruppe ausführen /Verzeichnis wechseln
|
|
|
4
|
alle lesen
|
2
|
alle schreiben / modifizieren
|
1
|
alle ausführen /Verzeichnis wechseln
|
|
Seit dem Linux-Kernel 2.2 ist es möglich, für Dateien
und Verzeichnisse erweiterte (Sicherheits-)Funktionen
durch die Vergabe von Flags (Attributen) zu aktivieren.
Diese betreffen auch den Superuser root.
a (Append Only)
Das System erlaubt das Öffnen dieser
Datei nur zum Zwecke der Erweiterung und
verbietet explizit allen Prozessen
das Überschreiben bzw. Löschen bereits
gespeicherter Daten (sinnvoll
bei log-Dateien).
Ebenfalls untersagt ist das Löschen,
Umbenennen, Verschieben und "hartes"
Linken der Datei.
Wird das Flag auf einem Verzeichnis
angewendet, dürfen darin keine
Dateien angelegt oder gelöscht werden.
i (Immutable)
Das System verbietet jegliche Änderungen
an der Datei. Im Falle eines Verzeichnisses
können Dateien, die in diesem Verzeichnis
bereits existieren, verändert werden.
Weder das Löschen noch das Anlegen von
Dateien ist möglich.
d (No Dump)
Das dump Programm soll diese Datei beim
Backup ignorieren.
c (Compress)
Das System soll diese Datei "transparent"
komprimieren. Beim Schreiben in die Datei
wird deren Inhalt komprimiert und erst danach
auf dem physischen Datenträger abgelegt, beim
Lesen der Datei werden jedoch stets
dekomprimierte Daten zurückgegeben.
Diese Funktion ist derzeit noch nicht
implementiert.
s (Secure Delete)
Wenn das System diese Datei löscht, werden
alle Datenblöcke auf dem Datenträger
zufällig überschrieben.
u (Undelete)
Wenn eine Anwendung das Löschen der Datei
fordert, soll das System die Datenblöcke so
"konservieren", dass das Löschen der Datei
auch wieder rückgängig gemacht werden kann.
Diese Funktion ist derzeit noch nicht
impementiert.
A (Atime)
Das System soll die "atime" (access time)
dieser Datei nicht aktualisieren.
S (Sync)
Wenn eine Anwendung gerade den
Schreibprozess durchführt, soll das System
alle Änderungen sofort und ungepuffert auf
dem physischen Datenträger abspeichern.
root@linux #
chattr +a test.log
root@linux #
chattr +i test.conf
root@linux #
ls -al test*
-rw-rw-r-- 1 gwe users 0 Nov 22 22:22 test.conf
root@linux #
lsattr -a test*
---i-------- test.conf ----a------- test.log
root@linux #
chattr -i test.conf
lsattr -a test.conf
------------ test.conf
|
In vielen Fällen ist der Schutz der
folgenden Dateien/Verzeichnisse sinnvoll:
root@linux #
chattr -R +i /etc /bin /sbin /boot /lib
root@linux #
chattr -R +i /usr/bin /usr/sbin /usr/lib /usr/src /usr/include
root@linux #
chattr +a /var/log/messages /var/log/secure
root@linux #
(...)
|
Der Schutz folgender Verzeichnissen kann
zu unerwünschten Nebeneffekten führen:
Verzeichnis
|
Problemursache
|
/
|
syslog
|
/dev
|
Syslog will beim Start den Socket /dev/log anlegen
|
/tmp
|
versteht sich von selbst
|
/var
|
logrotate, sendmail,
|
Mithilfe der oben beschriebenen
Capabilities kann das Rücksetzen der
Sicherheitsattribute unterbunden
werden. Die damit realisierten Restriktionen
gelten für alle Benutzer (inkl. root)
und werden nur bei Systemsneustart aufgehoben.
|
Das Einbinden von Partitionen kann sehr viel zur Sicherheit
beitragen. Als Beispiel soll der folgende Eintrag in der
/etc/fstab dienen:
/etc/fstab
|
/dev/hda9 /tmp ext2 defaults,nosuid,noexec,nodev 0 2
|
Aufgrund der Mount-Optionen werden gesetzte
SUID- und GUID-Attribute komplett ignoriert.
Weiterhin verbietet noexec das Ausführen von
Programmen auf dieser Partition und nodev
verhindert character und block-Devices.
Die folgenden Einträge geben Überblick über
eine mögliche Konfiguration:
/etc/fstab
|
/dev/sda5 /usr ext3 defaults,ro,nodev 0 2
/dev/sda7 /usr/share ext3 defaults,ro,nodev,nosuid 0 2
/dev/sda8 /var ext3 defaults,nodev,usrquota,grpquota 0 2
/dev/sda9 /tmp ext3 defaults,nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/sda10 /home ext3 nosuid,nodev,auto,nouser,usrquota,grpquota 0 2
/dev/hda1 /mnt/hda1 vfat rw,nosuid,nodev,umask=000,uid=1000,gid=1000 0 0
/dev/fd0 /mnt/fd0 ext2 defaults,users,nodev,nosuid,noexec 0 0
/dev/hdd /mnt/cdrom iso9660 ro,users,nodev,nosuid,noexec 0 0
|
Die Optionen sind im Einzelnen in den
man-Pages (man 8 mount) nachzulesen,
deshalb gibt es hier nur eine kleine Auswahl:
defaults
|
entspricht den voreingestellten Optionen rw, suid, dev, exec,
auto, nouser, und async
|
rw
|
Einhängen des Dateisystems zum Lesen und Schreiben.
|
ro
|
Einhängen des Dateisystems ausschließlich zum Lesen,
Schreiboperationen werden ignoriert.
|
user
|
Ein Normaluser darf das Dateisystem einhängen. Ansonsten darf
dies nur root.
|
nouser
|
Nur root darf das Dateisystem einhängen.
|
dev / nodev
|
das Nutzen von Gerätedateien auf der Partition ist (nicht)
erlaubt.
|
exec / noexec
|
auf der Partition gespeicherte Programme können (nicht)
ausgeführt werden.
|
auto / noauto
|
Partition wird beim Booten (nicht) automatisch eingehängt.
|
atime / noatime
|
die Zugriffszeit (atime) wird bei jedem Zugriff (nicht)
gesetzt.
|
suid / nosuid
|
SUID und SGID Bits werden (nicht) interpretiert.
|
sync / async
|
Ein- und Ausgabeoperationen werden (a)synchron durchgeführt
|
Jedes Dateisystem stellt selbst noch einige
Optionen für zur Verfügung (z.B. usrquota,
gid, uid, umask).
Die Dokumentation dieser speziellen Optionen
kann ebenfalls in den Manpages von mount
nachgelesen werden.
|
Jeder Computernutzer weis, dass eine Festplatte,
egal wie groß sie auch sein mag, immer zu klein
ist. Auf Systemen, die von mehreren
Personen genutzt werden, wird dies sehr oft zum
Problem. Damit es gar nicht erst zu einem Streit
kommt, kann der Administrator mit root-Rechten
für jeden Nutzer bzw. für jede Nutzergruppe ein
Kontingent (engl. Quota) an Speicherplatz zur
Verfügung stellen. Dazu benötigt man Quota.
Die Kontingente werden nicht global für
das ganze System sondern für jede Partition
separat vergeben. Wenn ein Nutzer Schreibrechte
auf mehreren Partitionen besitzt, muss man
auch mehrere Quota für diesen Benutzer setzen.
Man kann sowohl Quotas auf Benutzerebene als auch
auf Gruppenebene festlegen. Bei der Kombination
von Benutzerebene und Gruppenebene haben Quotas
auf Benutzerebene eine höhere Priorität.
Mit den folgenden drei Parametern lassen sich
Quotas einstellen:
Softlimit
|
Der Benutzer darf diese Grenze nur kurz überschreiten und wird
extra gewarnt.
|
Grace Period
|
Dieser Parameter legt den Zeitraum fest, den ein Benutzer das
Softlimit überschreiten darf.
|
Hardlimit
|
Diese Grenze darf nicht überschritten werden.
|
Bevor man Quotas festlegen kann, muss der
Kernel mit der Option Quota Support
kompilert werden. Weiterhin ist es erforderlich,
die Dateisysteme darauf vorzubereiten (mount Option).
Dazu wird die Datei /etc/fstab angepasst:
/etc/fstab
|
...
/dev/sda7 /home ext3 nosuid,nodev,auto,nouser,usrquota,grpquota 0 2
...
|
Nun müssen die Änderungen übernommen werden.
Dazu ist nicht unbedingt ein reboot erforderlich
es reicht durchaus, die Partition aus- und
wieder einzuhängen.
root@linux #
mount -a -o remount
|
Weiterhin müssen die Dateien aquota.user
und aquota.group im Wurzelverzeichnis der jeweiligen
Partition erstellt werden. Dies übernimmt auch der
erstmalige Aufruf des Programmes quotacheck. Damit
die Benutzer auch den aktuellen Stand ihres
Kontingentes erfragen können, ist der Lesezugriff
auf diese quota-Dateien notwendig.
root@linux #
quotacheck -avugm
root@linux #
chmod 644 /home/aquota.*
root@linux #
chmod 644 /moutpoint/aquota.*
|
Das Starten und Beenden der Kontingentüberwachung
übernehmen die Programme quotaon und quotaoff, die nach
jedem Systemstart neu aufgerufen werden müssen.
Wenn bei der Distribution ein entsprechendes
SysV-Initskript fehlt, kann man folgendes benutzen:
/etc/init.d/quota
|
#! /bin/sh
case "$1" in
start)
echo "Starte Quotaüberwachung:"
/sbin/quotaon -avug
;;
stop)
echo "Stoppe Quotaüberwachung:"
/sbin/quotaoff -avug
;;
*)
echo "Aufruf: $0 {start|stop}"
exit 1
esac
exit 0
|
root@linux #
cd /etc/init.d
root@linux #
chmod +x quota
root@linux #
ln -s ../init.d/quota /etc/rc0.d/K85quota
root@linux #
ln -s ../init.d/quota /etc/rc1.d/K85quota
root@linux #
ln -s ../init.d/quota /etc/rc2.d/S20quota
root@linux #
ln -s ../init.d/quota /etc/rc3.d/S20quota
root@linux #
ln -s ../init.d/quota /etc/rc4.d/S20quota
root@linux #
ln -s ../init.d/quota /etc/rc5.d/S20quota
root@linux #
ln -s ../init.d/quota /etc/rc6.d/K85quota
|
Zur Festlegung und Verwaltung der Kontingente
existiert das Programm edquota.
root@linux #
/edquota -u user007
|
Dieser Aufruf öffnet den Standardeditor
(i.d.R. vi), mit Hilfe dessen man die
Änderungen an den Parametern vornehmen
kann.
/tmp/EdP.auS8yzc
|
Disk quotas for user user007 (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 80579 100000 120000 3841 10000 12000
|
Detaillierte Informationen findet man in
den man-Pages, deshalb seien hier nur in
Kurzform die wichtigsten Kommandos aufgezählt:
# Ändern der Quota für Benutzergruppe users
root@linux #
edquota -g users
# Ändern der Grace Period (Zeitraum/Frist für Softlimit)
root@linux #
edquota -t
# Übernahme der Quotaeinstellungen von Benutzer user007 # für alle User mit UID > 1000
root@linux #
edquota -p user007 `awk -F: '$3 > 1000 {print $1}' /etc/passwd`
# Erzeugen eines Reportes
root@linux #
repquota -avug
Report for user quotas on device /dev/hda2 Block grace time: 7days; Inode grace time: 7days
Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 69841 0 0 9226 0 0 postgres -- 1 0 0 1 0 0 ai114 -- 80154 60000* 90000 6days 3841* 3840 7000 3days user007 -- 80579 100000 120000 3841 10000 12000
# Statusabfrage für einen Benutzer
root@linux #
su user007
user@linux $
quota
Disk quotas for user user007 (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/hda7 80579 100000 120000 3841 10000 12000
|
Es sei darauf hingewiesen, dass nicht bei allen
Dateisystemen Quotas unterstützt werden. Auf den
FAQ-Seiten des ReiserFS findet man weitere Informationen.
|
Im Kapitel "GnuPG Handbuch" wurde bereits detailliert
auf das Verschlüsseln von Dokumenten eingegangen.
Deshalb soll an dieser Stelle nicht
näher darauf eingegangen werden. Das folgende Kapitel
beschäftigt sich deshalb mit der Einrichtung
verschlüsselter Dateisysteme, die an jede beliebige
Stelle im Verzeichnissbaum eingehängt werden können.
Alle Dateien in einem solchen Verzeichnis werden
automatisch ver- und entschlüsselt.
|
Es gibt zwei Möglichkeiten, Dateisysteme zu verschlüsseln:
- Das Filesystem residiert in einer verschlüsselten Datei
- Das Filesystem residiert auf einer verschlüsselten Partition
Für beide Varianten sind Modifikationen am Kernel
erforderlich, bei Kernel 2.6.XX werden alle passenden
Module mitgliefert (Menü "Cryptographic Options").
Für den Fall a) ist zusätzlich der
"Loopback Device Support / Cryptoloop Support"
im Menü "Block Devices" zu aktivieren. Bei älteren
Kerneln ist ein spezieller Patch
einzuspielen.
Weiterhin ist es (noch) notwendig, einige wichtige Programme
wie mount und losetup
linux-utils
zu modifizieren. Keine Probleme gab es mit dem Patch
von http://therapy.endorphin.org/patches/ .
root@linux #
tar zxvpf util-linux-2.11y.tar.gz
patch -p0 < util-linux-2.11y.losetup.diff
cd util-linux-2.11y
make && make install
|
Die Verschlüsselung wird durch ein virtuelles Laufwerk
(Loop-Device) realsiert. Dieses wird, wie jedes andere
Laufwerk auch, in den Verzeichnisbaum eingehängt, z.B.
an /mnt/crypted. Alle nach /mnt/crypted kopierten Dateien
werden nun automatisch verschlüsselt.
Natürlich muss dieses virtuelle Laufwerk mit einer
real existierenden Datei oder Partition verbunden sein,
die verschlüsselten Daten sollen ja schließlich
nicht verloren gehen.
# Fall a) Erzeugen einer Datei (Größe 8MB)
root@linux #
dd if=/dev/zero of=/home/user/crypedFile.dat bs=4096 count=2048
# Erzeugen eines leeren Verzeichnisses, welches # sensible Daten aufnehmen soll
root@linux #
mkdir /mnt/crypted
# mit AES verschlüsseltes loop-Device mit dieser Datei verbinden
root@linux #
losetup -e aes /dev/loop0 /home/user/crypedFile.dat
# oder Partition mit loop-Device verbinden
root@linux #
losetup -e aes /dev/loop0 /dev/hda7
# auf dem virtuellen Laufwerk ein Dateisystem anlegen
root@linux #
mkfs -t ext2 /dev/loop
# virtuelles Laufwerk mounten
root@linux #
mount /dev/loop0 /mnt/crypted
# nun kann normal gearbeitet werden:
root@linux #
cp datei /mnt/crypted
# am Ende: unmount
root@linux #
umount /dev/crypted
# virtuelles Laufwerk (loop-Device) trennen
root@linux #
losetup -d /dev/loop0
|
Um das Einhängen der Laufwerke zu automatisieren, kann
die Datei /etc/fstab angepasst werden (letzte Zeile).
/etc/fstab
|
# <Dateisystem> <Mountpunkt> <Typ> <Optionen> <dump> <pass>
/dev/hda2 / ext3 defaults,errors=remount-ro 0 1
proc /proc proc defaults 0 0
/dev/fd0 /floppy auto defaults,user,noauto 0 0
/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0
/home/user/crypedFile.dat /mnt/crypted ext2 defaults,loop,encryption=aes 0 0
|
Natürlich gibt es auch Alternativen zu der hier
vorgestellten Vorgehensweise, beispielsweise findet
man auf pro-linux eine
Anleitung zu
Loop-AES.
Für die Zukunft bleibt zu hoffen, dass die
Einrichtung von verschlüsselten Dateisystemen
sich um Größenordnungen vereinfacht.
|
|
|