Ich habe ein Problem mit Berechtigungen auf einem Linux-Server. Ich bin an BSD gewöhnt. Wenn ein Verzeichnis einer Gruppe gehört, in der sich der Benutzer, dem es gehört, nicht befindet, z. B. www-data, werden darin erstellte Dateien dieser Gruppe gehören. Dies ist wichtig, weil ich möchte, dass Dateien vom Webserver gelesen werden können (den ich nicht als Root ausführen werde), ein Benutzer aber immer noch neue Dateien in das Verzeichnis einfügen kann. Ich kann die Benutzer nicht in www-Daten einfügen, weil 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 werden im Moment so auf die Ordner gesetzt….
drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john
Es ist Standardverhalten auf BSD, dass Berechtigungen auf diese Weise funktionieren. Wie bekomme ich Linux dazu?
Akzeptierte Antwort:
Es hört sich so an, als würden Sie die setgid-Bit-Funktionalität beschreiben, bei der, wenn ein Verzeichnis, in dem es festgelegt ist, alle darin erstellten neuen Dateien erzwingen, dass ihre Gruppe auf dieselbe Gruppe festgelegt wird, die im übergeordneten Verzeichnis festgelegt ist.
Beispiel
$ whoami
saml
$ groups
saml wheel wireshark
ein Verzeichnis mit Rechten und Eigentumsrechten einrichten
$ 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 das, was es klingt, wie Sie wollen. Wenn Sie jedoch wirklich genau das wollen, was Sie beschrieben haben, müssen Sie meines Erachtens auf die Funktionalität der Zugriffssteuerungslisten (ACLs) zurückgreifen, um dies zu erreichen.
ACLs
Wenn Sie etwas 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.
vorher
$ 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 das +
am Ende bedeutet das, 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 bei den Standardberechtigungen (setfacl -Rdm
) so eingestellt, dass die Berechtigungen (r-x
) standardmäßig (g:apache:rx
). Dies zwingt alle neuen Dateien, nur ihren r
zu haben Bit aktiviert.