Debian-OPSI-samba4: Unterschied zwischen den Versionen
HK (Diskussion | Beiträge) (→Container erstellen) |
HK (Diskussion | Beiträge) (→Roaming Profile) |
||
(167 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | Zurück zu [[OPSI]]<br> | ||
=Herausforderung= | =Herausforderung= | ||
OPSI und Samba4 als AD/DC verstehen sich nicht wirklich gut.<br> | OPSI und Samba4 als AD/DC verstehen sich nicht wirklich gut.<br> | ||
+ | OPSI benötigt den User pcpatch, der sich per SSH und keyfile als Systemuser auf dem OPSI-Server anmelden können muss.<br> | ||
+ | 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. | ||
+ | <br> | ||
+ | |||
Der Ansatz dieses Postings ist es, beide relativ unabhängig von ein ander im Netzwerk arbeiten zu lassen.<br> | Der Ansatz dieses Postings ist es, beide relativ unabhängig von ein ander im Netzwerk arbeiten zu lassen.<br> | ||
− | Der OPSI-Server soll kein Teil der Domäne werden. Der OPSI-Agent auf den Clienten soll sich | + | 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.<br> |
− | Beim Anmelden | + | Beim Anmelden eines Users am Windows-Clienten geschieht Authentifizierung über den Samba4 AD DC.<br> |
− | + | <p> | |
+ | Arbeitsteilung:<br> | ||
+ | * Container Samba4 wird DNS zu Verfügung stellen. | ||
+ | * Container OPSI-1 wird DHCP zu Verfügung stellen. | ||
+ | <br> | ||
Soweit die Theorie. Dieses Posting soll klären, ob die Idee etwas wert ist. | Soweit die Theorie. Dieses Posting soll klären, ob die Idee etwas wert ist. | ||
+ | <br> | ||
+ | Kurz und bündig: Ja. Die Tests waren erfolgreich. | ||
= Ziel= | = Ziel= | ||
− | * LXC-Host auf Debian Jessie Basis. | + | * LXC-Host auf Debian Jessie Basis. Das HowTo ist an Stretch angepasst worden (08/2018) |
* Zwei Container | * Zwei Container | ||
− | ** OPSI - Nicht Teil der Domäne. Es soll Software installieren, bevor die Domäne in Kraft tritt. | + | ** OPSI - Nicht Teil der Domäne. Es soll Software installieren, bevor die Domäne in Kraft tritt. Container ist auch gleichtzeitig der Router für die Windows-Clienten und die anderen Container. |
** Samba4 - AD/DC | ** Samba4 - AD/DC | ||
+ | ** Fileserver für die Domain = TODO | ||
= Installation LXC-Host = | = Installation LXC-Host = | ||
Zeile 73: | Zeile 85: | ||
# bash-completion | # bash-completion | ||
. /etc/bash_completion | . /etc/bash_completion | ||
+ | |||
+ | PATH=$PATH:~/bin | ||
+ | |||
+ | Damit PATH wirksam werden kann: | ||
+ | mkdir ~/bin | ||
+ | Dort leben alle custom-scripts. | ||
=== Hostname === | === Hostname === | ||
Zeile 150: | Zeile 168: | ||
net.ipv4.ip_forward=1 | net.ipv4.ip_forward=1 | ||
− | == Container erstellen == | + | === MASQUERADE der Firewall einschalten === |
− | lxc-create --name | + | |
+ | 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. <br> | ||
+ | Der geclonte Container ist sofort startbereit. <br> | ||
+ | * 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.<br> | ||
+ | autostart muss händisch abgeschaltet werden. Kommt noch.......<br> | ||
+ | [https://code.netz.coop/OPSI/LXC 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. | Als erstes wird die erzeugte Conf bearbeitet. | ||
− | vim /var/lib/lxc/ | + | vim /var/lib/lxc/samba4.test2.local/config |
Entfernen | Entfernen | ||
Zeile 162: | Zeile 225: | ||
# Autostart des Containers ( 0 steht für kein Autostart) | # Autostart des Containers ( 0 steht für kein Autostart) | ||
lxc.start.auto = 1 | 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 | # Netzwerk | ||
# Erzeugt tun-device, dass in die Bridge lxcbr0 eingefügt wird (Internet) | # Erzeugt tun-device, dass in die Bridge lxcbr0 eingefügt wird (Internet) | ||
lxc.network.type=veth | lxc.network.type=veth | ||
− | lxc.network.link=lxc-in | + | # Bridge, in der das Interface eingefügt wird |
+ | lxc.network.link=lxc-in | ||
lxc.network.hwaddr = 00:FF:AA:00:21:01 | lxc.network.hwaddr = 00:FF:AA:00:21:01 | ||
− | lxc.network.ipv4 = 10.0.0. | + | lxc.network.ipv4 = 10.0.0.5/24 |
− | lxc.network.ipv4.gateway = 10.0.0.1 | + | # Gateway des Containers |
+ | lxc.network.ipv4.gateway = 10.0.0.1 | ||
lxc.network.flags=up | lxc.network.flags=up | ||
− | lxc.network.veth.pair= | + | # 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) | # Erzeugt tun-device, dass in die Bridge lxc-out eingefügt wird (Intranet) | ||
lxc.network.type=veth | lxc.network.type=veth | ||
− | lxc.network.link=lxc-out | + | # Bridge, in der das Interface eingefügt wird |
+ | lxc.network.link=lxc-out | ||
lxc.network.hwaddr = 00:FF:AA:00:21:11 | lxc.network.hwaddr = 00:FF:AA:00:21:11 | ||
− | lxc.network.ipv4 = 10.8.190. | + | lxc.network.ipv4 = 10.8.190.5/24 |
lxc.network.flags=up | lxc.network.flags=up | ||
− | lxc.network.veth.pair= | + | # Name des TUN-Devices auf dem Host |
+ | lxc.network.veth.pair=samba4-out | ||
# OpenVPN | # OpenVPN | ||
# Damit OpenVPN im Container genutzt werden kann. | # Damit OpenVPN im Container genutzt werden kann. | ||
lxc.cgroup.devices.allow = c 10:200 rwm | 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 update | ||
+ | apt -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 install samba krb5-config smbclient winbind | ||
+ | |||
+ | |||
+ | *[http://www.server-world.info/en/note?os=Debian_8&p=samba&f=4 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 --use-rfc2307 --interactive | ||
+ | |||
+ | |||
+ | * # restart system | ||
+ | root@samba4:~# reboot | ||
+ | |||
+ | Unsere Domäne test2.local steht mit den Fähigkeiten eines Windows Server 2008 R2 bereit.<br> | ||
+ | Testweise binden wir einen Windows-Clienten in die Domäne ein.<br> | ||
+ | Für den Beitritt benötigen wir einen berechtigten User und sein Passwort.<br> | ||
+ | |||
+ | Beim domain provision haben wir ein Passowrt vergeben. <br> | ||
+ | Der dazugehörige User heißt administrator. | ||
+ | |||
+ | Ab jetzt können wir uns mit Usern der Domäne am Clienten anmelden.<br> | ||
+ | Bitte beachten: noch haben wir keine Roaming Profiles.<br> | ||
+ | <br> | ||
+ | Ab jetzt steht auch ein DNS-Server zur Verfügung. Der OPSI-Server wird ihn auch nutzen. | ||
+ | |||
+ | |||
+ | *[https://wiki.samba.org/index.php/Setup_a_Samba_Active_Directory_Domain_Controller Setup_a_Samba_Active_Directory_Domain_Controller] | ||
+ | |||
+ | === systemctl === | ||
+ | systemctl unmask samba-ad-dc | ||
+ | systemctl enable samba-ad-dc | ||
+ | systemctl start samba-ad-dc | ||
+ | |||
+ | === Fehler Roaming Profile === | ||
+ | * Es traten Fehler mit der Profilsyncronisierung auf. | ||
+ | * Neue Dateien wurde nicht mehr im Profil abgespeichert | ||
+ | |||
+ | journalctl -xn 100|grep -i oplock | ||
+ | * Oplock break failed for file schueler.V2/ntuser.ini | ||
+ | |||
+ | * Workaround | ||
+ | vim /etc/samba/smb.conf | ||
+ | |||
+ | veto oplock files = /NTUSER.DAT/ | ||
+ | |||
+ | === DNS-Records erzeugen === | ||
+ | |||
+ | ==== Forward-Lookup-Zone ==== | ||
+ | * Der Name des OPSI-Servers muss im Netzwerk auflösbar sein. | ||
+ | |||
+ | samba-tool dns add localhost test2.local opsi A 10.8.190.1 -U administrator --password=XXXXXXXXXX | ||
+ | |||
+ | * Auch die Clients müssen auflösbar sein. | ||
+ | Dazu benutzen wir zwei sequence. Die erste von 41-99, die zweite von 100-240.<br> | ||
+ | Der Grund ist, dass samba-tool keine IP mit z.B. 030 im letzten Block annimmt. | ||
+ | |||
+ | for i in {41..99};do samba-tool dns add localhost test2.local win0$i A 10.8.190.$i -U administrator --password=XXXXXXXXXXXXX ;done | ||
+ | for i in {100..240};do samba-tool dns add localhost test2.local win0$i A 10.8.190.$i -U administrator --password=XXXXXXXXXXXXX ;done | ||
+ | |||
+ | |||
+ | ==== Reverse-Lookup-Zone ==== | ||
+ | Zone erzeugen. | ||
+ | samba-tool dns zonecreate localhost 190.8.10.in-addr.arpa. -U administrator --password=XXXXXXXXXXXX | ||
+ | |||
+ | Daten eintragen. | ||
+ | samba-tool dns add localhost 190.8.10.in-addr.arpa. 1 PTR opsi.test2.local -U administrator --password=XXXXXXXXX | ||
+ | samba-tool dns add localhost 190.8.10.in-addr.arpa. 1 PTR samba4.test2.local -U administrator --password=XXXXXXXXX | ||
+ | |||
+ | |||
+ | |||
+ | * PTR-Records für die Clients, mit sequence wie oben | ||
+ | |||
+ | for i in {41..99};do samba-tool dns add localhost 190.8.10.in-addr.arpa $i PTR win0$i -U administrator --password=schu22=?alt;done | ||
+ | |||
+ | for i in {100..240};do samba-tool dns add localhost 190.8.10.in-addr.arpa $i PTR win$i -U administrator --password=schu22=?alt;done | ||
+ | |||
+ | === openvpn === | ||
+ | * Dazu muss das '''tun''' Device erzeugt werden | ||
+ | |||
+ | vim /etc/rc.local | ||
+ | |||
+ | mkdir /dev/net | ||
+ | mknod /dev/net/tun c 10 200 | ||
+ | chmod 0666 /dev/net/tun | ||
+ | |||
+ | == Container fs.test2.local erstellen == | ||
+ | === Externe Links === | ||
+ | |||
+ | [https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Domain_Member Setting_up_Samba_as_a_Domain_Member] | ||
+ | |||
+ | === Container fs.test2.local erzeugen === | ||
+ | lxc-create -t debian -n fs.test2.local -- -r stretch | ||
+ | |||
+ | === Zeitzone festlegen === | ||
+ | |||
+ | dpkg-reconfigure tzdata | ||
+ | |||
+ | === Software installieren === | ||
+ | |||
+ | apt install vim acl less samba inetutils-ping winbind libnss-winbind | ||
+ | |||
+ | |||
+ | === Vorbereitung der Installation === | ||
+ | |||
+ | * Alle Prozesse, die mit dem folgenden Befehl gefunden werden können, müssen beendet werden. | ||
+ | ps ax | egrep "samba|smbd|nmbd|winbindd" | ||
+ | |||
+ | * Der Befehlt stoppt die Prozesse. | ||
+ | systemctl stop samba smbd nmbd winbind | ||
+ | |||
+ | Samba-Configfile löschen für einen sauberen Start. | ||
+ | rm /etc/samba/smb.conf | ||
+ | |||
+ | Sämtliche Datenbanken, die auf .tdb und .ldb enden, löschen.<br> | ||
+ | Mit dem folgenden Befehl lassen sich die Orte finden, an denen sie liegen. | ||
+ | smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" | ||
+ | LOCKDIR: /var/run/samba | ||
+ | STATEDIR: /var/lib/samba | ||
+ | CACHEDIR: /var/cache/samba | ||
+ | PRIVATE_DIR: /var/lib/samba/private | ||
+ | |||
+ | * In Debian Stretch liegen sie an den oben gezeigten Orten. | ||
+ | * Der folgende Befehl löscht die Datenbanken auf einen Schlag. | ||
+ | |||
+ | rm /var/run/samba/*.tdb /var/run/samba/*.ldb /var/lib/samba/*.tdb /var/lib/samba/*.ldb /var/cache/samba/*.tdb /var/cache/samba/*.ldb /var/lib/samba/private/*.tdb /var/lib/samba/private/*.ldb | ||
+ | |||
+ | === Beitritt der Maschine in die Domain vorbereiten === | ||
+ | ==== DNS konfigurieren ==== | ||
+ | * Die Namensauflösung muss funktionieren. | ||
+ | * Ausführen im Container "samba4" | ||
+ | samba-tool dns add localhost test2.local fs.test2.local A 10.8.190.4 -U administrator --password=XXXXXX | ||
+ | |||
+ | samba-tool dns add localhost 190.8.10.in-addr.arpa 4 PTR fs.test2.local -U administrator --password=XXXXXXX | ||
+ | |||
+ | * Damit das Programm "net" arbeiten kann, muss es den Namen des Host auflösen können. | ||
+ | |||
+ | * Mit dem folgenden Befehl kann das geprüft werden. | ||
+ | # getent hosts fs | ||
+ | * Das gewünschte Ergebniss sollte so aussehen. | ||
+ | 10.8.190.4 fs.test2.local fs | ||
+ | |||
+ | * Die Datei "/etc/hosts" sollte bis auf die Werte aussehen wie folgt. Der DNS-Server löst den Namen auch auf. So geht es schneller. | ||
+ | |||
+ | vim /etc/hosts | ||
+ | |||
+ | 127.0.0.1 localhost | ||
+ | 10.8.190.4 fs.test2.local fs | ||
+ | |||
+ | ==== Kerberos konfigurieren ==== | ||
+ | * Samba unterstützt Heimdal und MIT Kerberos back ends. Um Kerberos auf dem zukünftigen Domainmitglied einzurichten, trage die folgenden Werte in /etc/krb5.conf ein: | ||
+ | |||
+ | vim /etc/krb5.conf | ||
+ | |||
+ | [libdefaults] | ||
+ | default_realm = TEST2.LOCAL | ||
+ | dns_lookup_realm = false | ||
+ | dns_lookup_kdc = true | ||
+ | |||
+ | === Samba konfigurieren === | ||
+ | * Bitte beachten: zum Verständnis unbedingt die folgenden Seiten lesen! | ||
+ | * [https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Domain_Member Setting up Samba as a Domain Member] | ||
+ | * [https://wiki.samba.org/index.php/Idmap_config_rid Idmap config rid | ||
+ | ] | ||
+ | * Als Backend wurde "rid" gewählt. | ||
+ | * Wichtiger Vorteil: | ||
+ | ** Alle Domain User user accounts und groups sind automatisch auf allen Domain Mitgliedern vorhanden. | ||
+ | * Nachteil/Bitte beachten: | ||
+ | ** Alle Domain Mitglieder müssen die selbe Config nutzen, um den oben genannten Vorteil zu haben. | ||
+ | |||
+ | # vim /etc/samba/smb.conf | ||
+ | |||
+ | [global] | ||
+ | security = ADS | ||
+ | workgroup = TEST2 | ||
+ | realm = TEST2.LOCAL | ||
+ | |||
+ | log file = /var/log/samba/%m.log | ||
+ | log level = 1 | ||
+ | |||
+ | # Default ID mapping configuration for local BUILTIN accounts | ||
+ | # and groups on a domain member. The default (*) domain: | ||
+ | # - must not overlap with any domain ID mapping configuration! | ||
+ | # - must use a read-write-enabled back end, such as tdb. | ||
+ | # - Adding just this is not enough | ||
+ | # - You must set a DOMAIN backend configuration, see below | ||
+ | idmap config * : backend = tdb | ||
+ | idmap config * : range = 3000-7999 | ||
+ | |||
+ | # Backend: rid | ||
+ | # Template settings for login shell and home directory | ||
+ | winbind nss info = template | ||
+ | template shell = /bin/bash | ||
+ | template homedir = /home/%U | ||
+ | |||
+ | # idmap config for the TEST2 domain | ||
+ | idmap config TEST2 : backend = rid | ||
+ | idmap config TEST2 : range = 10000-999999 | ||
+ | |||
+ | === NSS konfigurieren === | ||
+ | * Damit sich Domainuser am System anmelden und/oder deren ID auch auf das Linux-System gemappt werden. | ||
+ | # vim /etc/nsswitch.conf | ||
+ | |||
+ | * Die folgenden Zeilen in der Datei müssen dafür bearbeitet werden. | ||
+ | |||
+ | passwd: files winbind | ||
+ | group: files winbind | ||
+ | |||
+ | |||
+ | === smbd und nmbd starten === | ||
+ | # systemctl start smbd nmbd | ||
+ | |||
+ | === Der Domäne beitreten === | ||
+ | |||
+ | # net ads join -U administrator | ||
+ | |||
+ | Enter administrator's password: | ||
+ | Using short domain name -- TEST2 | ||
+ | Joined 'TEST2' to dns domain 'test2.local' | ||
+ | DNS Update for fs.test2.local failed: ERROR_DNS_UPDATE_FAILED | ||
+ | DNS update failed: NT_STATUS_UNSUCCESSFUL | ||
+ | |||
+ | * Der Fehler resultiert daraus, das der DNS-Eintrag schon vorhanden ist und kann ignoriert werden. | ||
+ | |||
+ | === winbind === | ||
+ | systemctl restart winbind | ||
+ | === Shares === | ||
+ | * Shares können auch per Samba-Registry eingerichtet werden. Die Performance ist besser. | ||
+ | * Shares in der /etc/samba/smb.conf zu definieren führt zu einer besseren Lesbarkeit. | ||
+ | Ein "browseable = no" kann einen kleinen Schutz gegen Vandalismus bieten. Das ist allerdings "security by obscurity". | ||
+ | |||
+ | === Roaming Profile === | ||
+ | |||
+ | # mkdir -p /local/samba/profiles/ | ||
+ | |||
+ | # vim /etc/samba/smb.conf | ||
+ | |||
+ | [Profiles] | ||
+ | path = /local/samba/profiles/ | ||
+ | read only = no | ||
+ | |||
+ | ==== Fehler Roaming Profile ==== | ||
+ | * Es traten Fehler mit der Profilsyncronisierung auf. | ||
+ | * Neue Dateien wurde nicht mehr im Profil abgespeichert | ||
+ | |||
+ | # journalctl -xn 100|grep -i oplock | ||
+ | * Oplock break failed for file schueler.V2/ntuser.ini | ||
+ | |||
+ | * Workaround | ||
+ | # vim /etc/samba/smb.conf | ||
+ | |||
+ | veto oplock files = /NTUSER.DAT/ | ||
+ | === Folder Redirects === | ||
+ | |||
+ | # mkdir -p /local/samba/ | ||
+ | |||
+ | # vim /etc/samba/smb.conf | ||
+ | |||
+ | [Redirects] | ||
+ | path = /local/samba/redirects/ | ||
+ | read only = no | ||
+ | |||
+ | == 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 update | ||
+ | apt -y install bash-completion vim less iputils-* dnsutils wget cpio gnupg2 | ||
+ | |||
+ | [[#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 install iptables-persistent | ||
+ | |||
+ | Änderungen an der Firewall speichern mit | ||
+ | iptables-save > /etc/iptables/rules.v4 | ||
+ | |||
+ | === DHCP Server installieren und einrichten === | ||
+ | apt -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.<br> | ||
+ | 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.<br> | ||
+ | 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 | ||
+ | |||
+ | === vimd === | ||
+ | * vimd ist ein alias in der bashrc | ||
+ | vim ~/.bashrc | ||
+ | |||
+ | alias vimd='vim /etc/dhcp/dhcpd.conf' | ||
+ | |||
+ | === 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 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.<br> | ||
+ | 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.<br> | ||
+ | Im Explorer geben wir \\opsi-1\test ein.<br> | ||
+ | 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.<br> | ||
+ | Wir haben als Mitglied einer Domäne uns erfolgreich in das Share einer Workgroup eingeloggt, die nicht Teil der Domäne ist.<br> | ||
+ | |||
+ | === OPSI installieren === | ||
+ | |||
+ | apt update | ||
+ | apt dist-upgrade | ||
+ | apt -y install opsi-atftpd | ||
+ | Bei der Installation von opsi-depotserver wird ein SSL-Zertifikat erstellt.<br> | ||
+ | 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 -y install opsi-depotserver | ||
+ | apt -y install opsi-configed | ||
+ | |||
+ | Das bootimage hat Probleme die opsi_depot-Freigabe per mount.cifs zu mounten. (siehe [http://download.uib.de/opsi_stable/doc/opsi-getting-started-stable-de.pdf#19 opsi-getting-started-stable-de.pdf Seite 14]) | ||
+ | systemctl disable winbind | ||
+ | |||
+ | Wir benutzen die OPSI default-config. Deshalb brauchen wir nichts ändern.<br> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | Alles neu starten | ||
+ | systemctl restart smbd nmbd | ||
+ | |||
+ | Setzt ein für den User pcpatch ein OPSI-Password, ein Systempassword und ein Samba-Password.<br> | ||
+ | "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: [http://download.uib.de/opsi_stable/doc/opsi-getting-started-stable-de.pdf#33 opsi-getting-started-stable-de.pdf Seite 28-29])" <br> | ||
+ | Das Passwort wird nur einmal abgefragt. Ein menschlicher User wird es niemals brauchen. | ||
+ | opsi-admin -d task setPcpatchPassword | ||
+ | |||
+ | Ein Adminuser für OPSI (Quelle: [http://download.uib.de/opsi_stable/doc/opsi-getting-started-stable-de.pdf#35 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, per opsi-client-agent neue PCs händisch in OPSI aufnehmen. | ||
+ | |||
+ | === DHCP === | ||
+ | OPSI stellt Bootimages bereit. Damit sie erreichbar sind, muss die dhcpd.config gändert werden.<br> | ||
+ | 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.<br> | ||
+ | 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: [http://download.uib.de/opsi_stable/doc/opsi-getting-started-stable-de.pdf#38 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. | ||
+ | |||
+ | === TEST: Einbinden des Windows-Clienten in OPSI === | ||
+ | * Starten des Windows-Clienten, einloggen als Domain-User mit Admin-Rechten.<br> | ||
+ | * 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.<br> | ||
+ | |||
+ | === TEST: Softwareinstallation mit OPSI === | ||
+ | |||
+ | 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. | ||
+ | <br> | ||
+ | Das Paket für den Windows-Clienten zur Installation vorsehen und Windows-Clienten neu starten. | ||
+ | <br> | ||
+ | Das OPSI-Paket wird installiert. | ||
+ | === Scripte === | ||
+ | Es gibt ein paar Scripte für die Commandozeile.<br> | ||
+ | Sie sind sehr grobschlächtig, machen aber ihren Job. | ||
+ | wget https://opsi.netz.coop/scripte/opsi-scripte-1.0.tar --no-check-certificate | ||
+ | |||
+ | Bedienung: | ||
+ | Im Script die gewünschten Pakete getrennt mit Leerzeichen eintragen. | ||
+ | Beispiel. | ||
+ | pkgs="7zip autologon" | ||
+ | |||
+ | add_software <hostname> | ||
+ | setup_host <hostname> | ||
+ | |||
+ | Diese Scripte benötigen keine weitere Konfiguration. | ||
+ | reboot_host <hostname> | ||
+ | shutdown_host <hostname> | ||
+ | |||
+ | readd_host <ignorieren, ist Müll> | ||
+ | |||
+ | [http://download.uib.de/opsi_stable/doc/opsi-getting-started-stable-de.pdf 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.<br> | ||
+ | Das ist groß!<br> | ||
+ | |||
+ | <hr> |
Aktuelle Version vom 29. Juli 2018, 08:22 Uhr
Zurück zu OPSI
Inhaltsverzeichnis
- 1 Herausforderung
- 2 Ziel
- 3 Installation LXC-Host
- 3.1 Server mit GRML starten
- 3.2 System starten
- 3.2.1 Keyboard layout einstellen
- 3.2.2 Sprache einstellen
- 3.2.3 Bash-completion
- 3.2.4 Farbiges Promt
- 3.2.5 Hostname
- 3.2.6 /etc/network/interfaces
- 3.2.7 LXC installieren
- 3.2.8 LVM für LXC einbinden
- 3.2.9 Netzwerk für LXC vorbereiten
- 3.2.10 Packet Forwarding einschalten
- 3.2.11 MASQUERADE der Firewall einschalten
- 3.3 Container backup
- 3.4 Container samba4.test2.local erstellen
- 3.5 Container fs.test2.local erstellen
- 3.5.1 Externe Links
- 3.5.2 Container fs.test2.local erzeugen
- 3.5.3 Zeitzone festlegen
- 3.5.4 Software installieren
- 3.5.5 Vorbereitung der Installation
- 3.5.6 Beitritt der Maschine in die Domain vorbereiten
- 3.5.7 Samba konfigurieren
- 3.5.8 NSS konfigurieren
- 3.5.9 smbd und nmbd starten
- 3.5.10 Der Domäne beitreten
- 3.5.11 winbind
- 3.5.12 Shares
- 3.5.13 Roaming Profile
- 3.5.14 Folder Redirects
- 3.6 Container opsi-1.test2.local erstellen
- 3.6.1 Container opsi-1.test2.local erzeugen
- 3.6.2 Auf dem Host Container opsi-1.test2.local einrichten
- 3.6.3 Im Container opsi-1.test2.local einrichten
- 3.6.4 Packet Forwarding einschalten
- 3.6.5 MASQUERADE der Firewall einschalten
- 3.6.6 DHCP Server installieren und einrichten
- 3.6.7 /etc/default/isc-dhcp-server
- 3.6.8 /etc/dhcp/dhcpd.conf
- 3.6.9 vimd
- 3.6.10 uib.GmbH OPSI-Repo für deb-Pakete einbinden
- 3.6.11 OPSI-Abhängigkeiten installieren
- 3.6.12 Samba konfigurieren
- 3.6.13 OPSI installieren
- 3.6.14 DHCP
- 3.6.15 Einspielen der minimalen opsi-Produkte
- 3.6.16 TEST: Einbinden des Windows-Clienten in OPSI
- 3.6.17 TEST: Softwareinstallation mit OPSI
- 3.6.18 Scripte
- 4 Was haben wir?
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. Das HowTo ist an Stretch angepasst worden (08/2018)
- Zwei Container
- OPSI - Nicht Teil der Domäne. Es soll Software installieren, bevor die Domäne in Kraft tritt. Container ist auch gleichtzeitig der Router für die Windows-Clienten und die anderen Container.
- Samba4 - AD/DC
- Fileserver für die Domain = TODO
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 update apt -y install bash-completion vim less iputils-* dnsutils
- 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 install samba krb5-config smbclient winbind
- 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 --use-rfc2307 --interactive
- # 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.
systemctl
systemctl unmask samba-ad-dc systemctl enable samba-ad-dc systemctl start samba-ad-dc
Fehler Roaming Profile
- Es traten Fehler mit der Profilsyncronisierung auf.
- Neue Dateien wurde nicht mehr im Profil abgespeichert
journalctl -xn 100|grep -i oplock
- Oplock break failed for file schueler.V2/ntuser.ini
- Workaround
vim /etc/samba/smb.conf
veto oplock files = /NTUSER.DAT/
DNS-Records erzeugen
Forward-Lookup-Zone
- Der Name des OPSI-Servers muss im Netzwerk auflösbar sein.
samba-tool dns add localhost test2.local opsi A 10.8.190.1 -U administrator --password=XXXXXXXXXX
- Auch die Clients müssen auflösbar sein.
Dazu benutzen wir zwei sequence. Die erste von 41-99, die zweite von 100-240.
Der Grund ist, dass samba-tool keine IP mit z.B. 030 im letzten Block annimmt.
for i in {41..99};do samba-tool dns add localhost test2.local win0$i A 10.8.190.$i -U administrator --password=XXXXXXXXXXXXX ;done for i in {100..240};do samba-tool dns add localhost test2.local win0$i A 10.8.190.$i -U administrator --password=XXXXXXXXXXXXX ;done
Reverse-Lookup-Zone
Zone erzeugen.
samba-tool dns zonecreate localhost 190.8.10.in-addr.arpa. -U administrator --password=XXXXXXXXXXXX
Daten eintragen.
samba-tool dns add localhost 190.8.10.in-addr.arpa. 1 PTR opsi.test2.local -U administrator --password=XXXXXXXXX samba-tool dns add localhost 190.8.10.in-addr.arpa. 1 PTR samba4.test2.local -U administrator --password=XXXXXXXXX
- PTR-Records für die Clients, mit sequence wie oben
for i in {41..99};do samba-tool dns add localhost 190.8.10.in-addr.arpa $i PTR win0$i -U administrator --password=schu22=?alt;done
for i in {100..240};do samba-tool dns add localhost 190.8.10.in-addr.arpa $i PTR win$i -U administrator --password=schu22=?alt;done
openvpn
- Dazu muss das tun Device erzeugt werden
vim /etc/rc.local
mkdir /dev/net mknod /dev/net/tun c 10 200 chmod 0666 /dev/net/tun
Container fs.test2.local erstellen
Externe Links
Setting_up_Samba_as_a_Domain_Member
Container fs.test2.local erzeugen
lxc-create -t debian -n fs.test2.local -- -r stretch
Zeitzone festlegen
dpkg-reconfigure tzdata
Software installieren
apt install vim acl less samba inetutils-ping winbind libnss-winbind
Vorbereitung der Installation
- Alle Prozesse, die mit dem folgenden Befehl gefunden werden können, müssen beendet werden.
ps ax | egrep "samba|smbd|nmbd|winbindd"
- Der Befehlt stoppt die Prozesse.
systemctl stop samba smbd nmbd winbind
Samba-Configfile löschen für einen sauberen Start.
rm /etc/samba/smb.conf
Sämtliche Datenbanken, die auf .tdb und .ldb enden, löschen.
Mit dem folgenden Befehl lassen sich die Orte finden, an denen sie liegen.
smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" LOCKDIR: /var/run/samba STATEDIR: /var/lib/samba CACHEDIR: /var/cache/samba PRIVATE_DIR: /var/lib/samba/private
- In Debian Stretch liegen sie an den oben gezeigten Orten.
- Der folgende Befehl löscht die Datenbanken auf einen Schlag.
rm /var/run/samba/*.tdb /var/run/samba/*.ldb /var/lib/samba/*.tdb /var/lib/samba/*.ldb /var/cache/samba/*.tdb /var/cache/samba/*.ldb /var/lib/samba/private/*.tdb /var/lib/samba/private/*.ldb
Beitritt der Maschine in die Domain vorbereiten
DNS konfigurieren
- Die Namensauflösung muss funktionieren.
- Ausführen im Container "samba4"
samba-tool dns add localhost test2.local fs.test2.local A 10.8.190.4 -U administrator --password=XXXXXX
samba-tool dns add localhost 190.8.10.in-addr.arpa 4 PTR fs.test2.local -U administrator --password=XXXXXXX
- Damit das Programm "net" arbeiten kann, muss es den Namen des Host auflösen können.
- Mit dem folgenden Befehl kann das geprüft werden.
# getent hosts fs
- Das gewünschte Ergebniss sollte so aussehen.
10.8.190.4 fs.test2.local fs
- Die Datei "/etc/hosts" sollte bis auf die Werte aussehen wie folgt. Der DNS-Server löst den Namen auch auf. So geht es schneller.
vim /etc/hosts
127.0.0.1 localhost 10.8.190.4 fs.test2.local fs
Kerberos konfigurieren
- Samba unterstützt Heimdal und MIT Kerberos back ends. Um Kerberos auf dem zukünftigen Domainmitglied einzurichten, trage die folgenden Werte in /etc/krb5.conf ein:
vim /etc/krb5.conf
[libdefaults] default_realm = TEST2.LOCAL dns_lookup_realm = false dns_lookup_kdc = true
Samba konfigurieren
- Bitte beachten: zum Verständnis unbedingt die folgenden Seiten lesen!
- Setting up Samba as a Domain Member
- [https://wiki.samba.org/index.php/Idmap_config_rid Idmap config rid
]
- Als Backend wurde "rid" gewählt.
- Wichtiger Vorteil:
- Alle Domain User user accounts und groups sind automatisch auf allen Domain Mitgliedern vorhanden.
- Nachteil/Bitte beachten:
- Alle Domain Mitglieder müssen die selbe Config nutzen, um den oben genannten Vorteil zu haben.
# vim /etc/samba/smb.conf
[global] security = ADS workgroup = TEST2 realm = TEST2.LOCAL log file = /var/log/samba/%m.log log level = 1 # Default ID mapping configuration for local BUILTIN accounts # and groups on a domain member. The default (*) domain: # - must not overlap with any domain ID mapping configuration! # - must use a read-write-enabled back end, such as tdb. # - Adding just this is not enough # - You must set a DOMAIN backend configuration, see below idmap config * : backend = tdb idmap config * : range = 3000-7999 # Backend: rid # Template settings for login shell and home directory winbind nss info = template template shell = /bin/bash template homedir = /home/%U # idmap config for the TEST2 domain idmap config TEST2 : backend = rid idmap config TEST2 : range = 10000-999999
NSS konfigurieren
- Damit sich Domainuser am System anmelden und/oder deren ID auch auf das Linux-System gemappt werden.
# vim /etc/nsswitch.conf
- Die folgenden Zeilen in der Datei müssen dafür bearbeitet werden.
passwd: files winbind group: files winbind
smbd und nmbd starten
# systemctl start smbd nmbd
Der Domäne beitreten
# net ads join -U administrator
Enter administrator's password: Using short domain name -- TEST2 Joined 'TEST2' to dns domain 'test2.local' DNS Update for fs.test2.local failed: ERROR_DNS_UPDATE_FAILED DNS update failed: NT_STATUS_UNSUCCESSFUL
- Der Fehler resultiert daraus, das der DNS-Eintrag schon vorhanden ist und kann ignoriert werden.
winbind
systemctl restart winbind
- Shares können auch per Samba-Registry eingerichtet werden. Die Performance ist besser.
- Shares in der /etc/samba/smb.conf zu definieren führt zu einer besseren Lesbarkeit.
Ein "browseable = no" kann einen kleinen Schutz gegen Vandalismus bieten. Das ist allerdings "security by obscurity".
Roaming Profile
# mkdir -p /local/samba/profiles/
# vim /etc/samba/smb.conf
[Profiles] path = /local/samba/profiles/ read only = no
Fehler Roaming Profile
- Es traten Fehler mit der Profilsyncronisierung auf.
- Neue Dateien wurde nicht mehr im Profil abgespeichert
# journalctl -xn 100|grep -i oplock
- Oplock break failed for file schueler.V2/ntuser.ini
- Workaround
# vim /etc/samba/smb.conf
veto oplock files = /NTUSER.DAT/
Folder Redirects
# mkdir -p /local/samba/
# vim /etc/samba/smb.conf
[Redirects] path = /local/samba/redirects/ read only = no
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 update apt -y install bash-completion vim less iputils-* dnsutils wget cpio gnupg2
- 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 install iptables-persistent
Änderungen an der Firewall speichern mit
iptables-save > /etc/iptables/rules.v4
DHCP Server installieren und einrichten
apt -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
vimd
- vimd ist ein alias in der bashrc
vim ~/.bashrc
alias vimd='vim /etc/dhcp/dhcpd.conf'
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 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 update apt dist-upgrade apt -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 -y install opsi-depotserver apt -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
Alles neu starten
systemctl restart smbd nmbd
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-29)"
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, per opsi-client-agent neue PCs händisch in OPSI aufnehmen.
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.
TEST: Einbinden des Windows-Clienten in OPSI
- 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.
TEST: Softwareinstallation mit OPSI
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.
Scripte
Es gibt ein paar Scripte für die Commandozeile.
Sie sind sehr grobschlächtig, machen aber ihren Job.
wget https://opsi.netz.coop/scripte/opsi-scripte-1.0.tar --no-check-certificate
Bedienung: Im Script die gewünschten Pakete getrennt mit Leerzeichen eintragen. Beispiel.
pkgs="7zip autologon"
add_software <hostname> setup_host <hostname>
Diese Scripte benötigen keine weitere Konfiguration.
reboot_host <hostname> shutdown_host <hostname>
readd_host <ignorieren, ist Müll>
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ß!