Master Boot Record (MBR) zurücksetzen

Mit einer Linux-Live-CD kann man relativ einfach einen Master Boot Record zurücksetzen, um eine leere Partitionstabelle zu bekommen. Dazu einfach auf der Konsole folgenden Befehl eingeben:

dd if=/dev/zero of=/dev/sdx bs=512 count=1

Dieser Befehl schreibt in die ersten 512 Byte der anzugebenden SATA-Festplatte Nullen rein. Sollten noch IDE-Festplatten im Einsatz sein, muss es nicht „sdx“, sondern „hdx“ lauten. Das x ist durch den Buchstaben der gewünschten Festplatte zu ersetzen.

SSH absichern

SSH

Der Root muss sich nicht per SSH einloggen können. Es ist besser, wenn sich nur Benutzer einloggen und hinterher zum Root machen. Um das zu ändern muss in der

/etc/ssh/sshd_config

der entsprechende Parameter von

PermitRootLogin yes

auf

PermitRootLogin no

geändert werden. Das kann man entweder von Hand machen oder zu Übung mit sed:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak && sed -e 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new && cp /etc/ssh/sshd_config.new /etc/ssh/sshd_config

Mit dieser Zeile wird die Originaldatei gesichert, der Parameter ersetzt und alles in eine neue Datei geschrieben. Diese neue Datei ersetzt dann durch Kopieren die Original-Datei. Hinterher sind folgende Dateien vorhanden:

# ls -alh /etc/ssh/sshd_config*
 -rw-r--r-- 1 root root 1,9K 13. Jun 13:42 /etc/ssh/sshd_config
 -rw-r--r-- 1 root root 1,9K 13. Jun 13:42 /etc/ssh/sshd_config.bak
 -rw-r--r-- 1 root root 1,9K 13. Jun 13:42 /etc/ssh/sshd_config.new

so dass jederzeit auf die gewünschte Konfiguration gewechselt/zurückgesetzt werden kann.

Jetzt noch ein

# /etc/init.d/ssh reload

damit die Konfiguration noch aktiv wird. Durch den Reload bleiben aktuell aufgebaute Sessions aktiv!

Grub absichern

Um sicherzustellen, dass ein Benutzer, der das System rebootet und Zugriff auf die Konsole hat, nicht einfach am Bootprompt

init=/bin/sh

eingibt und sich damit eine Single-User-Shell erschleicht und einfach in das System einbrechen kann, sollte man den Bootprompt absichern. Nichts einfacher als das.

Zuerst sollte man sich einen md5-Hash für das Grub-Passwort erzeugen. Schön, dass Grub dafür gleich das entsprechende Werkzeug mitbringt:

grub-md5-crypt
Password:
Retype password:
$1$Ki6fc/$TdYOWM/XokvdhZoF/B/8v.

Dazu also einfach den o.g. Befehl aufrufen, zwei Mal das gewünschte Passwort eingeben und man erhält einen md5-Hash, den Grub verwenden kann. Wer es gerne ausprobieren möchte, das Passwort ist „test“.

Jetzt zur Konfiguration. Die erfolgt in

/boot/grub/menu.lst

Hier unter dem Bereich

## password ['--md5'] passwd

folgende Zeile hinzufügen

password --md5 $1$Ki6fc/$TdYOWM/XokvdhZoF/B/8v.

Als MD5-Passwort-String ist der vorher generierte zu verwenden. Wie man der Beschreibung des Bereiches entnehmen kann, kann man das Passwort auch im Klartext setzen. Aber warum ein Sicherheitsrisiko eingehen, wenn es nicht notwendig ist.

Damit kann man die Boot-Prompt-Zeilen nicht mehr ohne Passwort editieren.

Schön und gut. Aber den Single-User-Modus, der automatisch von Grub immer mit eingerichtet wird kann immer noch gestartet werden. Um das zu verhindern, muss folgender Parameter geändert werden:

Von

# lockalternative=false

auf

# lockalternative=true

Damit muss dass Passwort auch für das Starten aller nicht-Default-Zeilen eingegeben werden.

Zum Schluss noch ein

update-grub

damit Grub, die lockalternative-Direktive übernimmt.

Webserver absichern

