potentieller Umsteiger schrieb:
> Was müsste ich dann an Rechten eventuell vorher anpassen/korrigieren?
Das hängt stark davon ab, was man erreichen will, wem/was man Zugriff
worauf geben will. Dementsprechend muss man dann einfach die
Berechtigungen & Gruppen einstellen.
Bei jeder Datei/Ordner gibt es einen Benutzer, eine Gruppe, und eine
Berechtigungsmaske. Benutzer und Gruppe sind durch ihre ID Nummer
gespeichert. Die Berechtigungsmaske ist unterteilt in Sonstiges
(optional), Benutzerberechtigung (user), Gruppenberechtigung,
Berechtigungen anderer (others). Die letzten 3 sind weiter unterteilt in
Leseberechtigung (r/4), Schreibberechtigung (w/2), Ausführbar(x/1).
Meistens wird diese Maske oktal angegeben (also als Zahl mit Basis 8,
also jede ziffer zwischen 0-7, jeweils die Nummer oben in den Klammern
zusammenaddieren.). Der berechtigte Benutzer der Datei nennt man deren
Besitzer (owner).
Als Beispiel:
1 | uid: 10 (nehmen wir mal an, das ist tom)
|
2 | gid: 20 (nehmen wir mal an, das ist gruppe grafiker)
|
3 | umask: 0770
|
4 |
|
5 |
|
6 | u g o
|
7 | 421 421 421
|
8 |
|
9 | rwx rwx ---
|
10 | 111 111 000
|
11 | 7 7 0
|
Das Heist: Benutzer Tom und jeder in der Gruppe grafiker kann die Datei
Lesen, Schreiben, und Ausführen, andere können das nicht.
Bei Verzeichnissen haben Aufführungsrechte eine besondere Bedeutung,
ohne die kann man die Dateien nicht auflisten usw. Eigentlich verwendet
man bei Verzeichnissen r und x immer nur zusammen. Bei nicht
ausführbaren Dateien sollte man aber nur das r und/oder w setzen.
Deshalb ist ein rekursives chmod (change mode, ändert die
Berechtigungsmaske) z.B. 'chmod -r 0770 "verzeichnis/"' selten sinnvoll,
aber sowas kann man dann mit find lösen z.B. 'find "verzeichnis/" -type
d -exec chmod 0750 {} \; ; find "verzeichnis/" -type f -exec chmod 0640
{} \;'.
In der Regel verwendet man das so, dass man Dateien, auf die gewisse
Nutzer zugreifen können sollen, einer Gruppe zuweist. Die Nutzer fügt
man dann zur Gruppe hinzu. Ein Benutzer hat auch eine Hauptgruppe, oft
aber nicht notwendigerweise eine nur für diesen, diese verwendet man
normalerweise bei Dateien die nur diesem Benutzer gehören. Bei
komplexeren Situationen gibt es z.B. noch ACLs, aber die braucht man
meistens nicht.
Auf die selbe Weise werden auch die Berechtigungen von Servicen
eingeschränkt, jeder Service besteht aus Programmen, die von/mit einem
bestimmten Benutzer und Gruppe gestartet werden.
Wo das ganze etwas zusammenbricht ist das einschränken von
Berechtigungen von Programmen, die man selbst ausführt. Ich kann
entweder das Programm direkt selbst starten, dann hat es die selben
Rechte wie ich, oder ich kann es von einem Programm spezifischen Nutzer
starten lassen, falls ich das vorher so einrichte, aber dann sind dessen
Zugriffsrechte nicht mehr vom Benutzer abhängig. Für dieses Problem gibt
es viele Lösungen, aber die sind sehr Komplex. Was ich oben beschrieben
habe ist das DAC (Discretionary Access Control, Benutzerbestimmbare
Zugriffskontrolle), welches bei Linux und Unix Systemen verwendet wird.
Es gibt noch sogenannte LSM (Linux Security Module) z.B. Selinux,
Apparmor, smack, die meistens eine MAC (Mandatory access control) Lösung
implementieren, aber diese sind recht Komplex und nicht wirklich für
pro-Benutzungseinschränkungen gedacht. Und dann gibt es noch
Container/Sandboxing/Namespaces, mit denen man die Ressourcen
(Filesysteme, Netzwerk, Benutzer, etc.), die ein Prozess hat & sieht,
komplett ändern kann. Damit zusammenhängend gibt es noch subuids, das
sind zusätzliche uids und gids, zu denen ein Benutzer (über Umwege)
wechseln kann, und hauptsächlich mit user-namespaces in Containern
verwendet werden, um diese dann im Container auf andere uids mappen zu
können. Selbst erfahrene Linux user kennen häufig noch nicht alle diese
fortgeschrittenen Technologien, und die meisten brauchen oder bemerken
sie nie.
Bei Datenträgern und Netzwerkdateisystemen, die das unix
Berechtigungsmodell verwenden, und auf mehreren Rechnern verwendet
werden, ist noch zu beachten, dass man übereinstimmende uids und gids
für die Benutzer und Gruppen braucht, sofern das mapping nicht
anderweitig gelöst wird.