Markus Pesch
1579104655
All checks were successful
continuous-integration/drone/push Build is passing
683 lines
33 KiB
TeX
683 lines
33 KiB
TeX
% <#>-----------------------------------------------------------------------<#>
|
|
\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}
|