Ein Apache-Webserver gibt standardmäßig auftretende Fehler auf der Webseite aus. Dass kann durch provozierte Aufrufe zur Preisgabe von unerwünschten Informationen wie

  • lokaler Verzeichnispfad des Webservers
  • Apache-Version
  • PHP-Version
  • Patchlevel von Apache2/PHP

führen.

Daher sollten diese Informationen auf Produktivsystem nicht öffentlich angezeigt werden.

PHP

Dazu muss man nur in der entsprechenden php.ini (hier: /etc/php5/apache2/php.ini) das Anzeigen der Fehler abschalten (Off).

; Print out errors (as a part of the output). For production web sites,
; you're strongly encouraged to turn this feature off, and use error logging
; instead (see below). Keeping display_errors enabled on a production web site
; may reveal security information to end users, such as file paths on your Web
; server, your database schema or other information.
;
display_errors = Off

Für den Administrator sind diese Fehler natürlich trotzdem wichtig. Daher sollte man das Logging der Fehler einschalten (On).

; Log errors into a log file (server-specific log, stderr, or error_log (below))
; As stated above, you're strongly advised to use error logging in place of
; error displaying on production web sites.
;
log_errors = On

Die Fehlermeldungen werden in das error-Log der jeweiligen vHost- oder Standard-Konfiguration geschrieben.

Apache2

Auch der Apache2 kann noch etwas schweigsamer konfiguriert werden. Und damit das nicht so schwer fällt, ist es sogar schon vorbereitet.

Im Pfad „/etc/apache2/conf.d/“ existiert in Debian die Datei „security“. In dieser sind bereits die wichtigsten Einstellung vorhanden und müssen für Produktivsysteme nur noch aktiviert werden.

# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of:  Full | OS | Minimal | Minor | Major | Prod
# where Full conveys the most information, and Prod the least.
#
ServerTokens Minimal
#ServerTokens Full
#ServerTokens Prod
#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:  On | Off | EMail
#
ServerSignature Off

Kerberos-Authentifizierung

Allgemeines

Je weiter man in sicherheitsrelevante Netzwerke eintaucht, um so öfter begegnet man der Anforderung einer zentralen Benutzer-Authentifizierung. Klar man kann sich jetzt einen eigenen LDAP-Server mit openLDAP aufbauen, Schemata einrichten und mit Inhalten füllen. Wenn aber, wie in vielen Firmen, bereits ein Active Directory vorhanden ist, kann man ja auch gleich diese Möglichkeiten verwenden, oder? Also Kerberos-Utilities installiert, konfiguriert, Benutzer angelegt und los.

Ok, eine vollständige Integration, bei der neue Benutzer automatisch angelegt werden ist das nicht. Aber für die Administration von Linux-Servern über SSH wird das auch nicht unbedingt benötigt. Die Personen, die das System betreuen sind meistens überschaubar oder können z.B. durch Software-Verwaltungen wie Puppet angelegt werden.

Ich beschreibe hier die Einrichtung der Kerberos-Authentifizierung für Ubuntu/Debian. Für RPM-basierte Systeme müssen ggf. die notwendigen Pakete bzw. die Pfade angepasst werden.

Benötigte Pakete

Für Kerberos ist eine Zeitsynchronisation essentiell. Daher ist NTP Pflicht. Zusätzlich natürlich die Kerberos-Utilities:

apt-get install ntp ntpdate libpam-krb5 krb5-user

Konfiguration

NTP

Die Standard-Werte helfen uns in diesem Fall nicht weiter, da es darauf ankommt die gleiche Zeit wie der Kerberos-Server zu haben. Also müssen die vorhandenen Domain-Controller „herhalten“. Das ganze habe ich als sed-Statements zusammengeschrieben, damit ich es jedes Mal einfach auf die NTP-Konfigurationsdatei /etc/ntp.conf anwenden kann.

Backup der ntp.conf anlegen:

cp /etc/ntp.conf /etc/ntp.conf.bak

Domain-Controller angeben:

dc1=dc1.domain.tld
dc2=10.10.0.1

NTP-Sed für Debian:

