Debian-OPSI-samba4

Aus Vosp.info
Version vom 19. Oktober 2015, 18:39 Uhr von HK (Diskussion | Beiträge) (Herausforderung)
Wechseln zu:Navigation, Suche

Herausforderung

OPSI und Samba4 als AD/DC verstehen sich nicht wirklich gut.
OPSI benötigt den User pcpatch, der sich per SSH und keyfile als Systemuser auf dem OPSI-Server anmelden können muss.
Das soll möglich sein, ist mir allerdings nicht geglückt. Die uib.GmbH, der Hersteller von OPSI, hat Mitte 2015 im Forum erklärt, dass Samba 4 AD DCs ihnen Probleme bereiten und ein Lösung für Debian nicht bereit steht. Hier soll die Frage geklärt werden, ob es auch anders geht.

Der Ansatz dieses Postings ist es, beide relativ unabhängig von ein ander im Netzwerk arbeiten zu lassen.
Der OPSI-Server soll kein Teil der Windows-Domäne werden. Der OPSI-Agent auf den Clienten soll sich beim Systemstart am OPSI-Server im Workgroup-Mode anmelden, wenn er Daten für Installationen benötigt.
Beim Anmelden eines Users am Windows-Clienten geschieht Authentifizierung über den Samba4 AD DC.

Arbeitsteilung:

  • Container Samba4 wird DNS zu Verfügung stellen.
  • Container OPSI-1 wird DHCP zu Verfügung stellen.


Soweit die Theorie. Dieses Posting soll klären, ob die Idee etwas wert ist.
Kurz und bündig: Ja. Die Tests waren erfolgreich.

Ziel

  • LXC-Host auf Debian Jessie Basis.
  • Zwei Container
    • OPSI - Nicht Teil der Domäne. Es soll Software installieren, bevor die Domäne in Kraft tritt.
    • Samba4 - AD/DC

Installation LXC-Host

Server mit GRML starten

Festplatten partitionieren

fdisk /dev/sda
  * /  5G
  * swap 1G
  * lvm Rest

LVM nur für die Container

pvcreate /dev/sda3
vgcreate vg_lxc /dev/sda3
lvcreate -L 20G -n lv_lxc vg_lxc
grml-debootstrap --target /dev/sda1 --grub /dev/sda
reboot

System starten

Keyboard layout einstellen

dpkg-reconfigure console-data

Im ncurses-Menu auswählen.

  • Select keymap from arch list => O.K.
  • qwertz => O.K.
  • German => O.K.
  • Standard => O.K.
  • latin1 => O.K.

Sprache einstellen

dpkg-reconfigure locales

de_DE.UTF-8 auswählen und als default einstellen

Bash-completion

apt-get install bash-completion

Farbiges Promt

vim ~/.bashrc

export PS1='\[\033[0;31m\]\u\[\033[0;36m\]@\h:\[\033[0m\]\w\$ '
  • [0;36m] Türkis (cyan)
  • [0;32m] Grün (green)
  • [0;31m] Rot (red)
  • Meine Farbregeln
    • Vor dem Promt: rot für root und grün für user.
    • Hinter dem Promt: rot für Produktivserver, türkis für Testrechner und grün für Privatrechner/Workstations.


Meine .bashrc für root auf einem Testrechner.

# ~/.bashrc: executed by bash(1) for non-login shells.

export PS1='\[\033[0;31m\]\u\[\033[0;36m\]@\h:\[\033[0m\]\w\$ '
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

# Some more alias to avoid making mistakes:
alias rm='rm -i'
# bash-completion
. /etc/bash_completion

PATH=$PATH:~/bin

Damit PATH wirksam werden kann:

mkdir ~/bin

Dort leben alle custom-scripts.

Hostname

Wir nennen diesen Rechner host-1-lnx01

vim /etc/hostname

host-1-lnx01 eintragen

/etc/network/interfaces

Die interfaces Datei anpassen.

vim /etc/network/interfaces

eth1 ist hier das Interface zum Intranet

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
       address 10.8.190.1
       broadcast 10.8.190.255
       netmask 255.255.255.0


LXC installieren

apt-get install lxc lxctl

LVM für LXC einbinden

LVM auf /var/lib/lxc einbinden.

