GNU / Linux für Fachinformatiker / Systemintegration

Live-DVD

Begleitmaterialien zum Kurs

Folien u. Tafelbilder

Kernel Commandline Optionen: https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html

Konzept: Domain-Login

  1. Directory Daten

    • Zuordnung username <--> uid
    • Zuordnung user <--> gruppen

      • GECOS-Feld ... eigentlich egal
      • Loginshell ... eigentlich egal
      • Heimverzeichnis ... halbegal, weil deterministisch
    • Im Prinzip alles aus /etc/passwd
    • Beispiele

      • LDAP
      • AD / Active-Directory / (eigentlich auch LDAP, mit Megakomplexem Schema)
      • Hesiod - Directory-Daten über DNS
      • NIS - Network Information Service, historisch auch Yellow Pages
      • /etc/-Verzeichnis aus dem Netzwerk mounten
  2. Inhalt von Heimverzeichnis

    • Entweder /home kommt vom Fileserver

      • Alle Heimverzeichnisse sind immer auf dem Client sichtbar - Sicherheitsüberlegungen!
    • Heimverzeichnis wird beim Login gemounted

      • Mount-Mechanismus muss beim Login laufen
    • Beispiele

      • SMB (Server Message Block) / CIFS (Common Internet File System) / Samba
      • NFS (Network Filesystem) → clientseitige Sicherheit, mäh!
      • SSHFS
  3. Authentifizierung

    • Kann über Directory-Daten laufen

      • d.h. Shadow-Datenbank auf Client-Rechner verfügbar
      • → Sicherheitsüberlegungen!
    • Netzwerkauthentifizierungsschema
    • Beispiele

      • Shadow-Daten via Hesiod → Passwordhashes im ganzen Netzwerk abrufbar, mäh!
      • Shadow-Daten via NIS → gleiches Problem, mäh!
      • Shadow-Daten via Netzwerkmount (/etc) → kommt aufs Filesystem-Protokoll an, weniger mäh.
      • Kerberos → eigentlich cool! (aber kompliziert)
      • LDAP-Authentifizierung
      • SSH-Authentifizierung → warum nicht gleich verbinden, mit SSHFS :-)
      • AD / Samba / (eigentlich Kerberos)
  4. Evtl. Mechanismus um Nutzerdaten zu ändern.

    • Mindestens das User-Passwort
    • Beispiele

      • AD / Samba
      • Directory-Daten via Mount (/etc)
      • Irgendwas mit PAM-Script
      • Via SSH-Shell

Beispiel: Domain Login

  • Directory-Daten via SSHFS-Mount:

    • ~# apt-get install sshfs libnss-extrausers

    • In /etc/nsswitch.conf

      für die passwd, group und shadow-Einträge, das Modul "extrausers" an zweite stelle setzen. Beispiel (ggf. abweichend):
      passwd: files extrausers
      group: files extrausers
      shadow: files extrausers

    • auf dem Server "zoerwah" ist eine Userdatenbank zum Mount bereitgestellt

    • ~# sshfs -o allow_others sshdirectory@zoerwah:/var/lib/extrausers /var/lib/extrausers

      • Passwort: sshdir
      • "allow_others" ist nötig, damit Benutzer z.B. ihre eigene user-id nachschlagen können
    • ~# getent passwd listet jetzt neben den eigenen Usern, auch den Account "netzwerk"

    • Am Terminal kann man sich jetzt mit "netzwerk" (Passwort "netzwerk") anmelden

      • Der User loggt sich an der lokalen maschine ein. Diese erhält alle Benutzerdaten von dem SSHFS-Mount.
      • Der User hat auf der lokalen Maschine noch kein Heimverzeichnis
  • "Reboot-fester" SSHFS-Mount

    • Passworteingabe während des Reboots ist inakzeptabel
    • ssh-keys!
    • ~# ssh-keygen
    • ~# ssh-copy-id sshdirectory@zoerwah
    • In /etc/fstab
      sshfs#sshdirectory@zoerwah:/var/lib/extrausers/ /var/lib/extrausers fuse auto,_netdev,allow_other 0 0
  • User-Home beim Login mounten

    • ~# apt-get install libpam-mount; ~# pam-auth-update

      • (pam-auth-update sieht schöner aus, wenn dialog installiert ist)
    • Configfile /etc/security/pam_mount.conf.xml:
      <pam_mount>
      <mkmountpoint enable="1" remove="true">
      <volume path="sshfs#%(USER)@zoerwah:/home/%(USER)" mountpoint="/home/%(USER)" fstype="fuse" options="password_stdin,allow_other,nonempty" noroot="0" /> ← Einzige Zeile, die dazu kommt
      </pam_mount>