sed -i 's/^server 0.debian.pool.ntp.org iburst/#server 0.debian.pool.ntp.org iburst/g' /etc/ntp.conf
sed -i 's/^server 1.debian.pool.ntp.org iburst/#server 1.debian.pool.ntp.org iburst/g' /etc/ntp.conf
sed -i 's/^server 2.debian.pool.ntp.org iburst/#server 2.debian.pool.ntp.org iburst/g' /etc/ntp.conf
sed -i 's/^server 3.debian.pool.ntp.org iburst/#server 3.debian.pool.ntp.org iburstnserver $dc2nserver $dc1/g' /etc/ntp.conf

NTP-Sed für Ubuntu:

sed -i 's/^server 0.ubuntu.pool.ntp.org/#server 0.ubuntu.pool.ntp.org/g' /etc/ntp.conf
sed -i 's/^server 1.ubuntu.pool.ntp.org/#server 1.ubuntu.pool.ntp.org/g' /etc/ntp.conf
sed -i 's/^server 2.ubuntu.pool.ntp.org/#server 2.ubuntu.pool.ntp.org/g' /etc/ntp.conf
sed -i 's/^server 3.ubuntu.pool.ntp.org/#server 3.ubuntu.pool.ntp.orgnserver $dc2nserver $dc1/g' /etc/ntp.conf

Kerberos

Nun muss noch die Verbindung zu den Domain-Controllern konfiguriert werden. Die notwendigen Schreibweisen habe ich durch die entsprechenden Umformatierungen bereits eingebaut. Es müssen nur die Werte für WORKGROUP, DOMAIN und DOMAIN-CONTROLLER angegeben werden:

# benötigte Variablen sicherheitshalber zurücksetzen
unset adm
unset kdc
# Workgroup
ownwg=OWNWORKGROUP
# Domäne angeben
owndomain=DOMAIN.TLD
# Domänen-Controller
dc[0]=dc1.domain.tld
dc[1]=dc2.domain.tld
### Nicht mehr ändern
DOMAIN=$(echo $owndomain | tr '[:lower:]' '[:upper:]')
domain=$(echo $owndomain | tr '[:upper:]' '[:lower:]')
WORKGROUP=$(echo $ownwg | tr '[:lower:]' '[:upper:]')
workgroup=$(echo $ownwg | tr '[:upper:]' '[:lower:]')
for i in "${dc[@]}"; do
  kdc=$(echo -e "kdc = $int$kdc")
  adm=$(echo -e "admin_server = $int$adm")
done
 
cat > /etc/krb5.conf << EOF
[libdefaults]
        default_realm = $DOMAIN
        clockskew = 300
        kdc_timesync = 1
        forwardable = true
        proxiable = true
 
[realms]
$DOMAIN = {
        $kdc
        default_domain = $DOMAIN
        $adm
}
 
 
 
[logging]
        kdc = FILE:/var/log/krb5/krb5kdc.log
        admin_server = FILE:/var/log/krb5/kadmind.log
#       default = SYSLOG:NOTICE:DAEMON
        default = FILE:/var/log/krb5.log
[domain_realm]
        .$WORKGROUP = $DOMAIN
        $WORKGROUP= $DOMAIN
[appdefaults]
pam = {
        ticket_lifetime = 6h
        renew_lifetime = 6h
        forwardable = true
        proxiable = false
        retain_after_close = false
        minimum_uid = 1
        use_shmem = sshd
}
EOF

Benutzer anlegen

Wie oben bereits erwähnt wurde lediglich die Verbindung zum Kerberos-Server konfiguriert, damit bestehende Benutzer authentifiziert werden können. Die Benutzer müssen aber weiterhin manuell angelegt werden. Dies muss mit dem Kontonamen aus der Domäne erfolgen:

useradd -s /bin/bash -m $SAM-Account

Um das zu testen, kann man sich jetzt ein Kerberos-Ticket ausstellen lassen:

kinit $SAM-Account
klist

Fallstricke

Zeitunterschied zu groß

Bei Kerberos darf der Zeitunterschied zwischen Client und Server maximal 5 Minuten sein. Sollte die Anmeldung mal nicht funktionieren unbedingt die Zeitsynchronisation prüfen und ggf. manuell synchronisieren:

