Die Frage
Sie haben ein Festplattenverzeichnis, das von Linux- und Microsoft Windows-Clients gemeinsam genutzt wird. Mehrere Benutzer benötigen Zugriff auf diese Verzeichnisfreigabe, aber wenn Dateien von den Linux-Clients erstellt oder geändert werden, werden die Linux-Dateiberechtigungen angewendet, was es den Windows-Clients erschwert oder unmöglich macht, auf diese Dateien zuzugreifen.
Sie möchten diese Datenträgerressourcen auf homogene Weise gemeinsam nutzen.
Die Lösung
Abhängig von Ihrer allgemeinen Wartungsstrategie kann eine der folgenden Techniken verwendet werden.
1. Benutzer- oder Gruppenbesitz erzwingen
In der Datei /etc/samba/smb.conf Sie können die Direktive verwenden:
force user = [user] force group = [group]
Dadurch werden die normalen Dateibesitzattribute für den Datei- oder Verzeichniszugriff außer Kraft gesetzt. Standardmäßig werden die effektiven Benutzeranmeldeinformationen verwendet. Durch die Verwendung einer (oder beider) der obigen Anweisungen kann der zugehörige Berechtigungsnachweis auf einen bestimmten Wert gezwungen werden. Somit werden alle Dateizugriffe so durchgeführt, als ob der zugreifende Prozess mit den angegebenen Anmeldeinformationen ausgeführt würde.
Wenn die Direktive die Form hat:
force group = +[group]
dann wird nur für Linux-Benutzer, die bereits Mitglieder von [Gruppe] sind, ihre primäre Gruppe für die Dauer des Zugriffs in [Gruppe] geändert. Linux-Benutzer, die nicht bereits Mitglieder der [Gruppe] sind, sind von dieser Anweisung nicht betroffen.
2. Verwenden Sie die Verzeichniszugriffsberechtigungen
Betrachten Sie den /tmp-Verzeichnis:Es ist ein Notizblock, der es mehreren Benutzern ermöglicht, Dateien zu erstellen, zu ändern oder zu löschen. Um zu verhindern, dass Benutzer A eine Datei löscht, die Benutzer B gehört, hat das Verzeichnis das Sticky-Bit gesetzt:
$ ls -ld /tmp drwxrwxrwt 14 root root 360 Mar 19 08:25 /tmp
Beachten Sie das t Flag der Berechtigungen:Dies zeigt das „Sticky an ” Bit wird für das Verzeichnis gesetzt. Jeder Benutzer kann Dateien in diesem Verzeichnis erstellen, aber nur der Eigentümer kann den Eintrag löschen; ohne das Sticky-Bit könnte jeder jede Datei löschen, da das Verzeichnis weltweit Lese-/Schreib-/Ausführungsrechte hat.
1. Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, das gemeinsam genutzte SAMBA-Verzeichnis dem SAMBA-Benutzer zu überlassen:
# /bin/mkdir [/path/to/SAMBA/share] # /bin/chown -R [user]:[group] -R [/path/to/SAMBA/share]
2. Schalten Sie als Nächstes das Setgid-Bit für das Verzeichnis ein, um die Gruppenanmeldeinformationen jedes Verzeichniseintrags dazu zu zwingen, mit den Gruppenanmeldeinformationen dieses Verzeichnisses übereinzustimmen:
# /bin/chmod g+s [/path/to/SAMBA/share] # /bin/ls -ld [/path/to/SAMBA/share] drwxrws--- 1 [user] [group] 0 Mar 19 09:07 [/path/to/SAMBA/share]
3. Erstellen Sie nun als Root-Benutzer eine Datei im Verzeichnis [/path/to/SAMBA/share]. Die Datei gehört root, aber ihre Gruppe ist die Gruppe [Gruppe]:
# /bin/mkdir /example # /bin/chown root:oracle /example # /bin/chmod g+s /example # /bin/ls -ld /example drwxr-sr-x 2 root oracle 4096 Mar 19 10:03 /example
4. Zuletzt erstellen Sie als Root-Benutzer eine Datei in /example:
# id uid=0(root) gid=0(root) groups=0(root) # touch /example/file # ls -ld /example /example/file drwxrws--- 2 root oracle 4096 Mar 19 10:09 /example -rw-r--r-- 1 root oracle 0 Mar 19 10:09 /example/file
Beachten Sie, dass die zum Erstellen der Datei verwendeten Anmeldeinformationen zwar root:root waren, die für die Datei gespeicherten Anmeldeinformationen jedoch root:oracle waren; der Gruppenbesitz wurde automatisch auf die Gruppe des Verzeichnisses gesetzt.
Hinweis
Die oben beschriebene setgid-Methode funktioniert auch, wenn stattdessen das setuid-Bit verwendet wird. Führen Sie im chmod-Schritt stattdessen Folgendes aus:
# chmod u+s [/path/to/SAMBA/share]
Sie können auch den Dateibesitz und die Gruppenmitgliedschaft wie folgt überschreiben:
# chmod u+s,g+s [/path/to/SAMBA/share]
Obwohl dies eine faszinierende Fähigkeit ist, kann dies einen begrenzten Nutzen haben.
3. Zugriffskontrolllisten (ACL) verwenden
Zugriffssteuerungslisten oder ACL sind Dateisystemfunktionen, bei denen ein zusätzlicher Satz von Dateiattributen zusätzlich zu den normalen Linux-Dateibesitzer-/Gruppen-/anderen Berechtigungen gespeichert wird. Die Verwendung von ACL ermöglicht eine sehr feinkörnige Kontrolle über den genauen Zugriffstyp, der einem bestimmten Zugriffstyp gewährt werden soll.
Die Implementierung des SAMBA-Dateisystems unter Linux unterstützt Zugriffskontrolllisten, aber die Funktion muss explizit über das Attribut acl mount aktiviert werden. Es ist möglich, diese Funktion dynamisch zu aktivieren, als:
# mount -o remount,acl [/path/to/samba/mount/point]
Nehmen wir als Beispiel an, wir haben eine Freigabe /samba/office/, wo wir jedem Benutzer erlauben, eine Datei zu schreiben, aber die Gruppenanmeldeinformationen sollten auf office gezwungen werden. Wir könnten den Befehl verwenden:
# mount -o remount,acl /group # setfacl -R -d -m u::rwx,g:office:rwx,o::r-x /samba/office
# /bin/getfacl /samba/office # file: samba/office/ # owner: root # group: office user::rwx group::rwx other::rwx default:user::rwx default:group:office:rwx default:mask::rwx default:other::r-x
Da wir diese ACL für das Verzeichnis einrichten, gilt sie für die darin enthaltenen Dateien und Unterverzeichnisse.