📱 Erkannter Endgerättyp ⛱️ Tag und Nacht. Verbraucht keinen oder einen 🍪. 🖼️ Hintergrund ändern. Verbraucht keinen oder einen 🍪.
🧬 0 Ihre DNS in den Krei.se-DNS-Servern, führt zum Bio-Labor 🍪 0 Anzahl Ihrer gespeicherten Kekse, führt zur Keksdose       

🐧 Debian-Linux-Client Trixie

Aufbau:

  • Grundlegende Pakete
  • Kerberos
  • SSSD
  • AutoFS

Apt-Sammlung was ich eigentlich immer brauche

# Es gibt Rice
#   Fonts
root@linux:~# apt install fonts-noto-color-emoji fonts-material-design-icons-iconfont
#   Do not use Deb. Font-Awesome. Download https://use.fontawesome.com/releases/v6.7.2/fontawesome-free-6.7.2-desktop.zip
#   and save to ~.fonts/otf
#   Appearance
root@linux:~# apt install lxappearance

#   Wayland/Sway
root@linux:~# apt install sway swayidle swaylock fuzzel
#   Notifications
root@linux:~# apt install mako-notifier

# Sysadmin
root@linux:~# apt install mc

# Programmieren
root@linux:~# apt install git

# Compilieren
root@linux:~# apt install build-essential cmake bison flex meson

# Waybar compilieren (https://github.com/Alexays/Waybar)
root@linux:~# apt install clang-tidy gobject-introspection libdbusmenu-gtk3-dev libevdev-dev libfmt-dev libgirepository1.0-dev libgtk-3-dev libgtkmm-3.0-dev libinput-dev libjsoncpp-dev libmpdclient-dev libnl-3-dev libnl-genl-3-dev libpulse-dev libsigc++-2.0-dev libspdlog-dev libwayland-dev scdoc upower libxkbregistry-dev

System-Mails an lokalen 📯 Postboten schicken

🔁 Automatische Updates

📀 Festplatten-Monitoring

🐆 LUKS-Verschlüsselung remote entsperren

🐆 LUKS-Verschlüsselung per USB-Stick entsperren

🌃 Konsolen-Zeug

🔨 Thunar-Thumbnailer

LDAP Client

ggf. Zertifikat für ldap.domain.tld holen und systemweit installieren --> siehe Eigene 🏰 ED25519-CA (Zertifizierungs-Authorität)

/etc/ldap/ldap.conf

BASE dc=domain,dc=tld
URI ldaps://ldap.domain.tld

# wer eine eigene CA nutzt, unbedingt drauf achten, dass die CA hier mit drin ist. Nur nach /etc/ssl/certs
# kopieren reicht NICHT. ca.domain.tld.crt und ldap.domain.tld.crt unbedingt nach /usr/local/share/ca-certificates
# kopieren, dann 'update-ca-certificates --fresh'
# 
# Ab Trixie unnötig, wird immer die systemweite CA-Sammlung genutzt (OpenSSL statt GnuTLS)
# TLS_CACERT    /etc/ssl/certs/ca-certificates.crt

# Hören Sie nicht auf Ratschläge hier never einzutragen oder etwas auszukommentieren, bestehen Sie immer
# auf korrekte Zertifikate, AUCH UND VORALLEM IM EIGENEN LAN
TLS_REQCERT demand

Kerberos Client

root@client:~# apt install krb5-user

/etc/krb5.conf

[libdefaults]
        default_realm = DOMAIN.TLD
        # dns_lookup_realm = false
        # dns_lookup_kdc = false

        forwardable = true
        proxiable = true
        rdns = false

        ticket_lifetime = 24h
        renew_lifetime = 7d

[realms]
        DOMAIN.TLD = {
                kdc = auth.domain.tld
                admin_server = auth.domain.tld
        }
[domain_realm]

        domain.tld = DOMAIN.TLD
        .domain.tld = DOMAIN.TLD

Debian neustarten!!! "Es geht bestimmt auch wenn ich den Service neustarte" - NEIN. Neustarten!