# NTP-Dienst anhalten
/etc/init.d/ntp stop
# Manuelle Synchronisation
ntpdate dc1.domain.tld
# NTP-Dienst wieder starten
/etc/init.d/ntp start
# NTP kontrollieren
ntpq -p

Installations-Benutzer kann Passwort nicht ändern

In der Standard-Konfiguration kann der Benutzer, der bei der Installation angelegt wurde, sein Passwort nicht mehr ändern. Grund dafür ist die PAM-Konfiguration, die die Passwortänderung für alle Benutzer aber UID>=1000 an Kerberos weiterleitet. Da der Installationsbenutzer dort aber wahrscheinlich nicht existiert, schlägt die Änderung fehl.

# z.B. in /etc/pam.d/common-auth kontrollieren:
# auth [success=2 default=ignore] pam_krb5.so minimum_uid=1000

Dies lässt sich aber sehr leicht durch das Austauschen der entsprechenden Zeile ändern:

sed -i 's/pam_krb5.so minimum_uid=1000/pam_krb5.so minimum_uid=1001/g' /etc/pam.d/common-*

Damit werden in allen common-Dateien unterhalb von /etc/pam.d/ die uid von 1000 auf 1001 hochgesetzt.

# auth [success=2 default=ignore] pam_krb5.so minimum_uid=1001

Dadurch wird der Installationsbenutzer wieder nur noch lokal authentifiziert.

mdadm checkarray auto-read-only

05Fehlermeldung:
checkarray: W: array md1 in auto-read-only state, skipping...

Ausgabe mdstat:

Server:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[0] sdb3[1]
      1949367168 blocks [2/2] [UU]
md1 : active (auto-read-only) raid1 sda2[0] sdb2[1]
      3903680 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
      240832 blocks [2/2] [UU]
unused devices: <none>

Wenn das Array neu eingerichtet und noch nie genutzt wurde, steht es noch im Zustand „auto-read-only“. Dadurch kann der Raid-Verbund nicht geprüft werden. Bei mir ist md1 das Raid-1-Array mit der Swap-Datei. Da mein Rechner relativ frisch installiert ist, wurde der SWAP noch nicht genutzt. Abhilfe schafft folgende Vorgehensweise:

# Alle Swap-Dateien aus /proc/swaps deaktivieren
Server:~# swapoff -a
# SWAP-Dateisystem auf das gemeldete Gerät (bei mir md1) schreiben
Server:~# mkswap /dev/md1
# Alle Swap-Dateien aus /proc/swaps aktivieren
Server:~# swapon -a

Ausgabe mdstat danach:

Server:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[0] sdb3[1]
      1949367168 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
      3903680 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
      240832 blocks [2/2] [UU]
unused devices: <none>

Und schon klappt der Check wieder:

Server:~# /usr/share/mdadm/checkarray --quiet /dev/md1
Server:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[0] sdb3[1]
      1949367168 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
      3903680 blocks [2/2] [UU]
      [===>.................] check = 19.4% (758272/3903680) finish=0.6min speed=84252K/sec
md0 : active raid1 sda1[0] sdb1[1]
      240832 blocks [2/2] [UU]
unused devices: <none>

Weitere Infos dazu im Debian Bug Tracker

vim als Standard-Editor festlegen

Ich ziehe vim nano für die Arbeit mit Textdateien vor. Um ihn als Standardeditor unter Debian festzulegen, muss einfach der den Link für den bevorzugten Editor ändern. Dann kann man z.B. seine crontab wieder mit vim bearbeiten.

Server:~# ls -alh /etc/alternatives/editor
lrwxrwxrwx 1 root root 12 29. Apr 07:46 /etc/alternatives/editor -> /usr/bin/nano
Server:~# rm /etc/alternatives/editor
Server:~# ln -s /usr/bin/vim /etc/alternatives/editor
Server:~# ls -alh /etc/alternatives/editor
lrwxrwxrwx 1 root root 12 29. Apr 07:46 /etc/alternatives/editor -> /usr/bin/vim

Konsolenauflösung vergrößern unter Debian Squeeze

In Squeeze hat sich diese Änderung auf einen Eintrag reduziert. Anfangs musste nur noch die folgende Zeile in der Datei /etc/default/grub erweitert werden:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=0x0305"