mkfs.ext4 /dev/vg_lxc/lv_lxc
blkid |grep mapper >> /etc/fstab
vim /etc/fstab

Am Ende muss die Zeile so außsehen. Der UUID weicht natürlich ab.

/dev/disk/by-uuid/2c58a476-7b09-428c-8277-b80889443220 /var/lib/lxc ext4        defaults        0       0


Netzwerk für LXC vorbereiten

vim /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

# eth0 verbindet den Host mit dem Internet
auto eth0
iface eth0 inet dhcp
 
# Mit diese Bridge werden die Container verbunden, damit sie Verbindung zum Internet bekommen.
auto lxcbr0
iface lxcbr0 inet static
       address 10.0.0.1
       netmask 255.255.255.0
       pre-up (ip addr show |grep lxcbr0) || brctl addbr lxcbr0


# eth1 verbindet den Host physikalisch mit dem Intranet
auto eth1
iface eth1 inet manual

# Per Bridge steht eth1 den Containern zur Verfügung
auto lxc-out
iface lxc-out inet manual
       bridge_ports    eth1
       bridge_maxwait 1

Packet Forwarding einschalten

vim /etc/sysctl.conf 

Die folgende Zeile suchen und einkommentieren (# vor der Zeile entfernen)

net.ipv4.ip_forward=1

MASQUERADE der Firewall einschalten

apt-get install -y iptables

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Dauerhaft abspeichern und nach jedem Hoststart laden

apt-get -y install iptables-persistent 

Änderungen an der Firewall speichern mit

iptables-save > /etc/iptables/rules.v4

Container backup

Immer eine gute Idee, bevor mensch weitere Schritte im Container unternimmt.

cd /var/lib/lxc
cp -a <container-name> <container-name>-$(date +%Y-%m-%d_%H.%M)
vim /var/lib/lxc/<container-name>-Datum/config
# Autostart des Containers ( 0 steht für kein Autostart)
lxc.start.auto = 0

Einspielen des Backup:

rm -rf <container-name>
cp -a <container-name>-Datum <container-name>
vim /var/lib/lxc/<container-name>-Datum/config
# Autostart des Containers ( 0 steht für kein Autostart)
lxc.start.auto = 0
  • Das Backup lässt sich nicht einfach starten. Dazu müssen sämtliche Pfade in der config angepasst werden.

Alternativ steht lxc-clone zur Verfügung, dass auch die config an den neuen Namen anpasst.
Der geclonte Container ist sofort startbereit.

  • Bitte beachten: die erzeugte config sieht anders aus, z.B. sind alle Kommetare weg.

lxc-backup

Ein sehr simples Script für das Container Backup

cd /var/lib/lxc
lxc-backup <container-name>

Er wird automatisch im selben Verzeichniss eine Kopie mit Zeitstempel erzeugt.
autostart muss händisch abgeschaltet werden. Kommt noch.......
LXC-Scripte von code.netz.coop

Container samba4.test2.local erstellen

Container samba4.test2.local erzeugen

lxc-create --name samba4.test2.local -t debian

Auf dem Host Container samba4.test2.local einrichten

Als erstes wird die erzeugte Conf bearbeitet.

vim /var/lib/lxc/samba4.test2.local/config

Entfernen

lxc.network.type = empty

Hinzufügen

# Autostart des Containers ( 0 steht für kein Autostart)
lxc.start.auto = 1
# Der OPSI-Container bekommt 10s verzögerung nützt nichts, das interene Netz baut sich fehlerhaft auf.
# lxc-stop und lxc-start schaft Abhilfe. Nicht gut.
lxc.start.delay = 5
# Optional
lxc.start.order = 100 

# Netzwerk
# Erzeugt tun-device, dass in die Bridge lxcbr0 eingefügt wird (Internet)
lxc.network.type=veth
# Bridge, in der das Interface eingefügt wird
lxc.network.link=lxc-in 
lxc.network.hwaddr = 00:FF:AA:00:21:01
lxc.network.ipv4 = 10.0.0.5/24
# Gateway des Containers
lxc.network.ipv4.gateway  = 10.0.0.1 
lxc.network.flags=up
# Name des TUN-Devices auf dem Host
lxc.network.veth.pair=samba4-in 
 
# Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet)
lxc.network.type=veth
 # Bridge, in der das Interface eingefügt wird
lxc.network.link=lxc-out 
lxc.network.hwaddr = 00:FF:AA:00:21:11
lxc.network.ipv4 = 10.8.190.5/24
lxc.network.flags=up
# Name des TUN-Devices auf dem Host
lxc.network.veth.pair=samba4-out 

# OpenVPN
# Damit OpenVPN im Container genutzt werden kann.
lxc.cgroup.devices.allow = c 10:200 rwm

#Setzt den Hostnamen mittels <Container>/rootfs/etc/hosts
lxc.utsname = samba4

Im Container samba4.test2.local einrichten

In einem Container, der mit lxc-create erzeugt wurde, ist viel weniger Software installiert als auf dem Host, der mit grml-debootstrab erzeugt wurde.

apt-get update
apt-get -y install bash-completion vim less iputils-* dnsutils

#Farbiges_Promt

  • Zeitzone anpassen
dpkg-reconfigure tzdata

Die Zeit übernimmt der Container vom Host, die Zeitzone nicht.

  • /etc/hosts
127.0.0.1       localhost
10.8.190.5      samba4.test2.local samba4

Testen mit

getent hosts $(hostname -f)

Ausgabe muss bei unserem Beispiel so aussehen

10.8.190.5      samba4.test2.local samba4

Samba4 AD DC installieren und einrichten

apt-get install samba krb5-config smbclient


  • Samba4 AD DC install
    • Genutzt zur Ersteinrichtung des AD DCs, sehr knapp. Bitte in einem zweiten Tab öffnen
  • # set realm: die Anleitung scheint den fqdn des Servers als REALM zu nutzen.
    • REALM: test2.local
  • # specify the hostname ... of Kerberos servers for your Kerberos realm:
    • samba4.test2.local
  • # specify the hostname ... Administrative server for your Kerberos realm:
    • samba4.test2.local
  • # rename or remove the default config file
root@smamba4:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak => Die Endung .bak ist ein MUSS für alte Leute :-)
  • Erzeugen des REALMs. VORHER den Abschnitt auf server-world.info lesen!
