Erhalten neuer Dateien zum Erben von Gruppenberechtigungen unter Linux

87

Ich habe ein Problem mit Berechtigungen auf einem Linux-Server. Ich bin an BSD gewöhnt. Wenn ein Verzeichnis einer Gruppe gehört, deren Eigentümer es nicht ist, wie z. B. www-data, gehören die darin erstellten Dateien dieser Gruppe. Dies ist wichtig, da ich möchte, dass Dateien vom Webserver (der nicht als Root ausgeführt wird) gelesen werden können, aber ein Benutzer trotzdem neue Dateien in das Verzeichnis aufnehmen kann. Ich kann die Benutzer nicht in www-Daten eintragen, da sie dann die Websites aller anderen Benutzer lesen können.

Ich möchte, dass der Webserver alle Websites liest. Ich möchte, dass Benutzer ihre eigenen ändern können.

Die Berechtigungen für die Ordner sind im Moment so eingestellt.

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

Es ist Standardverhalten bei BSD, dass Berechtigungen auf diese Weise funktionieren. Wie bringe ich Linux dazu?

John Tate
quelle
2
Können Sie ACLs verwenden?
slm

Antworten:

128

Es hört sich so an, als würden Sie die setgid-Bit- Funktionalität beschreiben, bei der beim Festlegen eines Verzeichnisses alle neu erstellten Dateien gezwungen werden, ihre Gruppe auf dieselbe Gruppe festzulegen, die im übergeordneten Verzeichnis festgelegt ist.

Beispiel

$ whoami
saml

$ groups
saml wheel wireshark

Richten Sie ein Verzeichnis mit Perms + Ownerships ein

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

Berühre eine Datei als Saml in diesem Verzeichnis

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

Dies gibt Ihnen ungefähr, wie es sich anhört, als ob Sie möchten. Wenn Sie jedoch genau das möchten, was Sie beschrieben haben, sollten Sie auf die Funktionen der Zugriffssteuerungslisten zurückgreifen, um diese (ACLs) zu erhalten.

ACLs

Wenn Sie mehr Kontrolle über die Berechtigungen für die Dateien haben möchten, die unter dem Verzeichnis erstellt werden somedir, können Sie die folgende ACL-Regel hinzufügen, um die Standardberechtigungen wie folgt festzulegen.

Vor

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

Berechtigungen festlegen

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Beachten Sie +am Ende, dass auf dieses Verzeichnis ACLs angewendet wurden.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

nach

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

Beachten Sie, dass die Standardberechtigungen ( setfacl -Rdm) so festgelegt sind, dass die Berechtigungen r-xstandardmäßig ( g:apache:rx) sind. Dies zwingt alle neuen Dateien, nur ihr rBit zu aktivieren.

slm
quelle
Das scheint die Funktionalität zu bieten, die ich wollte, danke.
John Tate
Dies scheint auch mein ähnliches Problem zu lösen. Allerdings verstehe ich den letzten Satz nicht ganz: "Dies zwingt alle neuen Dateien, nur das r-Bit zu aktivieren." Warum ist die Berechtigung x nicht aktiviert? Gibt es eine Möglichkeit, es standardmäßig zu aktivieren?
Yaobin
1
@yaobin Ich denke, es ist eine Sicherheitssache, Sie möchten nicht wirklich eine Datei haben, die standardmäßig ausführbar ist
cdarken
Das geht nicht mit unzip?
datasn.io
@ datasn.io - Schauen Sie sich die Manpage von an unzip. Speziell der -XSchalter.
slm
37

TL: DR; Damit neue Dateien die Gruppe des Containerordners erben, gehen Sie wie folgt vor:

$ chmod g+s somefolder

Hinweis: Dies ist nur ein Ausschnitt, der in der akzeptierten Antwort impliziert ist.

alo Malbarez
quelle
3
setgid bedeutet, dass neue Dateien und Ordner die richtige Gruppe haben. Denken Sie jedoch daran, dass beim Verschieben von Dateien in den Baum nicht der richtige Eigentümer konfiguriert ist. Der ACL-Ansatz bewältigt dies (im Allgemeinen).
Chris Morgan
@ ChrisMorgan wie geht es damit um? Die Lösungen aus der akzeptierten Antwort haben in meinem Fall nichts für verschobene Dateien getan.
Dan M.
@DanM .: Mit den Dateimodi legen Sie Berechtigungen fest, die nicht vererbt werden. Mit Zugriffssteuerungslisten legen Sie jedoch Berechtigungen fest, die geerbt werden (obwohl die untergeordneten Zugriffssteuerungslisten eigene angeben können, die diese überschreiben) und zur Laufzeit überprüft werden.
Chris Morgan
@ ChrisMorgan ja. Wie machst du das? Die Lösung, die eine vom ACL-Formular akzeptierte Antwort verwendet, funktioniert nicht.
Dan M.
10

Beachten Sie als Ergänzung zu slms Antwort, dass Sie in einem ext2 / 3/4-Dateisystem das von Ihnen beschriebene BSD-Verhalten mithilfe der bsdgroupsmount-Option auf der Partition replizieren können. Von der mount(1)Manpage:

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
user60039
quelle