🐩 NFS4-Kerberos-Client

root@client:~# apt install nfs-common gssproxy

/etc/nfs.conf

[gssd]
use-gss-proxy = 1

/etc/gssproxy/99-network-fs-clients.conf

[service/network-fs-clients]
    mechs = krb5
    cred_store = keytab:/etc/krb5.keytab.nfs
    cred_store = ccache:FILE:/var/lib/gssproxy/clients/krb5cc_%U
    cred_store = client_keytab:/var/lib/gssproxy/clients/%U.keytab
    cred_usage = initiate
    allow_any_uid = yes
    trusted = yes
    euid = 0
    min_lifetime = 60
    debug_level = 3

Prinzipal für NFS holen (User mit /admin Rechten):

root@client:~# kadmin -p user/admin@DOMAIN.TLD

kadmin: addprinc nfs/client.domain.tld@DOMAIN.TLD
kadmin: ktadd -k /etc/krb5.keytab.nfs nfs/client.domain.tld@DOMAIN.TLD
kadmin: q

root@client:~# chmod 600 /etc/krb5.keytab.nfs
root@client:~# chown root:root /etc/krb5.keytab.nfs

Das ist nur das Machine(!)-🦴-Prinzipal um überhaupt auf den NFS-Server zu kommen, das braucht man zwingend für jeden Machine-Client in der Domäne. GSSProxy fängt dann nach dem Userlogin auch das 🦴 Prinzipal für den User ab, allerdings nur nach Passwort. Wer hier noch für User ohne Passwort-Login Freigaben mounten will (z.B. ein HTPC-Nutzer der automatisch angemeldet wird) holt das User-Prinzipal auch in /var/lib/gssproxyclients:

Beispiel HTPC-Nutzer autologin und damit automount:

/etc/gssproxy/90-htpcautologin.conf

[service/htpcautologin]
mechs = krb5
cred_store = ccache:FILE:/var/lib/gssproxy/clients/krb5cc_htpc
cred_store = client_keytab:/var/lib/gssproxy/clients/htpc.keytab
cred_usage = initiate
euid = 108000

Wichtig, hier euid unbedingt auf die korrekte uid setzen.

🦴 Prinzipal für HTPC-User holen (User mit /admin Rechten):

root@client:~# kadmin -p user/admin@DOMAIN.TLD

kadmin: addprinc htpcuser@DOMAIN.TLD
kadmin: ktadd -k /var/lib/gssproxy/clients/htpc.keytab htpcuser@DOMAIN.TLD
kadmin: q

root@client:~# chmod 600 /var/lib/gssproxy/clients/htpc.keytab
root@client:~# chown root:root /var/lib/gssproxy/clients/htpc.keytab

SSSD installieren

https://documentation.ubuntu.com/server/how-to/sssd/with-ldap-and-kerberos/

Wir nutzen auf Clients nicht nslcd, das ist zwar schlank und erfüllt seinen Zweck, aber Clients können auch mal Laptops sein und da ist das Caching durch SSSD ein riesen Vorteil wenn "mal kurz" die Verbindung weg ist.

root@client:~# apt install sssd sssd-tools sssd-ldap sssd-krb5 ldap-utils krb5-user 

Damit wir den Kerberos-KDC-Server validieren können brauchen wir ein 🦴 Host-Prinzipal für den client. Remote holen und in /etc/krb5.keytab installieren:

root@client:~# kadmin -p user/admin@DOMAIN.TLD
kadmin: addprinc -randkey host/client.domain.tld@DOMAIN.TLD
kadmin: ktadd -k /etc/krb5.keytab host/client.domain.tld@DOMAIN.TLD
kadmin: q

root@client:~# chmod 600 /etc/krb5.keytab
root@client:~# chown root:root /etc/krb5.keytab

/etc/sssd/sssd.conf erstellen:

[sssd]
config_file_version = 2
domains = domain.tld