root@smb:~# samba-tool domain provision 


  • # restart system
root@samba4:~# reboot 

Unsere Domäne test2.local steht mit den Fähigkeiten eines Windows Server 2008 R2 bereit.
Testweise binden wir einen Windows-Clienten in die Domäne ein.
Für den Beitritt benötigen wir einen berechtigten User und sein Passwort.

Beim domain provision haben wir ein Passowrt vergeben.
Der dazugehörige User heißt administrator.

Ab jetzt können wir uns mit Usern der Domäne am Clienten anmelden.
Bitte beachten: noch haben wir keine Roaming Profiles.

Ab jetzt steht auch ein DNS-Server zur Verfügung. Der OPSI-Server wird ihn auch nutzen.


Container opsi-1.test2.local erstellen

Container opsi-1.test2.local erzeugen

lxc-create --name opsi-1.test2.local -t debian

Auf dem Host Container opsi-1.test2.local einrichten

Rest wie beim Container samba4.test2.local. config anpassen.

  • Die MACs und IPs müssen verschieden sein!
  • Unser Beispiel:
10.0.0.10 => lxc-in
lxc.network.veth.pair = opsi-in

10.8.190.1 => lxc-out
lxc.network.veth.pair = opsi-out
lxc.utsname = opsi-1
MACs beliebig, aber unterschiedlich zum samba4 Container.

Im Container opsi-1.test2.local einrichten

In einem Container, der mit lxc-create erzeugt wurde, ist viel weniger Software installiert als auf dem Host, der mit grml-debootstrab erzeugt wurde.

apt-get update
apt-get -y install bash-completion vim less iputils-* dnsutils wget cpio

#Farbiges_Promt

  • Zeitzone anpassen
dpkg-reconfigure tzdata

Die Zeit übernimmt der Container vom Host, die Zeitzone nicht.

  • /etc/hosts
127.0.0.1       localhost
10.8.190.1      opsi-1.test2.local samba4

Testen mit

getent hosts $(hostname -f)

Ausgabe muss bei unserem Beispiel so aussehen

10.8.190.1      opsi-1.test2.local opsi-1

Packet Forwarding einschalten

vim /etc/sysctl.conf 

