aboutsummaryrefslogtreecommitdiff
path: root/course/arbeitsheft/arbeitsheft.tex
blob: ea5871cea0af0457dc25b50ce109487f7260730b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
\documentclass[12pt, a4paper]{article}

\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\MakeOuterQuote{"}

\usepackage[backend=biber,style=reading]{biblatex}
\addbibresource{../literature.bib}

\usepackage[margin=0cm]{geometry}

\usepackage{wrapfig}
\usepackage{caption}

\usepackage[table]{xcolor}
\usepackage{tabularx}

\usepackage{afterpage}

\usepackage{hyperref}
\hypersetup{colorlinks=true, linkcolor=blue, linktocpage}

\usepackage{minted}
% rubber: shell_escape

\usepackage{fontawesome}

\usepackage[most]{tcolorbox}

\newtcolorbox{defbox}[2][]{colback=yellow!5!white,
colframe=yellow!75!black,fonttitle=\bfseries,
colbacktitle=yellow!85!black,enhanced,
attach boxed title to top left={yshift=-0.03cm},
title={#2},#1}

\newtcolorbox{aufgbox}[2][]{colback=blue!5!white,
colframe=blue!75!black,fonttitle=\bfseries,
colbacktitle=blue!85!black,enhanced,
attach boxed title to top left={yshift=-0.03cm},
title={#2},#1}

\newtcolorbox{expbox}[2][]{colback=orange!5!white,
colframe=orange!75!black, enhanced, #1}

\newtcolorbox{graycode}[2][]{colback=gray!5!white,
colframe=gray!75!black, enhanced, #1}

\usepackage{setspace}
\onehalfspace

% Those are used for showkeys long key splitting, as described in
% https://tex.stackexchange.com/a/311421/1280, but may be otherwise
% come in handy.
\usepackage{seqsplit}
\usepackage{xstring}

\usepackage{graphicx}
\usepackage{standalone}
\usepackage{pdfcomment}

\usepackage{tikz}
\usetikzlibrary{
  arrows.meta,
  calc,
  positioning,
  decorations.pathreplacing,
  tikzmark,
}

\newcommand\kariert[2][0.5cm]{%
  \begin{tikzpicture}[gray, step=#1]
    \pgfmathtruncatemacro\anzahl{(\linewidth-\pgflinewidth)/#1} % maximale Anzahl Kästchen pro Zeile
    \draw (0, 0) rectangle (\anzahl*#1, #2*#1) (0, 0) grid (\anzahl*#1, #2*#1);
  \end{tikzpicture}
}

\usepackage[school]{pgf-umlcd}

% rubber: watch arbeitsheft.acn
% rubber: watch arbeitsheft.acr
\usepackage[acronym]{glossaries}
\makeglossaries

\newacronym{SOS}{SOS}{School Operating System}
\newacronym{UID}{UID}{Benutzerkennung}
\newacronym{GID}{GID}{Gruppenkennung}
\newacronym{PID}{PID}{Prozessnummer}
\newacronym{ZSL}{ZSL}{Zugriffssteuerungsliste}
\newacronym{CWD}{CWD}{Current Working Directory}

% \bibliography{bibliography}

\usepackage{titling}
\usepackage{fancyhdr}

\usepackage[german]{cleveref}

\author{Florian Fischer}
\title{Arbeitsheft Betriebssysteme}

\definecolor{bgcolor}{HTML}{330136}
\definecolor{titlecolor}{HTML}{FF5E35}

\definecolor{inlinecodeboxbackgroundcolor}{HTML}{F8F8F8}
\definecolor{inlinecodeboxframecolor}{HTML}{DDDDDD}

% inlinecode command for including code snippets inline
% (fake verbatim, so all special character should be escaped,
% or textmode equivalents of special characters should be used)
\newcommand{\inlinecode}[1]{%
  \begin{tikzpicture}[baseline=0ex]%
    \node[anchor=base,%
      text height=1em,%
      text depth=1ex,%
      inner ysep=0pt,%
      draw=inlinecodeboxframecolor,%
      fill=inlinecodeboxbackgroundcolor,%
      rounded corners=2pt] at (0,0) {\footnotesize\texttt{#1}};%
  \end{tikzpicture}%
}

\newcommand{\boldred}[1]{\textbf{\textcolor{red}{#1}}}

\fancyhf{}
\fancyhf[HC]{\thetitle}
\fancyhf[HL]{SOS}
\fancyhf[FC]{\thepage}

\begin{document}
\pagestyle{empty}

\pagecolor{bgcolor}\afterpage{\nopagecolor}
% \maketitle
\begin{titlepage}
\setlength\parindent{0pt}
\phantom{o}\\[2.5cm]

\textcolor{titlecolor}
{\hspace{1cm} \huge \textbf{SOS - Hilfe, was ist hier los?}}
\vspace{1.5cm}

\textcolor{titlecolor}
{\hspace{1cm} \Large \textbf{Anleitung zum School Operating System.}}
\vspace{1cm}
\textcolor{titlecolor}
\hrule
\vspace{1cm}
\begin{centering}
\hfill
\includegraphics[keepaspectratio, width=0.8\textwidth]{logo.png}
\hfill
\end{centering}
\textcolor{titlecolor}
\hrule
\vspace{1cm}
\textcolor{titlecolor}
{\hspace{1cm} \large \textbf{Arbeitsheft zum Thema Betriebssysteme}}

\end{titlepage}

\newgeometry{margin=2cm}

\pagestyle{fancy}
\pagenumbering{roman}

\tableofcontents
\vfill{}
{
\onehalfspacing
\setlength\parindent{0pt}
\textbf{\large Konzeption des Arbeitshefts}: \\[0.3cm]

Das Arbeitsheft begleitet den Einsatz des \gls{SOS} im Unterricht, das die Grundlagen und Aufgaben von Betriebssystemen nach dem LehrplanPlus der 12. Jahrgangsstufe mit erhöhtem Anforderungsbereich behandelt. \\[0.2cm]

\textbf{\theauthor} \\
Hans-Sachs-Gymnasium Nürnberg \\
E-Mail: \href{mailto:florian.fischer@muhq.space}{florian.fischer@muhq.space} \\[0.2cm]

Dieses Arbeitsheft ist lizenziert unter einer \href{https://creativecommons.org/licenses/by-sa/4.0/}{Creative Commons CC BY-SA Lizenz} (Namensnennung – Weitergabe unter gleichen Bedingungen).
}


\newpage
\pagenumbering{arabic}

\section*{Über \gls{SOS} und dieses Arbeitsheft}

Dieses Arbeitsheft kann als Begleitung oder als Inspiration in Kombination mit \gls{SOS} im Unterricht eingesetzt werden.

\subsection*{\acrfull{SOS}}

Bei \gls{SOS} handelt es sich um eine Kombination aus einer portablenn virtuellen Maschine (\href{https://www.qemu.org/}{QEMU}) und dem von der Universität Verona entwickelten und für \gls{SOS} und den Informatikunterricht angepassten Betriebssystem \href{https://mentos-team.github.io/}{MentOS}.

\subsubsection*{Ziele}

Betriebssysteme sind in unserem digitalen Alltag allgegenwärtig.
Dennoch ist dieser Fakt den meisten Anwenderinnen nicht bewusst, was dafür spricht, dass moderne Betriebssysteme ihrer Aufgabe nachkommen, die einfache und sichere Benutzung der unterschiedlichsten Geräte von Smartwatches, über Mobiltelefone zu klassischen PCs reibungslos zu ermöglichen.

\gls{SOS} dient dazu, die oft schwer erfahrbaren Aufgaben von Betriebssystemen erlebbar zu machen.
Es werden die wichtigsten und universellen Begriffe im Kontext von Betriebssystemen wiederholt und veranschaulicht.
Besonderer Fokus liegt dabei auf der Gewährleistung eines sicheren Betriebs durch die Verwaltung und Durchsetzung von Berechtigungen im Dateisystem.

Außerdem lädt \href{https://github.com/mentos-team/MentOS}{MentOS} durch seinen verhältnismäßig einfachen Aufbau, sowie die vorhandene \href{https://mentos-team.github.io/doc/doxygen/index.html}{Dokumentation} dazu ein, Neues zu entdecken, weiterführendes Interesse zu wecken und in gewissen Umfang auch zu befriedigen.

\subsubsection*{Benutzung}

\gls{SOS} ist so konzipiert, dass die Benutzung im Unterricht möglichst einfach ist.

\begin{enumerate}
\item Eine einsatzfähige Version von \gls{SOS} inklusive aller Arbeitsmaterialien kann unter \\ \href{github.com/fischerling/releases}{https://github.com/fischerling/SOS/releases} direkt heruntergeladen werden.
Die Datei \\ \inlinecode{sos-win.zip} enthält alle benötigten Komponenten zum Einsatz von \gls{SOS}.
\item Zur Benutzung von \gls{SOS} muss das heruntergeladene Archiv komplett extrahiert werden.
\item Um das Betriebssystem in der enthaltenen virtuellen Maschine zu starten, reicht es die Datei \inlinecode{run.bat} durch Doppelklick auszuführen.
Gegebenenfalls muss eine Sicherheitswarnung von Windows, bestätigt werden.
\item Nachdem MentOS in der virtuellen Maschine gestartet ist, wird die Nutzenden nach einem Login, wie in \Cref{fig:login} dargestellt, gefragt.
\begin{figure}
\includegraphics[keepaspectratio, width=\textwidth]{login_prompt.png}
\caption{Login-Aufforderung von MentOS}
\label{fig:login}
\end{figure}
Alle Aufgaben in \gls{SOS} sind für den Benutzer \inlinecode{alice} mit Passwort \inlinecode{alice} ausgelegt.
% \item \label{sec:start_exercise} Übungsaufgaben in \gls{SOS} bestehen meist aus zwei Programmen.
% Ein \inlinecode{setup} Programm bereitet den Zustand des Systems für die Aufgabe vor.
% Das \inlinecode{checkup} Programm dient dazu, den Bearbeitungsstand der Aufgabe interaktiv zu überprüfen.
% Die Aufgabenprogramme sind im Dateisystem unter \inlinecode{/usr/bin/exercises/} zu finden.
\end{enumerate}

\textbf{Tipp}: Um \gls{SOS} leichter Benutzen zu können, bietet es sich an die Schriftgröße in QEMU unter \emph{View} zu vergrößern.
Außerdem kann der potentiell gefangene Mauszeiger in QEMU durch Drücken von \inlinecode{Strg + Alt + G} wieder befreit werden.

\newpage
\section{Grundlagen und erste Schritte}

\begin{defbox}{Betriebssystem}
Das Betriebssystem ist im vereinfachtem Sinn die Software, die im privilegierten \textit{Kernelmodus} der Hardware ausgeführt wird, siehe \Cref{fig:stack}.
Dies muss aber nicht immer der Fall sein.
Grundsätzlich hat das Betriebssystem die Aufgabe die bestehende Hardware den Nutzerprogrammen in geeigneter Weise zur Verfügung zu stellen und deren sichere Verwendung zu gewährleisten.
\end{defbox}

Der \emph{Kern} des Betriebssystems, das zentrale Programm, das alle notwendigen privilegierten Operationen ausführt, wird englisch \emph{kernel} genannt.
Man unterscheidet unterschiedliche Arten von \emph{Betriebssystemkernen} anhand der in ihnen enthaltenen Funktionen und wie ihre Dienste den anderen Schichten angeboten werden.
\emph{Monolithische kernel}, in denen alle Funktionen des Betriebssystems in einem Programm im privilegierten Modus der Hardware umgesetzt werden, haben sich im Alltag aus Effizienzgründen durchgesetzt.

\begin{wrapfigure}{r}{8.7cm}
\input{figures/stack.tikz}
\caption{Platz des Betriebssystems im Stapel der Technologien.}
\label{fig:stack}
\end{wrapfigure}

Die Hauptaufgabe des Betriebssystems ist demnach die Verwaltung und Bereitstellung der vorhandenen Hardwareressourcen, wie der Rechenzeit auf den Rechenkernen, den Hauptspeicher, sowie Zugriff auf Peripherie-Geräte wie das Netzwerk, Festplatten oder Ein-/ und Ausgabegeräte.

\label{sec:security_safety}
Dabei muss das Betriebssystem, die Sicherheit der Ressourcen (englisch \emph{security}) gegen bösartige Dritte, andere Nutzer auf dem System, Schadsoftware, Angriffe über die angeschlossenen Peripherie-Geräte, zumeist das Netzwerk, sicherstellen.

Darüber hinaus ist es auch Aufgabe des Betriebssystems, die Betriebssicherheit (englisch \emph{safety}) zu gewährleisten, dass heißt, beispielsweise den Verlust von Daten oder das Abstürzen des Systems bei einem Fehler zu verhindern.
Auch muss der Zugriff auf die Hardware zentral koordiniert werden, um beispielsweise die fehlerhafte gleichzeitige Nutzung der Festplatte durch mehrere Nutzerprogramme zu verhindern.

Um diese Schutzziele zu erfüllen, arbeitet das Betriebssystem eng mit der verwendeten Hardware zusammen.
Diese erlaubt es beispielsweise durch die Trennung der Ausführung in \textit{Benutzermodus} und \textit{Kernelmodus}, gewisse Operationen auf das Betriebssystem einzuschränken.
Darüber hinaus sorgt die Hardware nach Instruktion durch das Betriebssystem dafür, dass Programme nur auf ihren eigenen exklusiven Speicherbereich und nicht den anderer Programme zugreifen können.
Das schützt sowohl das gesamte System vor Fehlern in einzelnen Programmen, sowie das einzelne Programm vor dem böswilligen Zugriff Dritter.

\begin{aufgbox}{Arbeitsauftrag: Los gehts!}
\begin{wrapfigure}{r}{8.5cm}
\centering
\includegraphics[keepaspectratio, width=8cm]{intro_prompt.png}
\caption{Starten des \texttt{intro} Programms, nach erfolgreicher Anmeldung.}
\label{fig:intro_start}
\end{wrapfigure}

Um den Umgang mit dem rein textbasierten \gls{SOS} zu üben und einige grundlegende Konzepte aus der Welt der Betriebssysteme zu erkunden, stellt \gls{SOS} ein \inlinecode{intro} Programm zur Verfügung.
\begin{enumerate}
\item Starten Sie, falls noch nicht geschehen, \gls{SOS} durch Ausführen der Datei \inlinecode{run.bat}.
\item Melden Sie sich als der Benutzer \inlinecode{alice} mit dem Passwort \inlinecode{Alice} an.
\item Starten Sie nach einer erfolgreichen Anmeldung, wie in \Cref{fig:intro_start} gezeigt, das \inlinecode{intro} Programm durch Eintippen des Namens und Drücken der Enter-Taste. 
\end{enumerate}
\end{aufgbox}

Im Folgenden werden die Konzepte in der Reihenfolge, in der sie im Ablauf des \texttt{intro}-Programms auftauchen, beschrieben.

\subsection{Prozesse}

Eines der fundamentalsten Konzepte eines Betriebssystems ist der \emph{Prozess}.
Ein Prozess repräsentiert ein laufendes Programm.
Diese Abstraktion erlaubt es, mehrere Programme scheinbar gleichzeitig auf nur einem Rechenkern auszuführen.

\begin{defbox}[breakable]{Prozess}
Ein Prozess besteht aus allen Datenstrukturen, die benötigt werden, um ein Programm auszuführen, beispielsweise einem exklusiven Speicherbereich, sowie dem auszuführenden Programmcode.
Jeder Prozess hat einen \emph{Zustand}, anhand dessen er in der Ablaufplanung des Betriebssystems, berücksichtigt wird.
Wartet ein Prozess auf eine Ressource, wie beispielsweise Daten von der Festplatte, wird er von der Ablaufplanung ausgenommen bis die Ressource verfügbar ist.

\begin{wrapfigure}{r}{4.5cm}
\vspace{-0.5cm}
\begin{tikzpicture}
\begin{class}[text width=4cm]{PROZESS}{0,4}
\attribute{Zustand}
\attribute{Besitzer}
\attribute{Argumente}
\attribute{CWD}
\attribute{Elternprozess}
\attribute{Ausgabe-Streams}
\end{class}
\end{tikzpicture}
\caption{Vereinfachte Klassenkarte eines Prozesses}
\label{fig:proccess_class}
\end{wrapfigure}

Um die Sicherheit des Systems zu gewährleisten, hat jeder Prozess zugewiesene Berechtigungen, herkömmlich und so auch in \gls{SOS} sind die Berechtigungen mit dem \emph{Besitzer} und der Gruppe des Prozesses verbunden.
Der \emph{root} Nutzer, mit der \gls{UID} 0 hat in UNIX-ähnlichen Systemen uneingeschränkte Rechte, vergleichbar mit dem \emph{Admin} Nutzer eines Windows System.
Die \gls{UID} und \gls{GID} eines Prozesses werden beim Erstellen des Prozesses vom \emph{Elternprozess} geerbt.
Da ein Prozess immer nur von einem anderen Prozess erzeugt werden kann, bilden alle Prozesse des Systems einen Baum.
Wobei die Wurzel des Baums, der \texttt{init}-Prozess mit \gls{PID} 1 vom Betriebssystem gestartet wird.
\end{defbox}

Die \emph{Kommandozeile} ermöglicht die rein textbasierte Benutzung des Computer, das heißt die Erzeugung und Kontrolle von Prozessen.
Ein \inlinecode{shell} genanntes Programm, liest Zeile für Zeile Befehle des Nutzers ein.
Jede Zeile wird dabei anhand der enthaltenen Leerzeichen getrennt.

\begin{wrapfigure}[7]{l}{6cm}
\vspace{-0.75cm}
\begin{expbox}{}
Programme werden anhand ihres Namens in Verzeichnissen, im \texttt{Suchpfad}\\
(UNIX: \texttt{\$PATH}; Windows: \texttt{Path}) gesucht.
\end{expbox}
\end{wrapfigure}

Das erste Wort der Zeile wird als Name eines Programms interpretiert.
Es wird ein neuer Prozess gestartet, dieser führt das Programm, das anhand des Namens gefunden wurde, aus.
Der Rest der Zeile wird dem neuen Programm als \emph{Argumente} übergeben.

Jeder Prozess hat ein Verzeichnis zugewiesen, in dem er aktuell "arbeitet" und von dem aus alle \hyperref[sec:rel_paths]{relativen Dateipfade} interpretiert werden.
Dieses "Arbeitsverzeichnis" wird englisch \gls{CWD} genannt.
Das \gls{CWD} wird von dem Prozess, der den neuen Prozess startet, dem \emph{Elternprozess} geerbt.
In der shell kann das \gls{CWD} mit dem Befehl \inlinecode{cd} (englisch \textcolor{red}{c}hange \textcolor{red}{d}irectory) geändert werden.

% Mehrbenutzerbetrieb

\subsection{Dateien}

Ein weiteres essentielles Konzept nahezu aller Betriebssysteme ist die \emph{Datei}.
Um die Eigenheiten verschiedener persistenter Speichermedien, von Festplatten, über USB-Sticks bis hin zu Magnetbändern, zu verstecken, bieten Betriebssysteme das Konzept von Dateien an.
Um Dateien zu strukturieren werden besondere Dateien sogenannte Verzeichnisse (englisch \emph{directory}) verwendet.
Ähnlich zu Prozessen können Dateien in einem Dateisystem in einer Baumstruktur gruppiert werden (vergleiche \Cref{fig:fs_tree}).

\begin{defbox}[breakable]{Datei}
\begin{wrapfigure}{r}{4.7cm}
\vspace{-0.5cm}
\hspace{0.1cm}
\begin{tikzpicture}
\begin{class}[text width=4cm]{DATEI}{0,4}
\attribute{Name}
\attribute{Typ}
\attribute{Größe}
\attribute{Besitzer}
\attribute{Berechtigungen}
\end{class}
\end{tikzpicture}
\caption{Vereinfachte Klassenkarte einer Datei}
\label{fig:file_class}
\end{wrapfigure}
Die gängigste Umsetzung von Dateien ist sie als Folge von Bytes bekannter \emph{Größe} zu behandeln.
Der Inhalt einer Datei hat für das Betriebssystem normalerweise keine Bedeutung und muss von Nutzerprogrammen selbst interpretiert werden.
Dateien unterscheiden sich zum Speicherbereich eines Prozesses dadurch, dass sie nach der Beendigung des Prozesses weiter existieren und von mehreren Prozessen und sogar nach einem Neustart des Systems verwendet werden können.
Um Dateien unterscheiden und wiederverwenden zu können, ist jeder Datei ein \emph{Name} zu geordnet.
Manche Betriebssysteme schränken die erlaubten Zeichen in Dateinamen ein.
\end{defbox}

Wie bereits erwähnt, existieren in einem Betriebssystem unterschiedliche Arten von Dateien.
Neben regulären Dateien, die eine Folge von Bytes speichern und Verzeichnissen, die die Namen anderer Dateien, die in diesem Verzeichnis enthalten sind, speichern, werden auch Hardware Geräte in UNIX-ähnlichen Systemen als Dateien bereitgestellt.
Das hat den Vorteil, dass die bestehenden Mechanismen der Dateiverwaltung, wie die Zugriffskontrolle, auch auf Hardware Geräte, wie USB-Sticks, angewendet werden können.

Da in einem System mehrere Dateien mit dem gleichen Namen existieren können, wird um eine bestimmte Datei verwenden zu können, nicht nur ihr Name sondern auch ihr Ort im Dateisystem benötigt.

\begin{wrapfigure}[8]{l}{5.4cm}
\vspace{-0.5cm}
\begin{expbox}
\emph{absolut}: \\
\phantom{ }\hspace{0.2cm}\texttt{/home/alice/README} \\
\emph{relativ}: \\
\phantom{ }\hspace{0.2cm}\texttt{README} \\
\phantom{ }\hspace{0.2cm}\texttt{../bob} \\
\end{expbox}
\end{wrapfigure}

\noindent Der Ort einer Datei kann auf zwei Arten angeben werden als \textbf{absoluter} Pfad oder \textbf{relativer} Pfad.
Ein Pfad besteht aus einer beliebigen Liste an Verzeichnissen und einem optionalen abschließenden Dateinamen, getrennt von \emph{Pfadseparatoren}.
Der Pfadseparator in \gls{SOS} ist wie in allen UNIX-ähnlichen Systemen (beispielsweise Linux oder \mbox{MacOS}) das Zeichen \inlinecode{\texttt{/}}. Windows benutzt das Zeichen \inlinecode{\texttt{\textbackslash}} als Pfadseparator. \\[-0.2cm]

\textbf{Absolute} Pfade beginnen immer mit dem Wurzelverzeichnis des Dateisystems (\inlinecode{\texttt{/}} in \gls{SOS}).

\label{sec:rel_path}\textbf{Relative} Pfade werden ausgehend vom aktuellen Arbeitsverzeichnis \gls{CWD} des Prozesses interpretiert.

Jedes Verzeichnis enthält die beiden besonderen Einträge \inlinecode{.} und \inlinecode{..}, die zusätzlich zu Namen in Pfaden vorkommen können.
Der besondere Eintrag \inlinecode{.} steht dabei für das Verzeichnis selbst und \inlinecode{..} für das Oberverzeichnis.

\begin{figure}[h]
\centering
\input{figures/file-system-tree.tikz}
\caption{Darstellung der Baumstruktur eines Dateisystems ausgehend vom Wurzelverzeichnis~\protect\inlinecode{/}. Ob es sich bei einer Datei um ein  Verzeichnis handelt, wird in der Darstellung der Berechtigungen mit einem vorangestellten \textcolor{red}{d} symbolisiert. Der \textcolor{magenta}{absolute Pfad} zu $datei_1$ lautet \protect\inlinecode{/$verzeichnis_1$/$datei_1$}.}
\label{fig:fs_tree}
\end{figure}

\section{Datei-Berechtigungen}

Um die beiden \hyperref[sec:security_safety]{Sicherheits-Schutzziele} \emph{security} und \emph{safety} zu gewährleisten, haben Dateien einen \emph{Besitzer} und eine feste Zuweisung an \emph{Berechtigungen}.
Diese Berechtigungen werden bei der Verwendung einer Datei überprüft und die Operation gegebenenfalls vom Betriebssystem abgelehnt.

\begin{defbox}{Datei-Berechtigungen}
\begin{wrapfigure}{r}{8cm}
\input{figures/file-permissions.tikz}
\caption{Berechtigungs-Bits einer Datei gegliedert nach den Berechtigungsklassen}
\label{fig:filePermissions}
\end{wrapfigure}

Eine sehr rudimentäre, aber dennoch in UNIX-ähnlichen System weit verbreitete Art, die Berechtigungen einer Datei zu verwalten, ist diese in \underline{neun} Bit zu speichern.
Diese Bits werden, wie \Cref{fig:filePermissions} dargestellt, in drei Klassen á drei Bits aufgeteilt.
Die Klassen stehen für den Besitzer der Datei, die Gruppenkennung der Datei, sowie alle anderen.

Das erste Bit (\boldred{r}ead) innerhalb einer Klasse gibt an, ob die Datei gelesen werden darf.
Das zweite Bit (\boldred{w}rite) regelt, ob die Datei geschrieben werden darf.
Das dritte Bit (e\boldred{x}ute) steuert, ob die Datei in einem Prozess ausgeführt werden darf, oder falls es sich um ein Verzeichnis handelt, ob auf andere Dateien innerhalb des Verzeichnisses zugegriffen werden darf.

Vor der Verwendung einer Datei wird zunächst die Klasse des Prozesses, der die Datei verwenden möchte, bestimmt und anhand derer geprüft, ob die Operation erlaubt ist.
\end{defbox}

Neben den neun grundlegenden Bits für die drei Klassen existieren noch drei zusätzliche Bits für erweiterte Dateiberechtigungen.
Bei dem ersten Bit handelt es sich um das sogenannte "\emph{sticky bit}", das bei von allen schreibbaren Verzeichnissen, das Löschen verhindert.
Die zwei verbleibenden Bits werden "\emph{SUID}" (\textcolor{red}{S}et \textcolor{red}{UID}) beziehungsweise "\emph{SGID}" (\textcolor{red}{S}et \textcolor{red}{GID}) genannt.
Ist eines dieser Bits gesetzt, wird das Programm mit dem Besitzer beziehungsweise der Gruppe der Programm-Datei statt des Elternprozesses ausgeführt.
Dies wird verwendet, um beispielsweise Nutzern kontrollierten Zugriff auf den \emph{root}-Nutzer mit UID 0 zu gewähren.
Das in \gls{SOS} enthaltene \emph{SUID}-Programm \inlinecode{doas} prüft anhand einer Konfigurationsdatei, ob der aktuelle Benutzer die Berechtigung hat, Befehle als \emph{root}-Nutzer auszuführen, und führt gegebenenfalls den als Argumente übergebenen Befehl mit \gls{UID} 0 aus.

Moderne Dateisysteme unterstützen darüber hinaus, eine spezifischere Steuerung der Berechtigungen auf Basis einer \gls{ZSL}.

\begin{aufgbox}{Arbeitsauftrag: Berechtigungsbits}
Gängige Berechtigungen für Verzeichnisse sind die Bits \texttt{0755}.
Wandeln Sie die Bits aus der Oktalschreibweise in ihre symbolische Darstellung um und interpretieren Sie ihre Bedeutung. \\[-0.2cm]

\kariert{6}

Untersuchen Sie mit dem Programm \inlinecode{stat} die Berechtigungen der folgenden Dateien:

\begin{tabular}{p{0.233\textwidth} p{0.7\textwidth}}
\begin{enumerate}
  \item \texttt{/bin/doas}
  \item \texttt{/bin/ls}
  \item \texttt{/etc/passwd}
  \item \texttt{/etc/shadow}
  \item \texttt{/home/bob}
\end{enumerate}
&
\vspace{0.01cm}
\kariert{14}
\end{tabular}
\end{aufgbox}

\clearpage
\subsection{Kartographie der Beispiellandschaft}
\gls{SOS} enthält eine Verzeichnisstruktur, in der die Bedeutung der Berechtigungen von Dateien und Verzeichnissen an Beispielen aus der analogen Welt verdeutlicht werden.
Diese wird beim \hyperref[sec:start_exercise]{Start} der \texttt{file-permission} Aufgaben durch Ausführen des Programms \\ \inlinecode{/usr/bin/exercises/file-permissions/setup} angelegt.

\begin{aufgbox}{Arbeitsauftrag: Kartographie der Beispiellandschaft}
Erkunden Sie die Verzeichnisstruktur unter \inlinecode{/home/alice/Landschaft}. 
Zeichnen Sie die Beispiellandschaft als Baumdiagramm (vergleiche \Cref{fig:fs_tree}).
Stellen Sie Vermutungen darüber an, warum zu einem Beispiel die bestehenden Berechtigungen passen.
Hilfreiche Programme: \inlinecode{ls}, \inlinecode{stat}, \inlinecode{cd}.
\vspace{0.2cm}\phantom{a}
\kariert{34}
\end{aufgbox}

\subsection{Kartographie des Dateisystems}
Die Verzeichnisstruktur von \gls{SOS}, die sich am \href{https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html}{File Hierarchy Standard} für UNIX-ähnliche Systeme orientiert, enthält ganz bestimmte Berechtigungen für gewisse Teilbäume und Dateien.
Eine kurze Erklärung zu ausgewählten Verzeichnissen kann in der in \gls{SOS} enthaltenen Dokumentationsseite \inlinecode{hier} nachgelesen werden.

\begin{aufgbox}{Arbeitsauftrag: Kartographie des Dateisystems}
Erstellen Sie ein Baumdiagramm des Dateisystems von \gls{SOS}.
Färben Sie die Teilbäume entsprechend ihres Besitzers ein und achten Sie dabei auch auf Ausreißer, die von den anderen Berechtigungen abweichen und stellen Sie Vermutungen an, warum dies jeweils der Fall ist.
\vspace{0.2cm}
\kariert{36}
\end{aufgbox}

\subsection{Herausforderung: Geheimnisse}

Oft sind nicht akkurat gepflegte Berechtigungen Ursache für Sicherheitsprobleme.
Diese erlauben es zum Beispiel Unbefugten sensible Informationen zu lesen oder in schlimmsten Fall beliebigen Code auszuführen.
\gls{SOS} enthält eine kleine Herausforderung, bei der die Geheimnisse des Nutzers \inlinecode{alice} geschützt und die Geheimnisse des Nutzers \inlinecode{bob} herausbekommen werden müssen.

\begin{aufgbox}{Arbeitsauftrag: Geheimnisse}
Nach dem Start der \texttt{file-permission} Aufgabe durch Ausführen des Programms \inlinecode{/usr/bin/exercises/file-permissions/setup} enthält das Verzeichnis \inlinecode{/home/alice} die Datei \inlinecode{secrets.txt}, die es zu schützen gilt.
Das Verzeichnis \inlinecode{/home/bob} enthält die Dateien \inlinecode{secrets.txt} und \inlinecode{top\_secret.txt}, deren Inhalt nötig ist, um die Fragen des Programms \inlinecode{/usr/bin/exercises/file-permissions/checkup} erfolgreich zu beantworten.
Reflektieren Sie die Art und Weise, wie Sie an die Informationen gelangt sind und ob dies verhindert werden kann.
\vspace{0.2cm}

Happy Hacking :)
\vspace{0.2cm}

Dem Autor sind drei Möglichkeiten bekannt, den Inhalt der Datei \inlinecode{top\_secret.txt} zu erfahren.
Der ersten Person die alle drei, oder potenziell noch weitere Möglichkeiten findet und diese unter \href{mailto://sos@muhq.space}{sos@muhq.space} erklärt, verspricht der Autor hiermit ein Heißgetränk Ihrer Wahl.
\end{aufgbox}

\printnoidxglossary[type=acronym]
\printacronyms
\end{document}