# 1.114.3

# Einrichten von Sicherheit auf Benutzerebene

Beschreibung: Prüfungskandidaten sollten in der Lage sein, Sicherheit auf Benutzerebene zu implementieren. Die Tätigkeiten beinhalten das Verwalten von Beschränkungen auf Benutzerlogins, Prozesse und Speichernutzung.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

- quota
- usermod

Die Verwaltung von Einschränkungen einzelner Useraccounts ist ein vielfältiger Bereich, der in einzelnen Fällen schon in anderen Abschnitten beschrieben wurde. Die Haupt-Möglichkeiten der Einschränkungen liegen in einer durchdachten Organisation der Dateien und Programme hinsichtlich ihrer Gruppenzugehörigkeit. Sind bestimmte Programme nur von Mitgliedern einer bestimmten Gruppe ausführbar, so kann z.B. die Einstellung, welcher User ein solches Programm ausführen darf einfach über die Gruppenmitgliedschaft des Users verwaltet werden. Diese Techniken sind im Abschnit 1.111.1 bereits beschrieben worden.

Auch die Möglichkeit, die Gültigkeit eines Accounts und andere einen User betreffende Einstellungen mit usermod zu verändern wurde dort bereits ausführlich besprochen.

Die Einschränkungen des Festplattenplatzes, den einzelne User zur Verfügung haben mittels diskquotas wurde bereits bei der Vorbereitung auf die Prüfung LPI101 im Abschnitt 1.104.4 ausführlich besprochen und wird daher hier nicht weiter behandelt.

### Einschränkungen mit ulimit

Eine Sache, die noch keine Beschreibung erfahren hat, für userbezogene Einstellungen aber sehr wichtig ist, ist der Umgang mit dem Shellbefehl ulimit. Es handelt sich hier um ein eingebautes (internes) Shellkommando, das der Shell selbst Einschränkungen hinsichtlich der von ihr benötigten Ressourcen macht. In der Regel werden diese Einstellungen in systemweiten Startdateien der Shell (wie etwa `/etc/profile`) gemacht. Einstellungen in usereigenen Startdateien sind in der Regel sinnlos, weil jeder User diese Einschränkungen selbst wieder aufheben könnte.

ulimit kennt verschiedene Möglichkeiten für Beschränkungen von Ressourcen, die für die Shell und alle Prozesse, die von ihr gestartet werden gelten. Die Syntax ist:

ulimit [-SHacdflmnpstuv [Limit]]

Die Optionen `-H` und `-S` spezifizieren jeweils den Hard- bzw. Softlimit einer Ressource. Ein Hardlimit kann nicht mehr erhöht werden, sobald er einmal gesetzt ist. Ein Softlimit kann bis zum Wert des Hardlimits erhöht werden. Werden beide Angaben weggelassen, so werden sowohl Hard-, als auch Softlimit gesetzt.

Die Angabe des Limit kann entweder eine Zahl sein, in der für die angegebene Ressource gültigen Einheit, oder einer der Spezialwerte hard, soft oder unlimited. Diese Spezialwerte bezeichnen die für diese Ressource eingestellten Hard- und Softlimits bzw. keinen Limit.

Ist kein Limit angegeben, so wird der gegenwärtige Wert des Softlimits der entsprechenden Ressource ausgegeben. Ist zusätzlich ein `-H` angegeben, so wird stattdessen der Hardlimit angezeigt.

Die einzelnen Ressourcen werden über Parameter eingestellt und haben die folgenden Bedeutungen:

-a
  Alle aktuellen Limits werden dargestellt
-c
  Stellt die maximale Größe von Core-Dateien ein. Das sind Dateien, die erstellt werden, wenn ein Programm abstürzt. Diese Dateien enthalten dann den Daten- und Programmbereich des abgestürzten Programms für die Fehlersuche mit einem Debugger. Ein Wert von 0 schaltet Core-Files grundsätzlich ab.
-d
  Die maximale Größe des Datensegments eines Prozesses.
-f
  Die maximale Größe von Dateien, die die Shell anlegt.
-l
  Die maximale Speichergröße, die gesperrt werden darf
-m
  Die maximale Größe von residentem Speicher
-n
  Die maximale Anzahl gleichzeitig geöffneter Dateien
-p
  Die Größe von Pipes in 512 Byte Blöcken
-s
  Die maximale Stack-Größe
-t
  Der maximale Wert von CPU-Zeit in Sekunden
-u
  Die maximale Anzahl von Prozessen für einen einzelnen User
-v
  Die maximale Größe von virtuellem Speicher, der für die Shell verfügbar ist.

Ist Limit angegeben, so bezeichnet er den neuen Wert für die angegebene Ressource (außer bei `-a`, das nur Ausgaben macht). Wird keine Ressource angegeben, so wird `-f` angenommen. Die Werte beziehen sich in der Regel auf 1024 Byte Blöcke, außer bei der Angabe von `-t` (Sekunden), `-p` (512-Byte Blöcke) und `-n` und `-u`, die keinen Multiplikator haben sondern genau so gewertet werden, wie angegeben.

Ein typischer Eintrag in `/etc/profile` wäre z.B.

      ulimit -Sc 0        # Der Soft-Limit für Core-Dateien wird
                          # auf 0 gesetzt
                          # Es werden also keine Corefiles angelegt.
      ulimit -d 15000     # Hard- und Softlimit für die Datengröße
                          # eines Programmes werden auf 15 MByte
                          # gesetzt (15000*1024)
      ulimit -s 15000     # Hard- und Softlimit für die Stack-Größe
                          # eines Programmes werden auf 15 MByte
                          # gesetzt.

      # Die folgende Konstruktion gilt nur für den User hans.
      # Er darf nicht mehr als 10 Prozesse gleichzeitig laufen haben.
      if [ $LOGNAME = "hans" ]
      then
        ulimit -u 10
      fi

Mit diesen Einstellungen ist es möglich, die einzelnen User in ihrem Ressourcenverbrauch einzuschränken. Diese Ressourcen beziehen sich aber nur auf eingeloggte User, nicht auf Netzwerkdienste. Genau besehen sind es ja Einstellungen der Shell. Also greifen diese Einstellungen nur da, wo die Shell aktiv ist.