Den Erweiterungsteil habe ich fett/kursiv markiert. Allerdings ist diese Konfiguration bereits überholt (deprecated).

Aktuell muss mann nur noch den GFXMODE in der Datei o.g. Datei angeben:

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=1024x768

Damit diese Einstellung auch nach dem abgeschlossenen Boot-Vorgang noch aktiv ist, muss diese als permanent markiert werden. Das erfolgt in der Datei /etc/grub.d/00_header:

if loadfont `make_system_path_relative_to_its_root 
 "${GRUB_FONT_PATH}"` ; then
 set gfxmode=${GRUB_GFXMODE}
 set gfxpayload=keep
 load_video
 insmod gfxterm
fi

Dazu die Zeile set gfxpayload=keep unterhalb der Zeile set gfxmode=${GRUB_GFXMODE} einfügen.

Danach noch die GRUB Konfigurationsdateien aktualisieren:

update-grub

Danke an Pronto, auf dessen Webseite, ich diesen Tipp gefunden habe.

Konsolenauflösung vergrößern unter Debian Lenny

Auf aktuellen Monitoren mit 19″ und mehr, kann die geringe Auflösung der Monitor-Konsole schon ziemlich lästig sein. Man kann daher die Konsole im Grafikmodus betreiben, muss dazu aber ein paar Einstellungen vornehmen.

Damit die benötigten Kernelmodule bereits beim Systemstart geladen werden, sind in der Datei /etc/initramfs-tools/modules folgende Zeilen hinzuzufügen:

...
fbcon
vesafb
vga16fb
...

Bei Debian Lenny noch die Initram-Datei neu generieren lassen (bei Squeeze nicht mehr notwendig).

Server# update-initramfs -u

Jetzt wird noch die entsprechende Modusnummer für die gewünschte Bildschirmauflösung benötigt. Das geht am besten mit dem Paket hwinfo und der Option –framebuffer.

Server# aptitude install hwinfo
Server# hwinfo --framebuffer

Das Paket wird immer benötigt, um die unterstütze Auflösung herauszufinden.

...
Mode 0x033c: 1920x1440 (+1920), 8 bits
Mode 0x033a: 1600x1200 (+1600), 8 bits
Mode 0x0307: 1280x1024 (+1280), 8 bits
Mode 0x0305: 1024x768 (+1024), 8 bits
Mode 0x0301: 640x480 (+640), 8 bits
Mode 0x0303: 800x600 (+832), 8 bits
...

Jetzt in Lenny noch die gewünschte Auflösung in der GRUB-Konfigurations-Datei an zwei Stellen eintragen. Einmal in der Zeile beginnend mit # defoptions und in der Kernelzeile, die durch Grub standardmäßig gestartet wird (meistens die Erste).

Datei /boot/grub/menu.lst

...
# defoptions=quiet splash vga=0x0307
...

Debian in ein Active Directory integrieren

Quelle

Diese Dokumentation ist zu großen Teilen dem Artikel Debian Linux in eine Active Directory Domäne integrieren auf www.administrator.de entnommen. Eine sehr gute Anleitung, die ich hier nur für mich spezialisiert und erweitert habe.

Vorraussetzungen

Zeitsynchronisation (NTP)

Da das Kerberos Protokoll, das der Debian Server nutzen soll um mit dem Active Directory zu kommunizieren, stark von einer exakten Systemzeit abhängt, muss der Debian Server als NTP Client und der Windows Server als NTP Client als auch NTP Server konfiguriert sein, damit die Zeitsynchronität gewährleistet werden kann. Der Windows Server bezieht in unserem Szenario die Systemzeit von einem externen NTP Server, während der Debian Server als NTP Client die Systemzeit vom Windows Server bezieht.

DNS Namensauflösung (Forward Lookup und Reverse Lookup)

Ermitteln der verschiedenen Namen die der Domaincontroller trägt (Netbios, Workgroup, Domänen-Name, Kerberos-Realm) Man kann die NETBIOS- und Workgroup Namen auf dem Server2003 mit dem Befehl

nbtstat –n

ermitteln. Der Debian Server muss einen Reverse DNS Lookup auf den Domaincontroller machen können, also die IP Adresse in den DNS Namen auflösen können. Testen mit:

host 192.168.178.140
140.178.168.192.in-addr.arpa domain name pointer dc.firma.de

In aller Regel gilt z. B. bei einem Domaincontroller namens DC.FIRMA.DE

  • der NETBIOS Name ist „DC“
  • der Workgroup Name ist „FIRMA“
  • der DNS Name ist „DC.FIRMA.DE“
  • der Kerberos Realm ist „FIRMA.DE“
  • der Domänen-Name ist „FIRMA.DE“

Damit die AD-Integration des Linux Servers einwandfrei funktioniert ist es wichtig dass..

  • beide Server (Debian und DC) den Namen des anderen auflösen können
  • Forward-Lookup (nslookup debian.firma.de bzw. nslookup dc.firma.de) als auch
  • Reverse-Lookup (nslookup 192.168.178.140 bzw. nslookup 192.168.178.150)

einwandfrei auf beiden Servern funktionieren!

Debian IP Konfiguration

IP-Konfiguration: /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
     address 192.168.178.150
     netmask 255.255.255.0
     network 192.168.178.0
     broadcast 192.168.178.255
     gateway 192.168.178.1

DNS Konfiguration: /etc/resolv.conf

# search firma.de 
nameserver 192.168.178.140

Interface resetten (nur bei Konsolenverbindung machen!!!)

# ifdown eth0 
# ifup eth0

Berechtigungen im Active Directory

Man benötigt für die AD-Integration ein AD-Benutzerkonto mit entsprechenden Berechtigungen. Dies kann ein Domänenadministrator sein. Es kann jedoch auch ein spezielles Benutzerkonto erstellt werden das die Berechtigung bekommt Objekte im AD anzulegen. Das ist notwendig da der Debian Server selbst ein Computerkonto im Active Directory anlegen muss und auch Berechtigungen braucht um Anfragen an das AD stellen zu können.

Debian Server Konfiguration

Installation Samba, Winbind, NTP, ntpdate, Kerberos und SSH

Installation für Windows Server 2003 Domänen

# aptitude install libkrb53 krb5-{user,config} samba smbclient winbind ntpdate ntp ssh

Unter Ubuntu (10.04 LTS) heißt das Paket libkrb53

libkrb5-3

Installation für Windows Server 2008 Domänen

Für die Integration des Servers in einen W2k8 Domäne ist zum aktuellen Zeitpunkt (20.05.2010) die Samba-Version des aktuell stabilen Debian Lenny zu alt, da ab Windows Server 2008 nur noch Kerberos und nicht mehr NTLM als Authentifizierung genutzt werden kann. Diese wird aber in der Samba-Version (3.2.5) noch nicht unterstützt. Deswegen müssen für eine Integration in W2k8-Domänen die Pakete aus dem Backport Repository installiert werden.

Dazu die folgende Zeile in die Datei /etc/apt/sources.list einfügen:

deb http:// www.backports.org/debian lenny-backports main contrib non-free

Danach ein …

# aptitude update

… und mann kann mit dem angepassten Install-Befehl die neueren Versionen installieren:

# aptitude -t lenny-backports install libkrb53 krb5-{user,config} samba smbclient winbind ntpdate ntp ssh telnet

Die Konfiguration ist die gleiche, wie in 2003-Domänen.

Dienste beenden

/etc/init.d/samba stop
/etc/init.d/winbind stop
/etc/init.d/ntp stop

Unter Ubuntu (10.04 LTS) heißt der Samba-Dienst anders:

/etc/init.d/smbd stop

Die Warnmeldung bzgl. upstart kann ignoriert werden.

Backup der Linux Config Dateien

Es ist ratsam zunächst alle Config Dateien auf dem Debian System zu sichern bevor man anfängt sie zu editieren. Wenn man beispielsweise bei der PAM Konfiguration die Config zerschießt ist u. U. keine Anmeldung am System mehr möglich.

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
cp /etc/krb5.conf /etc/krb5.conf.bak
tar -czf /etc/pam.d.targ.gz /etc/pam.d
tar -czf /var/lib/samba.tar.gz /var/lib/samba

Konfiguration der Dienste

Kerberos

Hier eine detailierte Beschreibung möglicher Parameter der krb5.conf

Datei: /etc/krb5.conf