Befehle

iptables Beispiele

  • Doku: https://wiki.archlinux.org/title/Iptables
  • WAN=usb1 LAN=eth0
  • iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
  • iptables -A FORWARDING -i $WAN -m conntrack --ctstatus CONFIRMED -j ACCEPT
  • iptables -A FORWARDING -i $WAN -j REJECT

Navigation im Dateibaum

  • ls
  • pwd, cd
  • tree

Arbeit mit Dateien und Ordnern

  • touch
  • mkdir
  • mv
  • cp
  • rm, rm -r
  • rmdir
  • ln, ln -s

Zugriffsrechte

  • chmod
  • chown
  • chgrp
  • umask (Shell-Builtin)
ugo _u_ _g_ _o_
SST rwx rwx rwx
421 421 421 421
_______________Sonderbits (Feld ganz vorne)
SST   4   2   1
      S   S   T 

Basiswerkzeuge

  • cat
  • echo
  • man
  • less
  • printf, printf '%s\n'

Dateisysteme

  • mount
  • umount
  • lsblk
  • df, df -h

Prozesse / Jobkontrolle

  • pidof
  • bg, fg, jobs
  • kill
  • htop, top
  • ps, ps -e

Paketsystem / Softwareinstallation

  • synaptic
  • dpkg, dpkg --get-selections
  • dpkg-query -l
  • apt-get, apt-get update, apt-get upgrade, apt-get dist-upgrade
  • apt-get install ..., apt-get remove ..., apt-get autoremove
  • apt-mark showmanual, apt-mark showauto
  • dpkg-reconfigure ...

Systemadministration

  • sudo
  • su, sudo su
  • chroot

Variablen

  • env
  • export FOO="bar"
  • set

Benutzerkonten

  • adduser username, adduser username gruppe
  • groups
  • whoami
  • id

Netzwerk

  • ip address
  • ip route
  • ip neighbour, arp
  • dig, nslookup
  • ping
  • traceroute, mtr
  • telnet, netcat, nc, ncat
  • nmap
  • ncat -l ... ...
  • netstat -t

Konfigurationsdateien

Systemweit

  • /etc/passwd
  • /etc/group
  • /etc/shadow

Benutzer

  • ~/.xsessionrc
  • ~/.bashrc

Netzwerk

  • /etc/resolv.conf

Begriffe

Klammern

  • Geschweifte Klammern {} Braces
  • Eckige Klammern [] Brackets
  • Spitze Klammern <> Tags
  • "Normale" Klammern / Runde Klammern () Parentheses / "Parens"

Andere

  • Stammverzeichnis / Root-Verzeichnis / Wurzelverzeichnis

    • Vorsicht: Heimverzeichnis von Root != Root-Verzeichnis
  • Softlink / Symlink / Semantischer Link / Symbolischer Link
  • Permissions / Zugriffsrechte / (Datei-)Berechtigungen / Zugriffsmodus
  • Shared Object (.so) / Dynamically Linked Libraries (.dll) / Programmbibliotheken / Funktionsbibliotheken / Dynamische Libraries / Shared Libraries
  • Umgebungsvariable / Environment-Variable / "exportierte" Variable

    • zu unterscheiden von: Shellvariable

Shellexpansionen ("Parameter Expansion")

Hilfmittel zum Ausprobieren und Nachschlagen

  • printf '== %s ==\n' x y z foo bar schnabbeldiwauwau
  • man dash (für Basissyntax aller Shells)
  • man bash (dokumentiert auch einige Bash-Erweiterungen)

