{{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]]