{{tag> lehrernetz}} ====== Einen SAMBA-Server im Lehrernetz ====== Um nach einer Trennung von Lehrernetz und Schülernetz den Lehrern auch Platz für Daten bereitzustellen, kann man auch ein NAS ins Lehrernetz stellen. Hier wird beschrieben, wie man einen weiteren (z.B. virtuellen) Server mit SAMBA betreibt und die entsprechenden Shares **nur** im Lehrernetz gemountet werden. Die Idee ist, dass auf einem extra Server (hier: ''lehrerserver.linuxmuster-net.lokal'') ein SAMBA-Server im getrennten Lehrernetz läuft, der die Benutzer über LDAP angebunden kennt, und ihnen ein HOME zur Verfügung stellt. Auf dem Client muss dann dieses HOME nur noch an einer Stelle (z.B. unter ''~/Privat_auf_Lehrerserver'', ähnlich dem eigentlichen ''~/Home_auf_Server'') gemountet werden. Durch die Trennung auf virtueller Netzebene, kann dieses Mounten nur im Lehrernetz stattfinden. In übrigen Netzen schlägt es mangels server fehl. Zusätzlich wird das Mounten auf einem Linuxclient durch Konfiguration (''gid="10000"'') auf Lehrer beschränkt. ===== Voraussetzungen ===== * Das Lehrernetz ist physikalisch oder per VLAN getrennt vom Schülernetz, aber alle Rechner im Lehrernetz haben Zugriff auf den linuxmuster.net Server. * Der linuxmuster.net server hat die IP 10.16.1.1 * Hier hat das Lehrernetz die IPs 10.16.12.0/24. * Der Lehrerserver hat die IP 10.16.12.100 und läuft unter Ubuntu 12.04 oder 14.04 * Als Clients werden Linuxclients mit Ubuntu 12.04 eingesetzt ===== LDAP konfigurieren ===== Entsprechend der Anleitung [[http://www.linuxmuster.net/wikiarchiv/dokumentation:techsheets:additional-sambaserver]] hat werden folgende Pakete auf dem Lehrerserver installiert: lehrerserver ~# aptitude install libnss-ldap libpam-ldap Bei der Konfiguration von libnss-ldap bzw. libpam-ldap wird interaktiv folgende Einstellungen in der Datei ''/etc/ldap.conf'' abgefragt, bzw. automatisch angelegt: base dc=linuxmuster-net,dc=lokal uri ldap://10.16.1.1/ ldap_version 3 rootbinddn cn=admin,dc=linuxmuster-net,dc=lokal timelimit 30 bind_timelimit 30 pam_password md5 nss_initgroups_ignoreusers backup,bin,daemon,games,gnats,irc,landscape,libuuid,list,lp,mail,man,messagebus,news,proxy,root,sshd,sync,sys,syslog,uucp,www-data * Die LDAP-Konfiguration testen mit ''lehrerserver ~# ldapsearch -x uid=administrator'' testen. Es sollten die Daten des Kontos erscheinen. Zudem muss noch folgende Datei (nach dem Vorbild auf dem Server) angepasst werden: # cat /etc/nsswitch.conf # /etc/nsswitch.conf # # 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 ldap group: compat ldap shadow: compat hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis * Die nssldap-Konfiguration testen mit ''getent passwd''. Es sollten alle Konten (Schüler, Lehrer, etc.) durchlaufen. ===== SAMBA konfigurieren ===== lehrerserver ~# aptitude install samba smbclient ==== SAMBA konfigurieren ==== * Auf dem Lehrerserver die samba-Konfiguration austauschen. Ubuntu 14.04: hat die Optionen server role = standalone server map to guest = Bad User die standardmäßig bei 12.04 nicht dabei sind. ich vermute die folgende Konfiguration funktioniert trotzdem auf für 12.04. [global] dos charset = unix charset = UTF8 workgroup = SCHULE server string = %h server (Samba, Ubuntu) server role = standalone server map to guest = Bad User passdb backend = ldapsam:ldap://10.16.1.1 syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 disable netbios = Yes time server = Yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 hostname lookups = Yes load printers = No logon path = logon home = \\%L\%u os level = 25 domain master = Yes dns proxy = No wins server = 10.16.1.1 ldap admin dn = cn=admin,dc=linuxmuster-net,dc=lokal ldap delete dn = Yes ldap group suffix = ou=groups ldap machine suffix = ou=machines ldap replication sleep = 5000 ldap suffix = dc=linuxmuster-net,dc=lokal ldap user suffix = ou=accounts panic action = /usr/share/samba/panic-action %d winbind enum users = Yes winbind enum groups = Yes idmap config * : backend = tdb admin users = domadmin printing = bsd print command = lpr -r -P'%p' %s lpq command = lpq -P'%p' lprm command = lprm -P'%p' %j map archive = No mangled names = No delete readonly = Yes [homes] comment = Heimatverzeichnis path = %H valid users = %S admin users = administrator read only = No veto files = /.locked/.htaccess/ hide files = /$RECYCLE.BIN/desktop.ini/ browseable = No * Samba neustarten lehrerserver ~# service smbd restart * Mounten auf einem Linuxclient testen (wird fehlschlagen, siehe Hack unten): rlpc01 ~# mount -t cifs //10.16.12.100/kuechel /home/teachers/kuechel/Privat_auf_Lehrerserver -o "user=kuechel,rw,nosuid,nodev,nobrl" ==== sambaSID in LDAP "korrigieren" ==== Einziger Hack (mangels besseren Wissens) in dieser Anleitung: Die sambaSID des lehrerservers wird (auf dem linuxmuster.net-Server LDAP) verändert. In LDAP wird automatisch vom Lehrerserver aus ein neuer Eintrag hinterlegt: server ~# ldapsearch -x SambaDomainName=LEHRERSERVER -LLL dn: sambaDomainName=,dc=linuxmuster-net,dc=lokal objectClass: sambaDomain objectClass: sambaUnixIdPool sambaDomainName:: U0NIVUxFIA== sambaSID: S-1-5-21-556912907-1234567891-2234567890 uidNumber: 1000 gidNumber: 1000 In jenem Eintrag ist eine sambaSID hinterlegt. Wenn diese aber mit der sambaSID der Domäne "SCHULE" übereinstimmt, dann funktioniert auch der mount-Befehl. Austauschen der sambaSID: * die SambaSID der Domäne SCHULE herausfinden server ~# ldapsearch -x SambaDomainName=SCHULE -LLL sambaSID dn: sambaDomainName=SCHULE,dc=linuxmuster-net,dc=lokal sambaSID: S-1-5-21-ZZZZZZZZZ-YYYYYYYY-XXXXXXXXX * Datei erstellen mit der sambaSID von "SCHULE": dn: sambaDomainName=LEHRERSERVER,dc=linuxmuster-net,dc=lokal changetype: modify replace: sambaSID sambaSID: S-1-5-21-ZZZZZZZZZ-YYYYYYYY-XXXXXXXXX * Veränderung vornehmen: server ~# ldapmodify -D "cn=admin,dc=linuxmuster-net,dc=lokal" -W -f modify.lehrerserver.ldif Das hat sicher etwas mit Domänenzugehörigkeit oder Maschinenpasswort austausch zu tun, oder ist einfach in Samba zu konfigurieren. Wer das weiß, bitte verbessern und mir eine [[mailto:t.kuechel@humboldt-ka.de|Mail schreiben]] ==== LDAP-Passwort in SAMBA speichern ==== Das LDAP Passwort (hier 12345678) des Servers aus ''/etc/ldap.secret'' muss dem zusätzlichen Server bekannt gemacht werden: lehrerserver ~# smbpasswd -w 12345678 * samba neustarten ==== SAMBA-shares anlegen ==== Dieser Schritt muss nach jedem Lehrer Zugang/Weggang wiederholt werden. Auf dem **linuxmuster.net Server**: server ~# cd /home/teachers server /home/teachers # for i in * ; do ssh lehrerserver "mkdir -p /home/teachers/$i; chown $i:teachers /home/teachers/$i; chmod 700 /home/teachers/$i"; done ===== Linux-Client-Konfiguration ===== * Die PAM Konfiguration auf dem Linuxclient muss geändert werden. * Beachten, dass man in ''/etc/linuxmuster-client/auth/config'' die Autokonfiguration beendet (und dann ein neues Image macht, oder sowohl ''/etc/ldap.conf'' also auch folgende Datei per postsync hinkopiert. /usr/bin/lsof %(MNTPT) /sbin/fsck -p %(FSCKTARGET) /usr/sbin/linuxmuster-pam-mount %(SERVER) %(VOLUME) %(MNTPT) %(USER) "user=%(USER),%(OPTIONS)" /usr/sbin/linuxmuster-pam-umount %(SERVER) %(VOLUME) %(MNTPT) %(USER) /bin/mount /usr/sbin/pmvarrun -u %(USER) -d -o %(OPERATION) ==== Verhindern, dass Home_auf_Server noch mal gesynct wird. ==== * Das Problem ist, dass beim zweiten HOME die Abfrage in den linuxmuster-client skripten nicht abbricht, weil $VOLUME = $USER ist. Die Annahme, dass das nur einmal stattfindet, ist jetzt nicht mehr gegeben. Man sollte noch den $SERVER auswerten oder sicherstellen, dass Home_auf_Server leer ist. Beispiel 1: # this script gets executed only once, before the users home from the # server gets mounted. in this case $USER and $VOLUME are the same if [ $USER != $VOLUME ]; then return 0 fi # check, if the Home_auf_Server Directory is not empty and return . /etc/linuxmuster-client/linuxmuster-client.conf || exit 1 if [ "$(ls -A $HOMEDIR/$HOMEFOLDERNAME)" ]; then msg2log pre-mount "$HOMEFOLDERNAME is not empty, not syncing." return 0 fi # log success $LOGGING && msg2log pre-mount "We are mounting users home, copy default profile" rsync -r $RSYNC_OPTIONS /home/$PROFILE_USER/ $HOMEDIR/ mkdir -p $MNTPT Beispiel 2 (m.E. bessere Variante): # this script gets executed only once, before the users home from the # server gets mounted. in this case $USER and $VOLUME are the same mainserverip=$(gethostip $SERVER | awk '{print $2}') requestserverip=$(grep "^uri\ ldap://" /etc/ldap.conf | head -n 1 | sed "s@^uri\ ldap://@@;s@/.*@@") if [ $USER != $VOLUME -o $mainserverip != $requestserverip ]; then return 0 fi # Additional check, if the Home_auf_Server Directory is not empty and return . /etc/linuxmuster-client/linuxmuster-client.conf || exit 1 if [ "$(ls -A $HOMEDIR/$HOMEFOLDERNAME)" ]; then msg2log pre-mount "$HOMEFOLDERNAME is not empty, not syncing." return 0 fi **Achtung!** Solange diese Abfrage noch nicht in den offiziellen linuxmuster-client* Paketen verbessert wurde, wird in **jedem** ''pre/post-mount/umount.d/*'' Skript diese Änderung nötig sein. Für diese Befehle muss ''syslinux'' auf dem Client installiert sein. Einfach mal ''gethostip server'' aufrufen und schauen, ob es klappt. ===== Optional ===== * sicherstellen, dass es ein Backup gibt * sicherstellen, dass es ein quota gibt * sicherstellen, dass alte Lehrer ab und zu gelöscht werden. ===== TODO ===== * sicherstellen, dass neue Lehrer ein Verzeichnis bekommen (hacken der sophomorix-add Befehle?), Workaround, siehe [[#samba-shares_anlegen]]