Die folgende Zeile suchen und einkommentieren (# vor der Zeile entfernen)

net.ipv4.ip_forward=1

MASQUERADE der Firewall einschalten

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Dauerhaft abspeichern und nach jedem Hoststart laden

apt-get install iptables-persistent 

Änderungen an der Firewall speichern mit

iptables-save > /etc/iptables/rules.v4

DHCP Server installieren und einrichten

apt-get -y install isc-dhcp-server

/etc/default/isc-dhcp-server

In /etc/default/isc-dhcp-server das etsprechende Netzwerkinterface eintragen, auf dem der DHCP-Server auf Anfragen lauschen soll.

vim /etc/default/isc-dhcp-server

In die Zeile

INTERFACES=""

das entsprechende Interface eintragen.
WICHTIG: Nur ein Interface darf rein, da die nc-opsi Tools darauf zurückgreifen!

INTERFACE="eth1"

/etc/dhcp/dhcpd.conf

Einträge für das Netzwerksegment 10.8.190.0/24.
dhcpd.conf leeren

echo > /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
# Ist der offizielle DHCP-Server für alles in 10.8.190.0/24
authoritative;
# DNS-Domain-Name in der /etc/resolv.conf des Clienten
# Das ist nicht die Windows Domain
option domain-name "test2.local";
# Nameserver ist samba4.test.local
option domain-name-servers 10.8.190.5;
 
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
 
subnet 10.8.190.0 netmask 255.255.255.0 {
  # Der Range für nicht unten aufgeführte Computer per default abgeschaltet.
  # range 10.8.190.230 10.8.190.245;
  option routers 10.8.190.1;
  option broadcast-address 10.8.190.255;
  default-lease-time 600;
  max-lease-time 7200;
}


# Bei dieser Config werden die IPs über den nameserver aufgelöst.
# Die Namensauflösung und configuration geschieht auf samba4.test2.local, siehe oben.
 
host win01 { hardware ethernet 00:00:00:00:00:00;  fixed-address win01.test2.local; }
host win02 { hardware ethernet 00:00:00:00:00:00;  fixed-address win02.test2.local; }
host win03 { hardware ethernet 00:00:00:00:00:00;  fixed-address win03.test2.local; }
host win04 { hardware ethernet 00:00:00:00:00:00;  fixed-address win04.test2.local; }

root@samba4:~# systemctl restart isc-dhcp-server.service

uib.GmbH OPSI-Repo für deb-Pakete einbinden

vim /etc/apt/sources.list.d/opsi.list
deb http://download.opensuse.org/repositories/home:/uibmz:/opsi:/opsi40/Debian_8.0 ./

Key importieren

wget -O - http://download.opensuse.org/repositories/home:/uibmz:/opsi:/opsi40/Debian_8.0/Release.key | apt-key add -

OPSI-Abhängigkeiten installieren

apt-get install -y wget lsof host python-mechanize p7zip-full cabextract openbsd-inetd samba samba-common smbclient cifs-utils samba-doc

Samba konfigurieren

vim /etc/samba/smb.conf
interfaces = 127.0.0.0/8 eth1 #=> oder dem System entsprechendes
bind interfaces only = yes

Optional die Workgroup umbenennen.

workgroup = OPSI

Testlauf

adduser opsi-user
smbpasswd -a opsi-user
vim /etc/samba/smb.con
[test]
 comment = test
 path = /local/all
 browseable = yes
 read only = no

Wir starten unseren Windows Testclienten und melden uns mit einem Domänenuser an.
Im Explorer geben wir \\opsi-1\test ein.
Die Frage nach dem Login beantworten wir mit:

opsi-1\opsi-user
<password> des opsi-users

Jetzt sollte der Inhalt des Verzeichnisses zu sehen sein.
Wir haben als Mitglied einer Domäne uns erfolgreich in das Share einer Workgroup eingeloggt, die nicht Teil der Domäne ist.

OPSI installieren

apt-get update
apt-get dist-upgrade
apt-get -y install opsi-atftpd

Bei der Installation von opsi-depotserver wird ein SSL-Zertifikat erstellt.
Dazu stellt der Installer die entsprechenden Fragen.

Folgende Fragen werden noch gestellt:

  • Soll der Installer die smb.conf bearbeiten?: yes
  • Soll der Installer die dhcpd.conf bearbeiten?: yes
  • Soll der Installer das File sudoers bearbeiten?: yes
apt-get -y install opsi-depotserver
apt-get -y install opsi-configed

Das bootimage hat Probleme die opsi_depot-Freigabe per mount.cifs zu mounten. (siehe opsi-getting-started-stable-de.pdf Seite 14)

systemctl disable winbind

Wir benutzen die OPSI default-config. Deshalb brauchen wir nichts ändern.

opsi-setup --init-current-config
opsi-setup --set-rights
systemctl restart opsiconfd.service 
systemctl restart opsipxeconfd.service

Damit es ganz sicher funktioniert. Eigentlich wurde die Datei schon vom Installer ergänzt.

opsi-setup --auto-configure-samba

Setzt ein für den User pcpatch ein OPSI-Password, ein Systempassword und ein Samba-Password.
"Die PCs melden sich zwecks Installation von Softwarepaketen als dieser User an und haben dann Zugriff auf die Installationsdateien auf den hierfür vorgesehenen Shares. (Quelle: opsi-getting-started-stable-de.pdf Seite 28)"
Das Passwort wird nur einmal abgefragt. Ein menschlicher User wird es niemals brauchen.

opsi-admin -d task setPcpatchPassword

Ein Adminuser für OPSI (Quelle: opsi-getting-started-stable-de.pdf Seite 30)

useradd -m -s /bin/bash adminuser
passwd adminuser
smbpasswd -a adminuser
usermod -aG opsiadmin adminuser
usermod -aG pcpatch adminuser

Der adminuser ist unser User, mit dem wir von dem Windows-Maschinen auf die OPSI-Shares zugreifen.

DHCP

OPSI stellt Bootimages bereit. Damit sie erreichbar sind, muss die dhcpd.config gändert werden.
Wurde schon mal wärend der Installation abgefragt, aber nicht gemacht.

opsi-setup --auto-configure-dhcpd

Es wird next-server und filename eingefügt. Aber auch sonst wird in der config rumgewütet.
Für die nc-opsi Scripte ist es unerlässlich, das die "host ....... "Einträge auf einer Linie stehen.


Einspielen der minimalen opsi-Produkte

(Quelle: opsi-getting-started-stable-de.pdf Seite 33)

opsi-product-updater -i -vv

Jetzt werden OPSI-Packete vom Server der uib.GmbH herunter geladen. Das kann einige Zeit dauern.

Erster Test

  • Starten des Windows-Clienten, einloggen als Domain-User mit Admin-Rechten.
  • Explorer aufrufen und \\opsi-1\ eingeben.
  • Das Share opsi_depot öffnen.
  • Den Anmeldedialog beantworten:
    • Benutzername: opsi-1\adminuser
    • Kennwort: <Passwort> adminuser
  • Im Share in das Verzeichniss opsi-client-agent wechseln
  • service_setup.cmd aufrufen
    • Sollte das scheitern, auf dem OPSI-Server folgende Befehle ausführen.

root@opsi-1:~#cd /var/lib/opsi/depot/opsi-client-agent root@opsi-1:/var/lib/opsi/depot/opsi-client-agent# chmod 750 service_setup.cmd

  • service_setup.cmd im Share aufrufen
  • Passwortabfrage durch service_setup.cmd
    • Benutzer: adminuser
    • Kennwort: <Passwort> adminuser

Danach wird der opsi-client-agent installiert.

Z.B. das Paket

http://download.uib.de/opsi4.0/products/contribute/full-package/7zip_9.22-1.opsi

für Tests herunter laden und per

opsi-package-manager -i  7zip_9.22-1.opsi

in OPSI installieren.
Das Paket für den Windows-Clienten zur Installation vorsehen und Windows-Clienten neu starten.
Das OPSI-Paket wird installiert.
Es gibt ein paar Scripte für die Commandozeile.

wget https://opsi.netz.coop/scripte/opsi-scripte-1.0.tar --no-check-certificate

Sie sind nicht selbsterklärend. Soll sich ändern.

opsi-getting-started-stable-de.pdf

Was haben wir?

Eine Windows-Domain mit all den Möglichkeiten, die Samba4 bereithält, sogar im Stil des Microsoft Servers 2008 R2, mit OPSI als Softwareverwaltung.
Das ist groß!