Der OpenSolaris fork Openindiana und SMB CIFS Share mit ZFS

Man hat bei Solaris über CIFS die Möglichkeit die Berechtigungsstruckturen von Microsoft Windows Systemen zusetzten. Ich meine damit, man macht eine Freigabe und kann dann die Datei- und Ordnerberechtigungen auf dieser Freigabe mit seinem Windows Client genau so bearbeiten und setzten, als wenn diese auf einem anderen Windows System liegen. Man hat sogar die Möglichkeit sein Solaris System ins Active Directory seiners ADS zu buchen und dieses zur Rechtevergabe zu nutzen! Ja, ich finde es auch geil 🙂

Hier möchte ich nun einmal in einem kleinen Beispiel beschreiben wie man einen einfachen Share für diesen Zweck aufbaut und wie man die Berechtigungen setzt.

Als Ausgangssystem nehme ich ein OpenIndiana in der Version oi_151a2 und mit lokalen Benutzeraccounts. Wenn ich Zeit finde mache ich noch ein Update mit Active Directory Integration…

Damit ich bei meinen „Spielchen“ Mist bauen darf, erstelle ich mir vor solchen Arbeiten immer ein neues Boot Environment:

$ beadm create vor-cifs-test
Created successfully

Jetzt kann schon mal nicht mehr viel schief gehen!

Wir brauchen natürlich noch den kernelbasierten Teil des CIFS Server für Solaris, dieser installiert sich wie folgt fast von alleine:

$ pkg install storage-server
               Zu installierende Pakete:    19
           Startumgebung erstellen:  Nein
               Neu zu startende Dienste:     1
DOWNLOAD                                PAKETE     DATEIEN ÜBERTRAGUNG (MB)
Completed                                19/19     750/750    47.9/47.9

PHASE                                       AKTIONEN
Installationsphase                         1498/1498

PHASE                                       ELEMENTE
Paketstatus-Aktualisierungsphase               19/19
Abbildstatus-Aktualisierungsphase                2/2

Jetzt sind nun nicht nur die Grundlagen für den CIFS Samba Server gelegt sondern auch für alle anderen denkbaren Storage Ideen 🙂

So dann werfen wir mal die Riemen auf den Samba Server:

$ svcadm enable -r smb/server
$ svcadm start network/smb/server:default

Kurze Kontrolle ob alles läuft:

$ svcs |grep smb
online         14:32:45 svc:/network/smb/client:default
online         14:32:46 svc:/network/shares/group:smb
online         14:33:03 svc:/network/smb/server:default

Perfekt, weiter gehts! Damit unsere Windosen die Kiste schneller und einfach finden buchen wir sie noch in eine Workgroup:

$ smbadm join -w KERNEL-TEST
After joining KERNEL-TEST the smb service will be restarted automatically.
Would you like to continue? [no]: yes
Successfully joined KERNEL-TEST

Samba-Server reboot tut nun gut:

$ svcadm restart network/smb/server:default

Damit normale Systembenutzer auch smb Kennwörter bekommen muss pam_smb_passwd aktiviert werden. Dazu muss folgendes in der Datei /etc/pam.conf ergänzt werden:

other password required pam_smb_passwd.so.1 nowarn
# echo "other password required pam_smb_passwd.so.1 nowarn" >> /etc/pam.conf

Setzt man nun seinem Benutzer ein neues Kennwort, bekommt er zusätzlich auch sein smb Kennwort.

$ passwd benutzername

Ich habe bereits einen einfachen Datenpool, daher richte ich auf diesem nur noch ein weiteres ZFS Filesystem ein, welches ich später freigeben möchte.

Microsoft unterscheidet normalerweise nicht zwischen Groß- und Kleinschreibung auf Dateisystemebene. Dieses beachte ich natürlich beim Anlegen vom neuen ZFS Filesystem. Sollte man später das gleiche Filesystem noch per NFS freigeben wollen, sollte man das „non-blocking mandatory locking“ aktivieren. Dieses beachte ich natürlich auch direkt beim erstellen des Filesystems. Dieses schaut nun also so aus:

$ zfs create -o casesensitivity=mixed -o nbmand=on fileserver/daten

