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.
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.
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
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
getent passwd
. Es sollten alle Konten (Schüler, Lehrer, etc.) durchlaufen.lehrerserver ~# aptitude install samba smbclient
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
lehrerserver ~# service smbd restart
rlpc01 ~# mount -t cifs //10.16.12.100/kuechel /home/teachers/kuechel/Privat_auf_Lehrerserver -o "user=kuechel,rw,nosuid,nodev,nobrl"
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:
server ~# ldapsearch -x SambaDomainName=SCHULE -LLL sambaSID dn: sambaDomainName=SCHULE,dc=linuxmuster-net,dc=lokal sambaSID: S-1-5-21-ZZZZZZZZZ-YYYYYYYY-XXXXXXXXX
dn: sambaDomainName=LEHRERSERVER,dc=linuxmuster-net,dc=lokal changetype: modify replace: sambaSID sambaSID: S-1-5-21-ZZZZZZZZZ-YYYYYYYY-XXXXXXXXX
server ~# ldapmodify -D "cn=admin,dc=linuxmuster-net,dc=lokal" -W -f modify.lehrerserver.ldif
Das LDAP Passwort (hier 12345678) des Servers aus /etc/ldap.secret
muss dem zusätzlichen Server bekannt gemacht werden:
lehrerserver ~# smbpasswd -w 12345678
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
/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.<?xml version="1.0" encoding="UTF-8"?> <pam_mount> <debug enable="0" /> <mkmountpoint enable="1" /> <lsof>/usr/bin/lsof %(MNTPT)</lsof> <fsck>/sbin/fsck -p %(FSCKTARGET)</fsck> <cifsmount>/usr/sbin/linuxmuster-pam-mount %(SERVER) %(VOLUME) %(MNTPT) %(USER) "user=%(USER),%(OPTIONS)"</cifsmount> <umount>/usr/sbin/linuxmuster-pam-umount %(SERVER) %(VOLUME) %(MNTPT) %(USER)</umount> <mntcheck>/bin/mount</mntcheck> <pmvarrun>/usr/sbin/pmvarrun -u %(USER) -d -o %(OPERATION)</pmvarrun> <volume options="rw,nosuid,nodev,nobrl" user="*" mountpoint="~/Home_auf_Server" path="%(USER)" server="10.16.1.1" fstype="cifs" /> <volume options="rw,nosuid,nodev,nobrl" user="*" mountpoint="~/Privat_auf_Lehrerserver" path="%(USER)" server="10.16.12.100" fstype="cifs" gid="10000"/> <volume options="rw,nosuid,nodev" user="*" mountpoint="/home/students" path="students" server="10.16.1.1" fstype="cifs" /> <volume options="rw,nosuid,nodev" user="*" mountpoint="/home/share" path="shares" server="10.16.1.1" fstype="cifs" /> <volume options="rw,nosuid,nodev" user="*" mountpoint="/home/samba/progs" path="pgm" server="10.16.1.1" fstype="cifs" /> <volume options="rw,nosuid,nodev," user="*" mountpoint="/home/samba/cds" path="cdrom" server="10.16.1.1" fstype="cifs" /> <volume options="rw,nosuid,nodev" user="*" mountpoint="/var/cache/sophomorix/tasks" path="tasks" server="10.16.1.1" fstype="cifs" /> </pam_mount>
Beispiel 1:
<snip/> # 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
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.