# etwas unglücklich hier unser Standard domain.tld, also dann z.B: [domain/example.com]
[domain/domain.tld]
id_provider = ldap
ldap_uri = ldaps://ldap.domain.tld
ldap_search_base = dc=domain,dc=tld

# Wer nicht allen Usern Leserechte im LDAP-Baum gibt braucht noch einen Bind-DN:
ldap_default_bind_dn = cn=lookup,ou=Dienste,dc=domain,dc=tld
ldap_default_authtok = Bind-DN-Passwort im Klartext ... oder ...
# Wer das nicht im Klartext will:
    # apt install sssd-tools
    # sss_obfuscate -d domain.tld Klartext-Passwort --> obfuscated
# ldap_default_authtok_type = obfuscated_password

# Unser LDAP nutzt verschachtelte Gruppen
ldap_schema = rfc2307bis
# Welches Attribut in den Gruppen die Mitglieder bezeichnet. Bei uns ist das member, es gibt aber auch Implementierungen mit "uniqueMember"
ldap_group_member = member
# Das kann man zur Sicherheit noch extra setzen, ist so aber default
ldap_group_object_class = groupOfNames

auth_provider = krb5
krb5_server = auth.domain.tld
krb5_kpasswd = auth.domain.tld
krb5_realm = DOMAIN.TLD
krb5_validate = True

# Die 3 Sachen sind so default, %d ist krb5_ccachedir /tmp
# ldap_krb5_init_creds = True
# krb5_ccachedir = /tmp
# krb5_ccname_template = FILE:/tmp/krb5cc_%U_XXXXXX

# Stellt sicher, dass der Client 7 Tage lang neue Tickets erhält (dann sollte man mal neustarten oder kinit -R ;))
krb5_lifetime           =  86400
krb5_renewable_lifetime = 604800
krb5_renew_interval     =   7200

cache_credentials = True

# LDAP erlaubt alle Benutzer und Gruppen aufzulisten
enumerate = True

access_provider = permit
sudo_provider = ldap
chpass_provider = krb5
autofs_provider = ldap
#resolver_provider = ldap

Die Config muss chmod 600 haben und root:root gehören:

root@client:~# chmod 600 /etc/sssd/sssd.conf
root@client:~# chown root:root /etc/sssd/sssd.conf

Anschliessend den Dienst starten:

root@client:~# systemctl enable sssd
root@client:~# systemctl start sssd

Den Cache neu laden wenn man was in der Config ändert:

root@client:~# sssctl cache-remove

AutoFS

root@client:~# apt install autofs

Tutorial für Server: 🚗 AutoFS-Einträge in 🌳 OpenLDAP

Das wars, einmal neustarten und Login

CacheFS für RoadWarriors

Für RoadWarrior kann man CacheFilesd aktivieren:

root@client:~# apt install cachefilesd

in /etc/default/cachefilesd RUN=yes setzen

root@client:~# systemctl enable cachefilesd

Die Standard-Einstellungen sind so ok, aber der NFS-Mount sollte kleiner sein, bei mir hat rsize=524288,wsize=524288 genügt. Das sollte für Mounts über OpenVPN ohnehin viel kleiner sein (1024).

Browser-Cache etc. müssen nicht manuell umgebogen werden (das machen wir trotzdem, aber der user merkt so weniger von der Verzögerung)

Zum Thema Roadwarrior kommt noch ein größeres Tutorial.

RPCBind komplett deaktivieren

Braucht man mit NFS4 nicht:

root@client:~# systemctl disable rpcbind.target
root@client:~# systemctl disable rpcbind.socket
root@client:~# systemctl disable rpcbind.service
root@client:~# systemctl stop rpcbind.target
root@client:~# systemctl stop rpcbind.socket
root@client:~# systemctl stop rpcbind.service

Hier der praktische Einzeiler:

root@client:~# systemctl disable rpcbind.target && systemctl disable rpcbind.socket && systemctl disable rpcbind.service && systemctl stop rpcbind.target && systemctl stop rpcbind.socket && systemctl stop rpcbind.service