[libdefaults]
    Default_realm = FIRMA.DE
     #The following krb5.conf variables are only for MIT Kerberos.
    krb4_config = /etc/krb.conf
    krb4_realms = /etc/krb.realms
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true
[realms]
     FIRMA.DE = {
        kdc = dc.firma.de
        admin_server = dc.firma.de
    }
[domain_realm]
     .firma.de = FIRMA.DE
[login]
    krb4_convert = true
    krb4_get_tickets = false

NTP

In der Datei /etc/ntp.conf den Domänencontroller als Zeitserver eintragen:

server 192.168.178.140

ntpdate

ntpdate dc.firma.de

NTP Dienst starten

/etc/init.d/ntp start

Zeitsynchronisation testen

ntpq -p
dat

Bei Bedarf Zeitzone ändern

Ich verwende Europe/Berlin.

dpkg-reconfigure tzdata

Winbind

Datei: /etc/samba/smb.conf

Hier eine detailliertere Beschreibung des winbind Dienstes

[global]
     workgroup = FIRMA (Arbeitsgruppen Name; in aller Regel Domänen-Name ohne Suffix)
      realm = FIRMA.DE (Domänen-Name)
      netbios name = DEBIAN (NETBIOS-Name des Debian Servers; max. 15 Zeichen lang!)
      security = ADS (Active Directory soll die Authentisierung stellen)
      idmap uid = 10000-20000 (Range der UIDs für das Mapping von AD-RIDs auf UIDs)
      idmap gid = 10000-20000 (Range der GIDs für das Mapping von AD-RIDs auf GIDs)
      template shell = /bin/bash (Shell die der Benutzer nach der Anmeldung bekommt)
      winbind use default domain = yes (User muss kein Prefix bei der Anmeldung angeben)

Hintergrundwissen „idmap“:

Das Linux System hat auch eine lokale Benutzerverwaltung (/etc/passwd). Jeder Benutzer und jede Gruppe benötigt eine eindeutige Kennung.

Im Active Directory sind dies die „SIDs“. Die SID besteht aus dem Domänen-Identifikator und einer RID (Relative Identifier). Jedes Benutzerkonto und jede Gruppe hat eine SID, eine eindeutige Sicherheitskennung.

Da Active Directory und Linux verschiedene Techniken für die Zuordnung von User- und Gruppennamen zu SIDs bzw. UID/GIDs benutzen, ist eine der Aufgaben von winbind, ein Mapping von Active Directory SIDs zu Linux UIDs/GIDs durchzuführen. Diese Zuordnung (welche SID ist zu welcher UID/GID zugeordnet) wird auf dem Linux Server in einer lokalen Datenbank unter /var/lib/samba/winbindd_idmap.tib gespeichert.

Durch den Eintrag „idmap uid = 10000-20000“ wird definiert, dass der Bereich von UID 10000 bis 20000 nicht von der internen Benutzerverwaltung verwendet wird, also für das Mapping von Active Directory SIDs zu Linux UIDs bzw. GIDs verwendet werden soll.

Testen der winbind Config mit

testparm

NSSWITCH

Datei: /etc/nsswitch.conf

Hier eine detailliertere Beschreibung der nsswitch Funktionalität

# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd:        compat winbind
group:         compat winbind
shadow:        compat
hosts:         files dns
networks:      files
protocols:     db files
services:      db files
ethers:        db files
rpc:           db files
netgroup:      nis

PAM

Datei: /etc/pam.d/common-auth

Hier eine detailliertere Beschreibung der pam.d Konfigurationsdateien

# /etc/pam.d/common-auth - authentication settings common to all services
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure use_first_pass

Datei: /etc/pam.d/common-session

Damit bei der ersten Anmeldung am Rechner ein lokales Home-Verzeichnis angelegt wird, kann als erster Eintrag die Zeile

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

eingetragen werden.

Direkt dahinter sollte noch

session sufficient pam_winbind.so

stehen, damit der gdm bereits beim ersten Anmeldeversuch beim AD nachfragt.

Die vollständige Datei sieht dann bei mir so aus:

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session sufficient pam_winbind.so
session required pam_unix.so

Debian Server in die Domäne integrieren

