Wie erzwinge ich Gruppen- und Berechtigungen für erstellte Dateien in einem bestimmten Verzeichnis?

27

Für Dateien, die mit dem Testbenutzerkonto im Verzeichnis / var / www erstellt wurden, muss g + rwx als Berechtigung und www-data als Gruppe angegeben werden.

Wie kann ich das erreichen?

Ich erstelle die Dateien über SSH.

Mr.Gando
quelle
1
Wie erstellt Ihr Benutzer Dateien? Über FTP stor/ appe? Über HTTP PUT? Über ein Shell-Konto? Diese Details sind wichtig, da sie die möglichen Antworten stark beeinflussen und in Ihrer Frage stehen müssen.
JdeBP
Danke für die Eingabe :), ich erstelle alles über SSH.
Mr.Gando

Antworten:

53

Geben Sie /var/wwwdas setgid- Bit ein , um die Gruppe festzulegen :

chgrp www-data /var/www
chmod g+s /var/www

So passen Sie auch Unterverzeichnisse an: find /var/www -type d -exec chmod g+s {} +

Dadurch werden alle neu erstellten Dateien anstelle des Benutzers die Gruppe des übergeordneten Verzeichnisses erben.


Um die Standardgruppenberechtigungen festzulegen, müssen Sie ACLs verwenden . Festlegen einer "Standard" -ACL:

setfacl -m "default:group::rwx" /var/www

So passen Sie auch Unterverzeichnisse an: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Hinweis: Für das Dateisystem muss die ACL-Unterstützung aktiviert sein. Manchmal ist es standardmäßig aktiviert. Auf ext3 oder ext4 wird möglicherweise "Operation not supported" angezeigt. In diesem Fall muss die Option manuell aktiviert werden:

  • Für ein aktuell eingehängtes Dateisystem: mount -o remount,acl /

  • Permanent - eine der folgenden Methoden:

    • auf fstab-ebene: editieren /etc/fstabum aclim optionsfeld zu haben

    • auf Dateisystemebene: tune2fs -o acl /dev/diskname

Grawity
quelle
Kannst du die Unterverzeichnisse nicht mit chmod -R g + s / var / www bekommen? Scheint nicht so, als ob Sie den Befehl find benötigen sollten.
Bobpaul
4
@bobpaul: Nein, da chmodwürden auch alle Dateien rauskommen .
Grawity
Beachten Sie, dass insbesondere einige Befehle es installirgendwie schaffen, die Standard-ACLs für Verzeichnisse zu umgehen.
Ulrich Schwarz
@grawity Dies ist eine wirklich gute Antwort und ich bin sicher, dass es eine Lösung für mein Problem gibt, aber ich kann es nicht herausfinden. Ich habe einen /var/www/html/projectsOrdner und wenn www-data eine Datei erstellt, hat es rw-rw-rBerechtigungen, aber wenn ich etwas in der Konsole mache, erstellt es eine Datei mit rw-r--r. Wie kann ich erzwingen, dass neu erstellte Dateien immer über rw-rw-rBerechtigungen verfügen ?
Lewis4u
@ lewis4u: Global oder pro-Verzeichnis? Die globalen Standardberechtigungen (pro Prozess) werden von gesteuert umask. Die Standardberechtigungen pro Verzeichnis können setfaclwie im Hauptbeitrag geändert werden.
Grawity
3

Dies könnte dazu geführt haben, dass einige Leute bei der Antwort 'grawity' auf setgid hängen geblieben sind. Wenn sich die Gruppe des Ordners von Ihrer eigenen unterscheidet, müssen Sie möglicherweise chmod als root ausführen, aber es wird kein Fehler angezeigt, der darauf hinweist, dass Sie dies tun müssen.

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set
LukePH
quelle
Ich zog mir die Haare aus, bevor ich darüber lief. Vielen Dank.
AndrewStevens
0

Die Gruppe der von einem Benutzer erstellten Dateien ist die Gruppe dieses Benutzers (in / etc / group). Die Berechtigungen werden von der UMASK gesteuerten Parameter diese sehen

DrNoone
quelle