Samba erweitern

Standardkonfiguration von Samba einrichten, siehe hier: Samba einrichten

Immer manuell die Shares eintragen, nervt auf Dauer. Ein weiteres Problem stellt die Sichtbarkeit der einzelnen Shares dar. Ein Benutzer soll nicht alle Freigaben sehen, welche existieren. Er soll nur die Freigaben zu Gesicht bekommen, auf der er auch Zugriff hat.

Hier nun die Lösung für das Problem:

Es werden erst einmal Gruppenordner erstellt, welches später die Daten enthalten (oder Links, bzw. Mounts):

# Gruppen erstellen
groupadd zeugs
groupadd krams
# Ordner erstellen (müssen den selben Namen wie die Gruppen besitzen)
mkdir /home/groups/zeugs
mkdir /home/groups/krams
# Rechte setzen
chgrp zeugs /home/groups/zeugs
chgrp krams /home/groups/krams
chmod 750 /home/groups/zeugs
chmod 750 /home/groups/krams

Nun kommen die Benutzer dran:

# -m Erstellt das Homeverzeichnis
# --home gibt den direkten Pfad an
# -g zur bestimmten Gruppe hinzufügen (-G für mehrere gruppen)
# --shell /bin/false für keinen ssh Zugang
useradd -m --home /home/users -g  --shell /bin/false

Beispiel:

useradd -m --home /home/users/benutzer1 -g krams --shell /bin/false benutzer1
# Gruppe vergessen? (wir hätten natürlich mit -G auch mehrere anlegen können :P  )
# fügen wir einfach den "benutzer1" der Gruppe "zeugs" hinzu:
usermod -aG zeugs benutzer1

Der Vollständigkeit nochmal mit mehreren Gruppen

useradd -m --home /home/users/benutzer1 -G zeugs,krams --shell /bin/false benutzer1

Passwörter für den Nutzer anlegen:

passwd 
smbpasswd -a 

Alles fertig? NEIN! Der größte Spaß kommt noch.

Schritt 1: smb.conf anpassen und folgende Freigabe hinzufügen:

[gruppen]
path = /home/users/%U
root preexec = /usr/local/bin/mklinks %U
writeable = yes
browsable = no

Schritt 2: Script anlegen ( Rechteverwaltung fehlerhaft! ):

vi /usr/local/bin/mklinks

Schritt 3: Script einfügen:

#!/bin/bash
umask 022
cd /home/users

# erstma wieder läsen
# gibts eine bessere loesung?
umount $1

for folder in $(ls "/home/users/")
do
umount "$1/$folder"
done

rm -rf "$1"
mkdir "$1"
cd "$1"

for i in $(groups $1)
do
if [ -d "/home/groups/$i" ]
then
mkdir $i
mount --bind "home/groups/$i" $i
fi
done

Schritt 4: Das Script ausführbar machen (das wird sehr oft vergessen):

chmod +x /usr/local/bin/mklinks

Schritt 5: Samba neustarten und dann müsste es funktionieren:

sh /etc/init.d/samba restart

neuen User anlegen und der Gruppe smbuser hinzufügen:

useradd -g smbuser 

oder:

User zu Gruppe smbuser hinzufügen:

usermod -aG smbuser 

Passwort vergeben:

passwd

Samba-Passwort für User festlegen (muss das selbe sein!!!):

smbpasswd -a 


Samba testen:

```bash
testparm /etc/samba/smb.conf