Jetzt kann ich dieses Filesystem schon freigeben, dieses möchte ich unter dem Namen „DatenShare“ tun. Eine kurze Beschreibung der Freigabe darf natürlich nicht fehlen:

$ zfs set "sharesmb=name=DatenShare,description=Der Testdaten Share" fileserver/daten

Dann legen wir einen Testbenutzer an und vergeben ein Kennwort:

$ useradd -g cifsshare -s /bin/false -c TestUser -m test
$ passwd test
New Password:
Re-enter new Password:
passwd: password successfully changed for test

Nun sorgen wir mit folgendem Befehl dafür das unser neues ZFS Filesystem diesem Benutzer gehört:

$ chown -R test:cifsshare /fileserver/daten

Damit am Ende alle Berechtigungen vererbt werden benötigen wir folgendes:

$ zfs set aclinherit=passthrough fileserver/daten
$ zfs set aclmode=passthrough fileserver/daten

Jetzt wird es spannend! Mit folgendem Befehl (diese geht über mehrere Zeilen) vergeben alle Rechte für: Alle Benutzer, Alle Gruppen, Jeden

Zur Verdeutlichung und als Test sicher erst mal gut.

/usr/bin/chmod A=\
owner@:rwxpdDaARWcCos:fd-----:allow,\
group@:rwxpdDaARWcCos:fd-----:allow,\
everyone@:rwxpdDaARWcCos:fd-----:allow \
/fileserver/daten

Hier sollte man darauf achten, wirklich das Solaris chown zu nutzen. Denn das GNU chown versteht die Optionen nicht.

$ which chown
/usr/bin/chown

Jetzt können wir mal testen auf den Share zuzugreifen und Rechte zu setzen (Windows booten….. *schnarch*)!

 

cifs01
cifs02
cifs03

 

cifs04
cifs05
cifs06

 

 

 

Damit es mit dem Vererben der Berechtigungen deutlicher wird erstelle ich noch einen zweiten Share:

$ chown -R test:cifsshare /fileserver/daten
$ zfs create -o casesensitivity=mixed -o nbmand=on fileserver/daten2
$ zfs set "sharesmb=name=DatenShare2,description=Der Testdaten Share 2" fileserver/daten2
$ chown -R test:cifsshare /fileserver/daten2
/usr/bin/chmod A=\
owner@:rwxpdDaARWcCos:fd-----:allow,\
group@:rwxpdDaARWcCos:fd-----:allow,\
everyone@:rwxpdDaARWcCos:fd-----:allow \
/fileserver/daten2

Die erweiterten ACLs lassen sich natürlich ebenfalls auf Systemebene anzeigen, hier muss man auch das Solaris ls nutzen:

$ cd /fileserver/daten
$ ls -V
total 4373
-rwxrwxrwx+  1 test     cifsshare  345088 Nov 20  2010 cmd.exe
                 owner@:rwxpdDaARWcCos:------I:allow
                 group@:rwxpdDaARWcCos:------I:allow
              everyone@:rwxpdDaARWcCos:------I:allow
drwxrwxrwx+  2 test     cifsshare      12 Mär 22 17:39 de-DE
                 owner@:rwxpdDaARWcCos:fd----I:allow
                 group@:rwxpdDaARWcCos:fd----I:allow
              everyone@:rwxpdDaARWcCos:fd----I:allow
drwxrwxrwx+  5 test     cifsshare       5 Mär 22 17:39 diagnostics
                 owner@:rwxpdDaARWcCos:fd----I:allow
                 group@:rwxpdDaARWcCos:fd----I:allow
              everyone@:rwxpdDaARWcCos:fd----I:allow
drwxrwxrwx+  2 test     cifsshare       2 Mär 22 17:38 TestOrdner
                 owner@:rwxpdDaARWcCos:fd----I:allow
                 group@:rwxpdDaARWcCos:fd----I:allow
              everyone@:rwxpdDaARWcCos:fd----I:allow
-rwxrwxrwx+  1 test     cifsshare 1733554 Mär 22 16:37 winrar-x64-411d.exe
                 owner@:rwxpdDaARWcCos:------I:allow
                 group@:rwxpdDaARWcCos:------I:allow
              everyone@:rwxpdDaARWcCos:------I:allow

Es lassen sich nun also die Berechtigungen vom Windows Client aus setzten.