Checkliste

  • host 192.168.178.140 (Funktioniert der Reverse Lookup?)
  • nslookup dc.firma.de (Funktioniert die DNS Namensauflösung?)
  • ping dc.firma.de (Ist der Domaincontroller erreichbar?)
  • telnet dc.firma.de 445 (Port TCP445 erreichbar?)
  • telnet dc.firma.de 139 (Port TCP139 erreichbar?)
  • ntpq –p (Läuft die Zeitsynchronisation?)
  • dpkg-reconfigure tzdata (Stimmt die Zeitzone?)
  • ps –ef | grep mbd (Testen ob der Dienst läuft – wenn ja, stoppen!)
  • ps –ef | grep winbind (Testen ob der Dienst läuft – wenn ja, stoppen!)
  • /etc/init.d/winbind stop (winbindd stoppen!)
  • /etc/init.d/samba stop (smbd / nmbd stoppen!)
  • rm –rf /var/lib/samba/* (eventuell vorhandene winbind cache DB löschen!)

net join

net ads join –U Administrator (Das ist der Domänen-Administrator oder ein Benutzerkonto das berechtigt ist Objekte im AD anzulegen)

Dienste starten

/etc/init.d/samba start 
/etc/init.d/winbind start

Unter Ubuntu (10.04 LTS) heißt der Samba-Dienst anders:

/etc/init.d/smbd start

Die Warnmeldung bzgl. upstart kann ignoriert werden.

Kontrollieren ob SMBD, NMBD und WINBIND Dienste gestartet sind:

ps –ef | grep mbd 
ps –ef | grep winbind

Funktionalität testen

wbinfo –t (zeigt an ob das RPC trust secret passt)
wbinfo -a Administrator%Passwort (zeigt an ob sich AD-User Administrator über winbind authentisieren kann)
wbinfo –u (zeigt die Active Directory Benutzer an)
wbinfo –g (zeigt die Active Directory Gruppen an)
ssh Administrator@localhost (testen ob man sich lokal per SSH als Administrator (oder andere AD-Benutzer) anmelden kann) 
init 6 (Debian Server neu starten und schaun ob die Dienste beim Neustart sauber starten)
update-rc.d samba defaults (Dienste, die eventuell nicht automatisch starten, zu den Autostart Services hinzufügen)
update-rc.d ntp defaults
update-rc.d winbind defaults

Fehlersuche

Was tun wenn es nicht funktioniert, oder wenn es „in der Regel“ funktioniert und plötzlich nicht mehr funktioniert?

Es wird dann Zeit für das wofür man eigentlich bezahlt wird – Fehlersuche und Fehlerbeseitigung.

Teste die grundsätzliche Erreichbarkeit auf Netz- und Portebene

  • ping IP-Adresse (beidseitig)
  • telnet 192.168.178.140 445
  • telnet 192.168.178.140 139

Teste die DNS Namensauflösung auf beiden Servern

Debian Server:
  • host 192.168.178.140 (funktioniert Reverse-Lookup?)
  • host dc.firma.de (funktioniert Forward-Lookup?)
  • ping dc.firma.de (funktioniert Layer3 Konnektivität?)
Windows Server:
  • nslookup 192.168.178.150
  • nslookup debian.firma.de
  • ping debian.firma.de

Logfiles checken

Debian Server:
  • /var/log/samba/log.winbindd
  • /var/log/messages
Windows Server:
  • Ereignisanzeige

Active Directory checken

  • Ist das Computerkonto des Debian Servers deaktiviert? Wenn ja – aktivieren.
  • Ist das Computerkonto des Debian Servers gelöscht? Wenn ja – neu anlegen mit „net ads join -U Administrator“ auf dem Debian-Server. Computerkonto nicht manuell auf dem DC anlegen!

Wiederherstellung der Funktionalität

Siehe oben in der Anleitung ab Backup der Linux Config Dateien.

Informationen aus dem AD anzeigen

Benutzerinformationen zu einem Benutzer

wbinfo -i <benutzername>

AD-Gruppen eines Benutzers abfragen

for GID in $(wbinfo -r <benutzername>); do echo Windows-Gruppe: $(wbinfo -s $(wbinfo -G $GID)), Unix-GID: $GID ; done