% <#>-----------------------------------------------------------------------<#> \section{Benutzer, Gruppen und Dateiberechtigungen}% \label{sec:benutzer-gruppen-und-berechtigungen} Die Verwaltung von Benutzer, Gruppen und Dateiberechtigungen unter Unix-artigen Systemen sind identisch. Das hat den Vorteil, dass es für Anwender einfacher ist Benutzer, Gruppen und Dateiberechtigungen auf Linux Distributionen wie Debian, Ubuntu, Linux Mint oder RHEL, CentOS, Fedora als auch BSD Distributionen wie MacOS, FreeBSD oder OpenBSD zu übertragen. Optional können durch sogenannte \acrfull{acr:acl} Berechtigungen erweitert werden, um die Rechtevergabe für Benutzer und Gruppen noch feiner einteilen zu können. In der Praxis gibt es jedoch sehr selten Szenarien, bei denen dies notwendig ist. Aus diesem Grund liefern manche Distributionen die notwendigen Programme zum verfeinern der Rechtevergabe nicht standardmäßig aus. % #>------------------------------------------------------------------------<# \subsection{Benutzer und Gruppen}% \label{sec:benutzer-gruppen-und-berechtigungen.benutzer-und-gruppen} Linux ist als Mehrbenutzer-Betriebssystem entwickelt worden. Dies bedeutet, dass mehrere Benutzer gleichzeit auf dem System Prozesse ausführen können. Dabei werden die Berechtigungen auf Dateien und Verzeichnisse klar durch den Besitzer, als auch durch die Gruppe, welche mehrere Benutzer zusammenfasst, geregelt. % #>------------------------------------------------------------------------<# \subsubsection{Benutzer}% \label{sec:benutzer-gruppen-und-berechtigungen.benutzer-und-gruppen.benutzer} Man unterscheidet bei Benutzern zwischen funktionalen und realen Benutzern. Funktionale Benutzer werden vorwiegend für Dienste verwendet, um zu vermeiden, dass der Dienst ungewollt auf Dateien und Verzeichnisse Zugriff erhält. Aus diesem Grund wird auch vermieden, dass funktionale Benutzer eine Shell öffnen können. Dazu später mehr. Reale Benutzer sind natürliche Personen, die sich entweder direkt per Desktopmanager, einer Shell oder über ein Protokoll (\acrshort{acr:rdp}, \acrshort{acr:ssh}, \acrshort{acr:vnc}) Zugang verschaffen. Alle Benutzer werden in der Datei \textit{/etc/passwd} gelistet. Sie wird als Tabellenform geführt, getrennt durch einen Doppelpunkt \textbf{:}. Zur einfacheren Darstellung kann folgender Befehl verwendet werden. \begin{bashcode} cat /etc/passwd | column --table --separator : \end{bashcode} Die Spalten, exemplarisch für den Benutzer root, haben folgende Bedeutung: \begin{itemize}[itemsep=0pt] \item[\textbf{1. Spalte}] Name des Benutzers \item[\textbf{2. Spalte}] Ehemals Spalte für das Kennwort. Das \textit{x} kennzeichnet, dass für den Benutzer in der Datei \textit{/etc/shadow} ein Kennwort existiert. Dazu später mehr. \item[\textbf{3. Spalte}] Die ID des Benutzers. Wird oft auch als \textit{UID} angegeben. \item[\textbf{4. Spalte}] Die ID der Hauptgruppe. Wird oft auch als \textit{GID} angegeben. \item[\textbf{5. Spalte}] Erweiterter Name des Benutzers. Damit nachvollziehbar ist, welchem Dienst oder welcher realen Person der Benutzer zuzuordnen ist. \item[\textbf{6. Spalte}] Das Heimatverzeichnis des Benutzers. Im Regelfall wird dieses Verzeichnis betreten, sofern der Benutzer sich über eine Login-Shell anmeldet. Die Tilde verweist auf das hier definierte Heimatverzeichnis. \item[\textbf{7. Spalte}] Enthält den absoluten Pfad zur Login-Shell. Dies ist im Regelfall die \acrfull{acr:bash}. Um zu vermeiden, dass sich als Benutzer eines Dienstes angemeldet werden kann, kann hier auch auf \textit{/usr/bin/nologin} verwiesen werden. \end{itemize} Die 2. Spalte wurde ausgelagert nach \textit{/etc/shadow}, um die Sicherheit auf dem System zu erhöhen. In der Datei \textit{/etc/shadow} werden weitere Informationen gespeichert. Beispielsweise die Information, mit welchem Hash-Algorithmus die Kennwörter gehasht wurden bzw. wie der Salt-Wert lautet. Erzeugen Sie sich erneut mit dem genannten Befehl aus Kapitel \ref{sec:benutzer-gruppen-und-berechtigungen.benutzer-und-gruppen.benutzer} eine Ausgabe in tabellarischer Form für die Datei \textit{/etc/shadow}. Die Spalten haben folgende Bedeutung: \begin{itemize}[itemsep=0pt] \item[\textbf{1. Spalte}] Name des Benutzers. \item[\textbf{2. Spalte}] Das Kennwort, gespeichert als Hash mit Informationen zum Hash.-Algorithmus. Der Wert \textit{!} bedeutet, dass kein Kennwort definiert wurde. \item[\textbf{3. Spalte}] Enthält die Tage seit Beginn der \href{https://de.wikipedia.org/wiki/Unixzeit}{Unix-Zeitrechnung}, wann das Kennwort zuletzt geändert wurde. \item[\textbf{4. Spalte}] Tage bevor das Kennwort geändert werden muss. \item[\textbf{5. Spalte}] Tage, ab wann eine Warnung, für das ablaufende Kennwort, ausgegeben werden soll. \item[\textbf{6. Spalte}] Tage bevor das Kennwort abläuft, nachdem keine Anmeldung erfolgt ist. \item[\textbf{7. Spalte}] Enthält die Tage seit Beginn der \href{https://de.wikipedia.org/wiki/Unixzeit}{Unix-Zeitrechnung}, seit dem das Kennwort abgelaufen ist. \item[\textbf{8. Spalte}] Reservierte Spalte. Wird aktuell nicht verwendet. \end{itemize} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 1a:} Ermitteln Sie den Hash-Algorithmus, welcher verwendet wurde um Ihr Kennwort zu hashen. \item \textbf{Aufgabe 1b:} Wann beginnt die Unix-Zeitrechnung? \item \textbf{Aufgabe 1c:} Wann wurde zuletzt das Kennwort des Benutzers root geändert? \item \textbf{Aufgabe 1d:} Ermitteln Sie die \textbf{User-ID} ihres aktuellen Benutzers mithilfe eines Befehls, welcher in den GNU Core Utilities enthalten und dem Bereich \glqq{}Shell Utilities\grqq{} zugeordnet ist. \item \textbf{Aufgabe 1e:} Nutzen Sie den Befehl \textit{wc}, um alle eingerichteten Benutzer auf ihrem System zu zählen. Lesen Sie die Manpage für weitere Informationen zu diesem Befehl. \end{itemize} % #>------------------------------------------------------------------------<# \subsubsection{Gruppen}% \label{sec:benutzer-gruppen-und-berechtigungen.benutzer-und-gruppen.gruppen} Ähnlich wie bei Benutzern gibt es auch Dateien in denen die Gruppen bzw. Gruppenkennwörter festgehalten sind. Dies sind die Dateien \textit{/etc/group} und \textit{/etc/gshadow}. Die beiden Dateien sind ähnlich wie \textit{/etc/passwd} und \textit{/etc/shadow} aufgebaut. Sie enthalten jedoch weniger Spalten. Die Datei \textit{/etc/group} enthält eine Spalte für den Namen der Gruppe, ob ein Eintrag in \textit{/etc/gshadow} vorhanden ist, die Gruppen-ID, als auch alle Benutzer, welche der Gruppe angehören. Die Benutzer werden durch ein Komma getrennt aufgelistet. Die Datei \textit{/etc/gshadow} enthält noch weniger Informationen. Die ersten drei Spalten sind identisch zu den Spalten aus der Datei \textit{/etc/shadow}. Die letzte Spalte enthält Benutzer, welcher das Kennwort ändern dürfen. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 2a:} Ermitteln Sie die \textbf{Gruppen-ID} ihres aktuellen Benutzers mithilfe eines Befehls, welcher in den GNU Core Utilities enthalten und dem Bereich \glqq{}Shell Utilities\grqq{} zugeordnet ist. \item \textbf{Aufgabe 2b:} Nutzen Sie den Befehl \textit{wc}, um die Gruppen zu zählen. Lesen Sie die Manpage für weitere Informationen zu diesem Befehl. \end{itemize} % #>------------------------------------------------------------------------<# \subsubsection{Benutzer root}% \label{sec:benutzer-gruppen-und-berechtigungen.root} Der Benutzer root besitzt auf allen Unix-artigen Systemen die User-ID und Gruppen-ID 0. Er besitzt vollen Zugriff auf das gesamte System und damit auf alle Dateien und Einstellungen aller Benutzer. Er kann beispielsweise ohne Einschränkungen auf alle angeschlossenen Geräte unter \textit{/dev}, als auch die Heimatverzeichnisse der Benutzer unter \textit{/home}, zugreifen. Der Benutzer root ist ein funktionaler Benutzer, mit dem sich reale Benutzer anmelden können, um Befehle, welche einen höheren Berechtigungsgrad benötigen, auszuführen. Durch die Verwendung des Benutzers root ist nachträglich nicht mehr nachvollziehbar, welcher reale Benutzer welchen Befehl ausgeführt hat. Aus diesem Grund und anderen Gründen wurde das Programm \textit{sudo} entwickelt. % #>------------------------------------------------------------------------<# \subsubsection{sudo}% \label{sec:benutzer-gruppen-und-berechtigungen.sudo} Das Programm \textit{sudo} führt den nachgestellten Befehl mit root Berechtigungen aus. Mithilfe von sudo lässt sich die Verwendung von root Berechtigungen auf einzelne Benutzer einschränken. Für die Verwendung von \textit{sudo} muss ein Benutzer unter RHEL basierenden Distributionen der Gruppe \textit{wheel} angehören oder der Gruppe \textit{sudo} bei Debian basierende Distributionen. Mithilfe des Befehls \textit{visudo} lässt sich die Konfiguration von \textit{sudo} bearbeiten. Dort kann unter anderem auch eingestellt werden, dass der Aufruf eines Befehls mit \textit{sudo} keiner erneuten Kennworteingabe des Benutzers benötigt. Mit dem folgenden Beispiel kann ein realer Benutzer mit \textit{sudo} den Ordner \textit{/mnt/sda1} erstellen, für welchen root Berechtigungen notwendig sind, da root der Eigentümer des Verzeichnisses \textit{/mnt} ist. \begin{bashcode} sudo mkdir --parent /mnt/sda1 \end{bashcode} Möchte man mehrere Befehle mit root Berechtigungen ausführen lohnt sich die Anmeldung als root Benutzer von einem normalen Benutzer aus. Dies kann entweder mit \textit{sudo -i} oder alternativ mit \textit{su} erreicht werden. % #>------------------------------------------------------------------------<# \subsubsection{Passwort ändern}% \label{sec:benutzer-gruppen-und-berechtigungen.benutzer-und-gruppen.s} Um das Passwort zu ändern reicht die Ausführung des Befehls \textit{passwd}. Damit ist es möglich das Kennwort des gerade verwendeten Benutzers zu ändern. Möchte man das Kennwort anderer Benutzer ändern, muss man root Berechtigungen besitzen, sei es als Benutzer root oder per \textit{sudo}, und gibt hinter den Befehl den Namen des Benutzers an, wessen Kennwort man ändern möchte. Das Programm \textit{passwd} ändert dem entsprechend die Zeile in \textit{/etc/shadow} für den Benutzer, für welchen das Passwort geändert werden soll, ab. Nachteil von \textit{passwd} ist, dass es interaktiv bedient werden muss - sprich, mit \textit{passwd} ist es nicht möglich Kennwörter von Benutzern per Skript zu ändern. Aus diesem Grund wurde das Programm \textit{chpasswd} entwickelt. Allerdings möchte man nicht nur das Kennwort eines Benutzers ändern können, sondern auch wann das Kennwort ablaufen soll oder ab wann das System eine Warnung ausgeben soll. Mit Hilfe des Programms \textit{chage} ist dies möglich. \begin{bashcode} sudo chage --list ${USER} \end{bashcode} % #>------------------------------------------------------------------------<# \subsubsection{Gruppe hinzufügen, bearbeiten und löschen}% \label{sec:benutzer-gruppen-und-berechtigungen.gruppen.add-mod-rm} Das Bearbeiten der Gruppen direkt in der Datei \textit{/etc/group} sollte vermieden werden und stattdessen auf die Programme zurück gegriffen werden, welche die Distribution bereit stellt. Zum Erstellen, Bearbeiten und Löschen werden folgende Programme zur Verfügung gestellt. \begin{itemize}[label={},itemsep=0pt] \item \textit{groupadd:} Erstellt eine neue Gruppe \item \textit{groupmod:} Modifiziert eine bestehende Gruppe \item \textit{groupdel:} Löscht eine Gruppe \end{itemize} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 3a:} Estellen Sie die Gruppe \textit{hr} für \textit{human resources} mit der \textit{GID} 2000. \item \textbf{Aufgabe 3b:} Vergewissern Sie sich, dass in der Datei \textit{/etc/group} die neue Gruppe mit entsprechender \textit{GID} angelegt wurde. \item \textbf{Aufgabe 3c:} Benennen Sie die Gruppe \textit{hr} nach \textit{dev} für \textit{development} um und überprüfen Sie, ob sich der Name der Gruppe in der Datei \textit{/etc/group} geändert hat. \item \textbf{Aufgabe 3d:} Ändern Sie die \textit{GID} auf 3000 und überprüfen Sie, ob diese sich in der Datei \textit{/etc/group} geändert hat. \item \textbf{Aufgabe 3e:} Löschen Sie die Gruppe \textit{dev}. \end{itemize} % #>------------------------------------------------------------------------<# \subsubsection{Benutzer hinzufügen, bearbeiten und löschen}% \label{sec:benutzer-gruppen-und-berechtigungen.benutzer.add-mod-rm} Ähnlich wie Gruppen können auch Benutzer hinzugefügt, modifiziert und gelöscht werden. Auf folgende Befehle kann zurück gegriffen werden. \begin{itemize}[label={},itemsep=0pt] \item \textit{useradd:} Erstellt einen neuen Benutzer \item \textit{usermod:} Modifiziert einen bestehenden Benutzer \item \textit{userdel:} Löscht den Benutzer \end{itemize} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 4a:} Erstellen Sie den Benutzer \textit{manfred} mit dem Namen \textit{Manfred Mertens}. Der Benutzer nutzt die \acrlong{acr:bash}. Sein Heimatverzeichnis soll unter \textit{/home} erstellt werden. Das Kennwort lautet \textit{manni}. Seine Primärgruppe lautet \textit{manfred}. Als \textit{UID} verwenden Sie \textit{2000}. \item \textbf{Aufgabe 4b:} Setzen Sie das Ablaufdatum des Kennworts für den Benutzer \textit{manni} auf den \textit{31. Juni} des nächsten Jahres und überprüfen Sie die passende Spalte aus der Datei \textit{/etc/shadow} oder nutzen Sie alternativ \textit{chage} oder \textit{passwd} zur Überprüfung. \item \textbf{Aufgabe 4c:} Fügen Sie den Benutzer der Gruppe \textit{wheel} hinzu. \item \textbf{Aufgabe 4d:} Entfernen Sie den Benutzer \textit{manfred} aus der Gruppe \textit{wheel} ohne ihn dabei aus anderen Gruppen zu entfernen. \item \textbf{Aufgabe 4e:} Setzen Sie das Kennwort des Benutzers auf \textit{manni-der-busfahrer}. \item \textbf{Aufgabe 4f:} Entfernen Sie den Benutzer \textit{manfred} und löschen Sie ggfls. seine Primärgruppe, sofern niemand mehr Mitglied ist. \end{itemize} % #>------------------------------------------------------------------------<# \subsection{Dateiberechtigungen}% \label{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen} % #>------------------------------------------------------------------------<# \subsubsection{DOS Ideologie}% \label{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen.dos-ideologie} Unter Windows sind Grundsätzlich alle Dateien, welche auf den Suffix \textit{.exe} enden Ausführbar. Unix-artige Systeme interpretieren Dateiendungen anders. Sie sind ausschließlich dafür da, damit Desktopmanager wie gnome, cinnamon, kde, xfce oder andere erkennen, um welche Datei es sich hier handelt und mit welchen Programmen, aus einer definierten Liste, diese geöffnet werden können. Dies bedeutet, dass auch die PDF-Datei \texttt{Aufgabensammlung.pdf} ausführbar sein kann, obwohl diese nur lesbar sein sollte, damit Programme wie \textit{evince} oder \textit{masterpdfeditor} sie einlesen können. % #>------------------------------------------------------------------------<# \subsubsection{Einfache Dateiberechtigungen}% \label{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen.einfach} Unter Unix-artigen Systemen, welche die GNU Core Utilities verwenden, ist das Programm \textit{ls} vorinstalliert. Das Programm dient zu Auflistung von Dateien und Verzeichnissen. Die Ausgabe ist eine Zusammenstellung von mehreren Einträgen unterschiedlicher Auflistungen, um Dateiberechtigungen exemplarisch zu erklären. \begin{verbatim} drwxr-xr-x. 2 markus users 40 29. Sep 21:48 hello-world -rw-r--r--. 1 christian users 0 29. Sep 21:48 hello-world2 srw-rw----. 1 root docker 0 5. Okt 19:34 docker.sock lrwxrwxrwx. 1 markus markus 38 14. Apr 11:32 .g -> .gnupg brw-rw----. 1 root disk 8 5. Okt 19:34 sda crw--w----. 1 root tty 4 5. Okt 19:34 tty0 -rwx------. 1 demo users 0 5. Okt 20:01 mybin \end{verbatim} Die Attributzeichenkette besteht auch 10 Zeichen und gibt Auskunft über den Typ als auch die Berechtigungen auf die Ressource. Das erste Attribut gibt den Typ der Ressource wieder. Folgende Attribute beschreiben die Ressource. \begin{itemize}[label={},itemsep=0pt] \item \textbf{-:} Ist eine normale Datei. \item \textbf{d:} \textbf{d}irectory - Verzeichnis. \item \textbf{s:} unix \textbf{s}ocket - Beispielsweise TCP socket eines Web Servers \item \textbf{l:} symbolic \textbf{l}ink - Link auf eine andere Datei oder anderes Verzeichnis. Ähnlich wie Desktop-Links unter Windows. \item \textbf{b:} \textbf{b}lock device - Festplatten. \item \textbf{c:} \textbf{c}haracter device - Terminal. \end{itemize} Die verbleibenden neun Attribute werden in drei Gruppen gesplittet. Jede Gruppe beschreibt die Berechtigungen für den Besitzer (engl. user, kurz u), die Gruppe (engl. group, kurz g) und alle anderen Benutzer, welche weder als Besitzer noch Mitglied in der genannten Gruppe sind. Diese Benutzer werden auch als Andere (engl. other, kurz o) beschrieben. Dabei haben die Attribute folgende Bedeutung: \begin{itemize}[label={},itemsep=0pt] \item \textbf{r:} \textbf{r}ead - Von Ressource lesen oder Verzeichnisinhalt auflisten. \item \textbf{w:} \textbf{w}rite - Ressource beschreiben oder Verzeichnisinhalt ändern (hinzufügen, umbenennen, löschen). \item \textbf{x:} e\textbf{x}ecute - Programm ausführen oder in das Verzeichnis hineinwechseln. \end{itemize} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 5a}: Sind block devices in der obrigen Ausgabe gelistet, wenn ja welche? \item \textbf{Aufgabe 5b:} Nenne alle Dateien aus der obrigen Ausgabe. \item \textbf{Aufgabe 5c:} Kann der Benutzer \textit{root} in das Verzeichnis \textit{hello-word} hineinwechseln, wenn ja warum? \item \textbf{Aufgabe 5d:} Welche Gruppe und was für Berechtigungen wurden der Aufzählung \textit{hello-world2} zugewiesen? \item \textbf{Aufgabe 5e:} Kann der Benutzer \textit{christian} das Programm \textit{mybin} ausführen? \item \textbf{Aufgabe 5f:} Kann der Benutzer \textit{demo} die Datei \textit{helloworld2} lesen? \item \textbf{Aufgabe 5g:} Wer kann mit welchen Berechtigungen mit dem Unix-Socket \textit{docker.sock} kommunizieren? \end{itemize} % #>------------------------------------------------------------------------<# \subsubsection{Änderung der Dateiberechtigungen}% \label{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen.mod} Die Berechtigungen auf Ressourcen als auch der Besitzer bzw. die Gruppe kann geändert werden. Dazu sind in GNU Core Utilities folgende Programme enthalten. \begin{itemize}[label={},itemsep=0pt] \item \textit{chown:} Ändert den Besitzer einer Ressource. \item \textit{chgrp:} Ändert die Gruppe einer Ressource. \item \textit{chmod:} Ändert die Berechtigung auf eine Ressource für alle anderen Benutzer, welche weder als Besitzer noch Mitglieder der Gruppe sind. \end{itemize} Das Ändern des Besitzers per \textit{chown} kann durch \textit{chown user ressource} geändert werden. Gleiches gilt für das Ändern der Gruppe: \textit{chgrp group ressource}. Möchte man den Besitzer als auch die Gruppe in einem ändern kann dies durch \textit{chown} umgesetzt werden. Dabei muss der Besitzer als auch die Gruppe getrennt durch einen Doppelpunkt angegeben werden: \textit{chown user:group ressource}. Alternativ zu den Namen kann auch die \textit{UID} bzw. die \textit{GID}, für den Name der Gruppe, verwendet werden. Die Dateiberechtigungen lassen sich per \textit{chmod} anpassen. Das Programm \textit{chmod} unterstützt die Symbolische- als auch die Oktal-Notation, um Berechtigungen für Ressourcen zu beschreiben. Für die Oktal-Natation müssen die Oktal-Werte für jede Gruppe (Besitzer, Gruppe, Andere) addiert werden, um die symbolische Notation nachbilden zu können. Bei der Symbolischen-Notation können die Gruppen über die Buchstaben u für engl. user, g für engl. group und o für engl. other referenziert werden. \begin{table}[H] \centering \begin{tabularx}{\textwidth}{X|X|X} \textbf{Berechtigung} & \textbf{Oktal-Wert} & \textbf{Symbolisches-Attribut} \\ \hline\hline read & 4 & r \\ write & 2 & w \\ execute & 1 & x \\ \end{tabularx} \end{table} Hier zwei Beispiele, um die Berechtigungen aus der Aufzählung aus Kapitel \ref{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen.einfach} anzupassen. Dabei führen die ersten beiden und letzen beiden Befehle, unabhängig von der Notation, zu dem gleichen Ergebnis. \begin{bashcode} $ chmod 750 helloworld2 $ chmod u=+rwx,g=+rx-w,o=-rwx helloworld2 $ chmod 775 helloworld mybin $ chmod u=+rwx,g=+rwx,o=+rx-w mybin $ ls -la drwxr-x--- 2 markus users 40 29. Sep 21:48 hello-world -rwxrwxr-x 1 demo users 0 5. Okt 20:01 mybin \end{bashcode} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 6a:} Wie lautet der Befehl die Berechtigung zum lesen des Verzeichnis \textit{helloworld2} für die Gruppe zu entfernen? Bitte gebe die Symbolische- und Oktal-Notation an. \item \textbf{Aufgabe 6b:} Wie lautet der Befehl der Datei mybin die Berechtigung zum Ausführen für alle Gruppen (Besitzer, Gruppe und Andere) zu entfernen? Symbolische- und Oktal-Notation erforderlich. \item \textbf{Aufgabe 6c:} Wie lautet der Befehl anderen Benutzern, welche nicht Besitzer oder Mitglied der Gruppe docker sind von dem Unix-Socket \textit{docker.sock} zu lesen. Symbolische- und Oktal-Notation erforderlich. \item \textbf{Aufgabe 6d:} Wie lautet der Befehl den Besitzer auf \textit{root} und die Gruppe auf \textit{markus} für die Datei \textit{helloworld} zu setzen? Einzeiler bitte. \end{itemize} % #>------------------------------------------------------------------------<# \subsubsection{Erweiterte Dateiberechtigungen}% \label{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen.erweitert} Neben den einfachen Dateiberechtigungen unterstützen alle Unix-artige Systeme die erweiterten Dateiberechtigungen. Diese werden \textit{setuid}, \textit{setgid} und \textit{sticky bit} genannt. Sie lassen sich ebenfalls über die Symbolische- als auch die Oktal-Notation setzen. \begin{table}[H] \centering \begin{tabularx}{\textwidth}{X|X|X} \textbf{Berechtigung} & \textbf{Oktal-Wert} & \textbf{Symbolisches-Attribut} \\ \hline\hline setuid & 4 & s \\ setgid & 2 & s \\ sticky bit & 1 & t \\ \end{tabularx} \end{table} Die \textit{setuid} auf Dateien wird ignoriert, außer sie ist ausführbar. Ist die Datei ausführbar wird diese mit den Berechtigungen des Besitzers ausgeführt. Ein gutes Beispiel ist das Programm \textit{/bin/passwd}. Ohne die Option \textit{setuid} wäre ein normaler Benutzer nicht in der Lage sein Kennwort zu ändern, da das Programm die Dateien \textit{/etc/passwd} und \textit{/etc/shadow} bearbeitet, welche dem Besitzer \textit{root} als auch der Gruppe \textit{root} gehören. Ist das \textit{setuid} auf eine Datei oder ein Verzeichnis gesetzt, wird das Attribut \textit{x} durch ein \textit{s} unter den Berechtigungen des Besitzers in der Attributzeichenkette ersetzt. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 7a:} Überprüfen Sie, ob für das Programm \textit{/bin/passwd} \textit{setuid} gesetzt ist. \end{itemize} Das setzen von \textit{setuid}, \textit{setgid} und \textit{sticky bit} wird per \textit{chmod} erreicht. Es kann die Symbolische- als auch die Oktal-Notation verwendet werden. Exemplarisch wird nachfolgend \textit{setuid} über die Symbolische- als auch Oktal-Notation für die Datei hello-world.py gesetzt. \begin{bashcode} $ chmod 4755 hello-world-py $ chmod u=+rws,g=+rx-w,o=+rx-w hello-world-py \end{bashcode} Die erweiterte Berechtigung \textit{setgid} verhält sich analog zu \textit{setuid}, was Dateien betrifft. Es hat jedoch noch die Besonderheit, dass wenn \textit{setgid} auf ein Verzeichnis gesetzt ist alle erstellten Dateien und Verzeichnisse unterhalb des Verzeichnisses die Gruppe erben. Allerdings \textbf{nicht} die Berechtigungen. Dies kann per \acrlongpl{acr:acl} realisiert werden. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 7b:} Erstellen Sie das Verzeichnis \textit{/tmp/setgid} und setzen Sie die Gruppe auf \textit{users}. Überprüfen Sie, ob \textit{setgid} erfolgreich gesetzt wurde. \item \textbf{Aufgabe 7c:} Erstellen Sie eine neue Datei als auch ein neues Verzeichnis in \textit{/tmp/setgid}. Überprüfen Sie, ob die Gruppe \textit{users} für die von ihnen erstellte Datei als auch Verzeichnis gesetzt wurde. \end{itemize} Das \textit{sticky bit} wird auf Dateien ignoriert. Wird es allerdings auf ein Verzeichnis gesetzt verhindert es, dass Benutzer Dateien und Verzeichnisse löschen können für welche sie nicht als Besitzer hinterlegt sind. % #>------------------------------------------------------------------------<# \subsubsection{Access-Control-List}% \label{sec:benutzer-gruppen-und-berechtigungen.dateiberechtigungen.acl} Mit \acrfull{acr:acl} können Berechtigungen granularer vergeben werden. Sie erweitern somit die Rechteverwaltung unter Linux und werden insbesondere dafür verwendet, Berechtigungen für neu angelegte Dateien und Verzeichnisse innerhalb eines Verzeichnisses zu vererben. Unter Fedora muss das Paket \textit{acl} installiert sein, um die Rechteverwaltung granularer einstellen zu können. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 8a:} Installieren Sie mit \textit{yum} das Paket \textit{acl}, sofern dies nicht installiert ist. \end{itemize} Das Paket \textit{acl} enthält mehrere Programme, um \acrshortpl{acr:acl} auf dem System verwalten zu können. Dies sind die wichtigsten: \begin{itemize}[label={},itemsep=0pt] \item \textit{setfacl:} Dient zum definieren von \acrshortpl{acr:acl} auf ein Verzeichnis oder eine Datei \item \textit{getfacl:} Liest definierte \acrshortpl{acr:acl} von einem Verzeichnis oder einer Datei aus \end{itemize} Die Programme \textit{setfacl} und \textit{getfacl} folgen einer ähnlichen Befehlsstruktur wie \textit{chmod}, \textit{chown} und \textit{chgrp}. Hier ein Beispiel, um dem Benutzer \textit{christian} die Berechtigung \textit{rwx} auf das Programm \textit{mybin} per \acrshort{acr:acl} einzuräumen. \begin{bashcode} $ setfacl -m "u:christian:rwx" mybin \end{bashcode} Ähnlich verhält sich das Programm, wenn man einer Gruppe oder Benutzern, welche weder Besitzer noch Mitglieder einer Gruppe sind, Berechtigungen einräumen möchte. \begin{bashcode} $ setfacl -m "g:christian:r-x" mybin $ setfacl -m "o:r-x" mybin \end{bashcode} Führt man den Befehl \textit{ls -la} erneut aus, macht das \textit{+}-Zeichen hinter der Attributzeichenkette auf die definierte \acrshort{acr:acl} aufmerksam. \begin{verbatim} drwxr-xr-x. 2 markus users 40 29. Sep 21:48 hello-world -rw-r--r--. 1 christian users 0 29. Sep 21:48 hello-world2 srw-rw----. 1 root docker 0 5. Okt 19:34 docker.sock lrwxrwxrwx. 1 markus markus 38 14. Apr 11:32 .g -> .gnupg/ brw-rw----. 1 root disk 8 5. Okt 19:34 sda crw--w----. 1 root tty 4 5. Okt 19:34 tty0 -rwx------+ 1 demo users 0 5. Okt 20:01 mybin \end{verbatim} Die definierte \acrshort{acr:acl} kann per \textit{getfacl} ausgelesen werden. \begin{bashcode} $ getfacl mybin # file: mybin # owner: demo # group: users user::rwx user:christian:rwx group::--- group:christian:r-x mask::rwx other::r-x \end{bashcode} \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 8b:} Erstellen Sie folgende Verzeichnisstruktur: \textit{/tmp/acl-test/share} \item \textbf{Aufgabe 8c:} Stellen Sie sicher, dass ausschließlich der Benutzer \textit{root} und die Gruppe \textit{root} über die klassichen Dateiberechtigungen Zugriff auf das Verzeichnis \textit{/tmp/acl-test} erhalten. \item \textbf{Aufgabe 8d:} Erstellen Sie einen neuen Benutzer mit dem Namen \textit{fuacl} und räumen Sie diesem per \acrshort{acr:acl} Berechtigungen ein, Dateien und Verzeichnisse aus dem Verzeichnis \textit{/tmp/acl-test} zu lesen, ändern und deren Inhalt aufzulisten. Überprüfen Sie die Einstellung! \item \textbf{Aufgabe 8e:} Entziehen Sie dem Benutzer \textit{fuacl} die Berechtigung Dateien und Verzeichnisse aus dem Verzeichnis \textit{/tmp/acl-test/shared} zu lesen und aufzulisten. Überprüfen Sie die Einstellung! \item \textbf{Aufgabe 8f:} Stellen Sie sicher, dass neu erstellte Dokumente in \textit{/tmp/acl-test} immer der Gruppe \textit{root} gehören und die Berechtigung \textit{rwx} für Verzeichnisse und \textit{rw-} für Dateien gesetzt werden. \textit{Tipp: setfact --default}. Überprüfen Sie die Berechtigung durch erstellen eines neuen Dokuments. \item \textbf{Aufgabe 8g:} Entfernen Sie ausschließlich jene \acrshort{acr:acl}, welche vererbt wird. \item \textbf{Aufgabe 8h:} Entfernen Sie rekursive alle \acrshortpl{acr:acl}. \end{itemize} % #>------------------------------------------------------------------------<# \subsection{Praxisaufgabe: Verzeichnisstruktur mit Dateiberechtigungen erstellen}% \label{sec:benutzer-gruppen-und-berechtigungen.praxis-task} Sie befinden sich in folgender Situation: Das Unternehmen indem Sie arbeiten wechselt aus Kostengründen von Windows Sharepoint zu Samba. Ihr Vorgesetzter hat Sie daher gebeten Vorbereitungen für den Umstieg zu treffen. Darunter auch die notwendige Verzeichnisstruktur für die Abteilungen als auch die Benutzer und Gruppen zu erstellen, sowie Berechtigungen den Vorgaben entsprechend anzupassen. Folgende Beziehungen führt das Unternehmen zwischen Mitarbeiter und Abteilungen. \begin{table}[H] \centering \begin{tabularx}{\textwidth}{X|X} \textbf{Mitarbeiter} & \textbf{Abteilungen} \\ \hline\hline Hugo McKinnock & Entwicklung \\ Hans Rakinzky & Entwicklung, System Administration \\ Marie Haseloff & Personalabteilung, Buchhaltung \\ Sophie Becker & Personalabteilung \\ Axel Tuller & System Administration \\ Tobias Moretti & Entwicklung, Qualitätssicherung \\ Lisa Meerkamp & Sekretärin \\ Manfred Krupp & Vorstand \\ \end{tabularx} \end{table} Die Verzeichnisstruktur ist unter \textit{/srv/documents} zu erstellen. Dabei besitzt jede Abteilung ihr eigenes Verzeichnis. Innerhalb ihres Verzeichnisses erhalten fast alle Abteilungen das Verzeichnis \textit{public} und \textit{private}. Die Abteilung Entwicklung und Qualitätssicherung haben kein Verzeichnis \textit{private}, da ihre Dokumente allen Benutzern im Unternehmen zugänglich sein sollen. Dagegen besitzen die Abteilungen Sekreteriat als auch Vorstand kein Verzeichnis \textit{public}, sondern ausschließlich \textit{private}. In den Verzeichnissen \textit{private} können ausschließlich Mitglieder der Abteilung lesen und schreiben. Neu erstellte Dokumente gehören der Abteilung und dem Benutzer \textit{root}. Ähnlich ist dies für das Verzeichnis \textit{public}. Alle Benutzer können die Dateien oder Verzeichnisse öffnen. Allerdings können nur Mitglieder der Abteilung neue Dokumente erstellen und bearbeiten. Bitte geben Sie die nötigen Befehle an, mit denen Sie die nachfolgenden Aufgaben lösen. \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 9a:} Erstellen Sie die Gruppen, beginnend mit der \textit{GID} 2000. \item \textbf{Aufgabe 9b:} Erstellen Sie die Benutzer, beginnend mit der \textit{UID} 2000. Die Primärgruppe ist \textit{users}. \item \textbf{Aufgabe 9c:} Verknüpfen Sie die Benutzer mit den Gruppen. \item \textbf{Aufgabe 9d:} Erstellen Sie die beschriebene Verzeichnisstruktur. \item \textbf{Aufgabe 9e:} Setzen Sie die beschriebenen Berechtigungen um. \item \textbf{Aufgabe 9f:} Melden Sie sich unter dem Benutzer von Marie Haseloff per \textit{sudo} an und überprüfen Sie folgende Berechtigungen: \begin{itemize}[label={},itemsep=0pt] \item \textbf{Aufgabe 9f$_1$:} Erstellen, bearbeiten und löschen von Dateien und Verzeichnissen in der für Ihr, über die Abteilung, zugewiesenen Verzeichnisse. \item \textbf{Aufgabe 9f$_2$:} Neu erstellte Dokumente und Verzeichnisse gehören der jeweiligen Abteilung. Verzeichnisse haben die Gruppenberechtigung \textit{rwx}. Dateien haben die Gruppenberechtigung \textit{rw-}. \item \textbf{Aufgabe 9f$_3$:} Von Dateien und Verzeichnissen der Abteilung Vorstand darf weder gelesen noch geschrieben als auch deren Inhalt gelistet werden. \item \textbf{Aufgabe 9f$_4$:} Dateien aus dem Verzeichnis \textit{public} der Abteilung System Administration sind lesbar, aus dem Verzeichnis \textit{private} nicht. \end{itemize} \end{itemize}