Wie setze ich die Standard-Umask in Apache unter Debian?


14

Ich benötige Dateien, die von apache2 erstellt wurden, umask 002, dh group rw, standardmäßig zu haben.

Ich habe versucht, umask 002/ etc / apache2 / envvars einzufügen, und obwohl dieses Skript als Teil von apache start up ( apache2ctl graceful) ausgeführt wird, hat die umask keine Wirkung. Vermutlich irgendwo weiter im Startprozess (z. B. wenn der Benutzer von rootauf herabgestuft wird www-data) gibt es einen besseren Ort, um dies zu formulieren.

Ich habe Beiträge über Fedora gelesen und einen, der vorschlägt, umask einzubauen, /etc/init.d/apache2aber keines davon trifft auf Debian (Squeeze) zu.

Kannst du helfen?


1
Sie sollten versuchen, Apache mit "/etc/init.d/apache2 restart" oder "service apache2 restart" neu zu starten
Jens Bradler

yep, keiner hat funktioniert.
Artfulrobot

Wie erstelle ich neue Dateien (WebDAV, PHP)?
Jens Bradler

In meinem Test verwende ich file_put_contents (). Aber der Code, den ich hiermit 'reparieren' möchte, ist das Less-Modul von Drupal (das zwischengespeicherte Versionen von verarbeiteten Less-CSS-Dateien erstellt). Mein spezielles Problem ist, dass ich nicht drush cc allals Benutzer ausgeführt werden kann, da bei all diesen mit WWW-Daten erstellten Cache-Dateien Fehler auftreten.
Artfulrobot

Antworten:


11

Um sicherzustellen, dass die umask-Einstellung wirksam wird, verwenden Sie bitte einen einfachen Test und keine andere Webanwendung. Es kann vorkommen, dass diese Anwendungen die Rechte unabhängig von der umask-Einstellung von Apache ändern.

Einfaches Test-PHP-Skript:

<?php
if ($fp = fopen(time() . '.txt', 'w')) {
  fwrite($fp, 'This is a simple test.');
  fclose($fp);
  echo "done";
} else {
  echo "error - cannot create file";
}
?>

Stellen Sie sicher, dass der Benutzer www-data Schreibzugriff auf den Ordner hat, in dem Sie diese einfache Testdatei installiert haben.

Um die neue umask laufen zu lassen, prüfen Sie, ob die Datei / etc / apache2 / envvars in Ihrer Apache-Startdatei /etc/init.d/apache2 verwendet wird:

...
PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)
...

Setze deine umask in / etc / apache2 / envvars:

...
# umask 002 to create files with 0664 and folders with 0775
umask 002

Starten Sie Ihren Apache neu:

service apache2 restart

Überprüfen Sie den Unterschied:

#> ls -l *.txt
-rw-rw-r-- 1 www-data www-data  14 2012-05-01 15:56 1335880583.txt
-rw-r--r-- 1 www-data www-data  14 2012-05-01 15:55 1335880540.txt

Vielen Dank! Auch wenn ich mich beim Lesen wie ein Idiot fühlte (ich hatte das falsche Oktal für Group RW) * erröten *
artfulrobot

Ihr kleines PHP-Snippet hat meine Vernunft gerettet. Das Wordpress-Plugin PDO Sqlite3 setzt die Gruppe immer so, dass sie nur für die Datenbankdatei gelesen werden kann.
Daniel Sokolowski

2

Wenn Sie mehrere Sites ausführen, können Sie die Standardgruppenberechtigung mithilfe von Zugriffssteuerungslisten (Access Control Lists, ACL) pro Verzeichnis wie folgt festlegen:

Setzen Sie das setidFlag, um zu erzwingen, dass alle neuen Dateien die Gruppe aus dem Verzeichnis übernehmen:

# chmod g+s wordpress

Erstellen Sie neue Dateien rwfür die Gruppenberechtigungen, z. Damit www-datakann in Dateien geschrieben werden, die vom Upload-Benutzer SFTPed wurden:

# setfacl --default --modify group::rwx wordpress 

Bestätigen Sie, dass die ACL folgendermaßen lautet:

# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Erstellen Sie eine Datei, um zu bestätigen, dass sie funktioniert hat:

# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test

Ist dies nicht problematisch, wenn die Anwendung absichtlich versucht, Dateien mit reduzierten Berechtigungen zu schreiben?
berbt


1
Ich denke, diesem Befehl setfacl --default --modify group:rwx wordpressfehlt ein Doppelpunkt. Es sollte seinsetfacl --default --modify group::rwx wordpress
Marcos

2

(Für Debian Stretch, das systemd verwendet - Danke, womble!)

UMask=0002Fügen Sie die Apache2-Datei systemd service unit ein, laden Sie die Service Unit neu und starten Sie Apache2 neu.

$ pwd
/etc/systemd/system/multi-user.target.wants

$ cat apache2.service
[Einheit]
Description = Der Apache HTTP Server
After = network.target remote-fs.target nss-lookup.target

[Bedienung].
.
.
.
UMask = 0002

$ sudo systemctl daemon-reload
$ sudo systemctl starte Apache2 neu

Debian Squeeze hat systemd nicht verwendet.
womble

Ah ja, am Ende des Hauptteils der ursprünglichen Frage steht Debian Squeeze. Da die Frage ab heute vor ~ 8 Jahren gestellt wurde und ich versuchte, das im Titel genannte Problem mit dem neuesten Debian Ende 2019 zu lösen, habe ich dies gepostet. Ich denke, die meisten Menschen, die heute nach einer Lösung suchen, im Gegensatz zu vor acht Jahren, können von meiner Lösung profitieren. Deshalb lasse ich einfach, was ich eingegeben habe. Danke, dass Sie darauf hingewiesen haben.
Duplexddaann
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.