Shellglobs / Wildcard / Platzhalter

  • echo *
  • echo *[Ss]traße*
  • echo *.???

Brace Expansion (Bash Only!)

  • Schnabbeldi{wauwau,wuffwuff}, foo-{bar,qua,quux}
  • touch {1..100}

Reguläre Ausdrücke

Umgangssprache: Regular Expression / Regulärer Ausdruck / RegEx / RE

Plural: RegExes / RegExen (auch im englischen, idR. humoristisch)

Einzelne Zeichen

  • a, b, C, 0 usw. Buchstaben und Ziffern stehen einfach für sich selbst, a "matcht" den Buchstaben a usw.
  • <, ~, " Etliche Sonderzeichen haben keine spezielle Bedeutung und stehen wie Buchstaben und Ziffern für sich selbst.
  • . Der Punkt steht für ein beliebiges Zeichen
  • \. Mit einem vorangestellten Backslash ist es wieder einfach nur ein Punkt
  • \?, \+, \*, \\ Gleiches gilt für andere Zeichen, die sonst eine besondere Bedeutung erhalten
  • ^ steht (außerhalb von eckigen Klammern) für den Zeilenanfang
  • $ steht für das Zeilenende

Beispiel: Esel ist eine Abfolge von Buchstaben und trifft auf das Wort "Esel" zu. E.el trifft auf "Esel", "Egel", "Ekel" zu, aber auch auf Fantasieworte wie "Exel" oder "E%el".

Bracket Expressions

  • [abc] Ausdrücke in eckigen Klammern treffen auf ein beliebiges Zeichen aus der angegebenen Menge zu
  • [a-m], [A-Z], [3-9] Die Menge in eckigen Klammern kann auch als Zeichenbereich (Character Range) angegeben werden
  • [0-9a-z] Es dürfen mehrere Ranges auftauchen
  • [^0-9], [^aeou] Ist das erste Zeichen ein ^ (Circumflex), wir die Menge negiert, sie steht dann für ein beliebiges Zeichen, außer für die angegebenen
  • [-+*/] Enthält eine Menge ein Minuszeichen, muss dies am Anfang oder Ende stehen, so dass die Menge nicht als Range erkannt wird
  • [])}>], [^])}>] enthält eine Menge selbst eine schließende eckige Klammer (]) muss diese ganz am Anfang stehen
  • [*+^$] Innerhalb eckiger Klammern verlieren die meisten Sonderzeichen ihre besondere Bedeutung (so als stünde ein \ davor).

Quantifizierer und Grenzen (Bounds)

Ein Bound kann einem Atom (d.h. einem "Teil des Ausdrucks", einem Zeichen, einer Bracket Expression, etc. folgen) folgen (z.B. m+, oder [^a-z]?)

  • ? Das vorhergehende Atom kann einmal vorkommen, muss aber nicht
  • + Das vorhergehende Atom kann einmal oder mehrmals (beliebig oft) vorkommen
  • * Das vorhergehende Atom kann beliebig oft, oder gar nicht vorkommen
  • {5} Das Atom kommt genau fünfmal vor
  • {2,14} Das Atom kommt mindestens zweimal, höchstend vierzehnmal vor
  • {2,} Das Atom kommt mindestens zweimal oder beliebig viel häufiger vor
  • {,14} Das Atom kommt höchstens vierzehnmal vor, braucht aber gar nicht oder weniger häufig auftauchen

Unterausdrücke (Sub-expressions)

  • (foobar) ist zunächst einmal das gleiche wie foobar
  • (foobar)+ ist eine beliebig häufige Wiederholung des Wortes foobar

    • foobar+ dagegen wäre eine beliebige Wiederholung des Buchstaben r im Wort foobar
  • → Runde Klammern fassen eine Zeichenfolge zu einem Atom zusammen
  • (foobar|schnabbeldiwauwau) steht für das Wort foobar oder das Wort schnabbeldiwauwau

Beispiel: ([gG]roß|[kK]lein)+ - Eine beliebige Folge der Worte Groß und Klein jeweils mit großem oder kleinem Anfangsbuchstaben.