Jak ustawić domyślną umask w Apache na Debianie?


14

Potrzebuję plików utworzonych przez apache2, aby 002domyślnie mieć umask , tj. Grupę rw.

Próbowałem umieścić umask 002/ etc / apache2 / envvars i chociaż ten skrypt jest wykonywany jako część apache start up ( apache2ctl graceful), umask nie działa. Przypuszczalnie gdzieś w dalszej fazie procesu uruchamiania (np. Kiedy użytkownik jest obniżony z wersji rootna www-data), jest coś lepszego.

Przeczytałem posty o Fedorze i jeden sugerujący włożenie umask, /etc/init.d/apache2ale żaden z nich nie dotyczy / działa w Debianie (Squeeze).

Możesz pomóc?


1
Powinieneś spróbować zrestartować Apache przy pomocy „/etc/init.d/apache2 restart” lub „service apache2 restart”
Jens Bradler

tak, żadne nie działało.
artfulrobot

Jak tworzysz nowe pliki (WebDAV, PHP)?
Jens Bradler

W moim teście używam file_put_contents (). ale kod, który próbuję „naprawić” za pomocą tego modułu, to moduł Less firmy Drupal (który tworzy buforowane wersje przetworzonych plików Less CSS). Moim szczególnym problemem jest to, że nie mogę uruchomić się drush cc alljako mój użytkownik, ponieważ występuje błąd na wszystkich plikach pamięci podręcznej utworzonych z danych www.
artfulrobot

Odpowiedzi:


11

Aby upewnić się, że ustawienie umask obowiązuje, skorzystaj z prostego testu i nie używaj do tego innych aplikacji internetowych. Może się zdarzyć, że te aplikacje zmienią prawa niezależnie od ustawienia umask Apache.

Prosty testowy skrypt PHP:

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

Uważaj, aby użytkownik www-data miał dostęp do zapisu w folderze, w którym zainstalowałeś ten prosty plik testowy.

Aby uruchomić nowy umask, sprawdź, czy plik / etc / apache2 / envvars będzie używany w pliku początkowym Apache /etc/init.d/apache2:

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

Ustaw swój umask w / etc / apache2 / envvars:

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

Uruchom ponownie Apache:

service apache2 restart

Sprawdź różnicę:

#> 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

Dziękuję Ci! Nawet jeśli to sprawiło, że poczułem się jak idiota, czytając go (miałem zły oktał do grupy RW) * rumieniec *
artfulrobot

Twój mały fragment kodu PHP uratował moje zdrowie psychiczne, wtyczka PDO Sqlite3 Wordpress zawsze ustawia grupę na odczyt tylko dla jej pliku bazy danych.
Daniel Sokołowski

2

Jeśli prowadzisz wiele witryn, możesz ustawić domyślne uprawnienia grupy za pomocą list kontroli dostępu (ACL) dla katalogu w następujący sposób:

Ustaw setidflagę, aby wymusić na wszystkich nowych plikach dziedziczenie grupy z katalogu:

# chmod g+s wordpress

Dodaj nowe pliki rwdo uprawnień grupy, np. aby www-datamożna było zapisywać do plików SFTP wysyłanych przez użytkownika przesyłającego:

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

Potwierdź, że ACL wygląda tak:

# 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

Utwórz plik, aby potwierdzić, że zadziałał:

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

Czy nie będzie to problematyczne, jeśli aplikacja celowo próbuje zapisywać pliki z ograniczonymi uprawnieniami?
berbt

Wcale nie, aplikacja będzie po prostu pisać ze zmniejszonymi uprawnieniami, które początkowo trochę mnie pomieszały - stackoverflow.com/questions/28454551/…
Daniel Sokolowski

1
Myślę, że w tym poleceniu setfacl --default --modify group:rwx wordpressbrakuje dwukropka. Powinno byćsetfacl --default --modify group::rwx wordpress
Marcos,

2

(Dla Debian Stretch korzystającego z systemd - Dzięki womble!)

Wstaw UMask=0002plik systemowej jednostki serwisowej Apache2, załaduj ponownie jednostkę serwisową, a następnie uruchom ponownie Apache2.

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

$ cat apache2.service
[Jednostka]
Opis = serwer HTTP Apache
After = network.target remote-fs.target nss-lookup.target

[Usługa].
.
.
.
UMask = 0002

$ sudo systemctl daemon-reload
$ sudo systemctl restart apache2

Debian Squeeze nie używał systemd.
womble

Ach tak, pod koniec pierwotnego pytania mówią: Debian Squeeze. Ponieważ pytanie pochodziło z około 8 lat temu i kiedy próbowałem rozwiązać problem związany z tytułem w najnowszym Debianie pod koniec 2019 r., To właśnie to opublikowałem. Myślę, że większość osób poszukujących dziś rozwiązania, w przeciwieństwie do ośmiu lat temu, może skorzystać z mojego rozwiązania, więc zostawię to, co włożyłem. Dziękuję za zwrócenie na to uwagi.
duplexddaann
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.