Debian'da Apache'de varsayılan umask'ı nasıl ayarlarım?


14

002Varsayılan olarak umask , yani grup rw için apache2 tarafından oluşturulan dosyalara ihtiyacım var .

umask 002/ Etc / apache2 / envvars koyarak denedim ve bu komut dosyası apache start ( apache2ctl graceful) bir parçası olarak yürütülmesine rağmen umask etkisi yoktur. (Kullanıcı den düşürüldüğnde örn Tahminen yerde daha da başlangıç sürecinde rootkadar www-data) bu koymak için bir yere daha iyi var.

Fedora ve umask koymayı öneren bir yazı okudum /etc/init.d/apache2ama bunların hiçbiri Debian'da (Squeeze) geçerli / çalışmıyor.

Yardım edebilir misin?


1
Apache'yi "/etc/init.d/apache2 restart" veya "service apache2 restart" ile yeniden başlatmayı
denemelisiniz

Evet, ikisi de işe yaramadı.
artfulrobot

Nasıl yeni dosyalar oluşturabilirsiniz (WebDAV, PHP)?
Jens Bradler

Testimde file_put_contents () kullanıyorum. ama bu ile 'düzeltmek' çalışıyorum kod Drupal daha az modülü (işlenmiş daha az CSS dosyalarının önbelleğe alınmış sürümlerini oluşturur). Benim özel sorunum drush cc allbu www-veri oluşturulan önbellek dosyalarında hata çünkü benim kullanıcı olarak çalışamaz olmasıdır.
artfulrobot

Yanıtlar:


11

Umask ayarının etkili olduğundan emin olmak için lütfen basit bir test kullanın ve bunun için başka bir web uygulaması kullanmayın. Bu uygulamanın hakları Apache'nin umask ayarından bağımsız olarak değiştirmesi olabilir.

Basit test PHP betiği:

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

Www-data kullanıcısının bu basit sınama dosyasını yüklediğiniz klasöre yazma erişimi olduğundan emin olun.

Yeni umask'ın çalışmasını sağlamak için /etc/init.d/apache2 dosyasında / etc / apache2 / envvars dosyasının kullanılıp kullanılmayacağını kontrol edin:

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

Umask'inizi / etc / apache2 / envvars dizininde ayarlayın:

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

Apache'nizi yeniden başlatın:

service apache2 restart

Farkı kontrol edin:

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

Teşekkür ederim! Beni okumak için bir aptal gibi hissettirse bile (grup rw için yanlış sekizli vardı) * allık *
artfulrobot

Küçük PHP snippet'im aklımı kurtardı, PDO Sqlite3 Wordpress eklentisi her zaman grubu sadece veritabanı dosyası için okumaya ayarlayacaktır.
Daniel Sokolowski

2

Birden fazla site çalıştırırsanız, dizin başına Erişim Kontrol Listeleri'ni (ACL) kullanarak varsayılan grup iznini aşağıdaki gibi ayarlayabilirsiniz:

setidTüm yeni dosyaları dizinden dizinden devralmaya zorlamak için bayrağı ayarlayın :

# chmod g+s wordpress

Yeni dosyaların rwgrup izinlerine sahip olmasını sağlayın, ör. böylece www-datayükleme kullanıcısı tarafından SFTP dosyalarına yazılabilir:

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

ACL'nin aşağıdaki gibi olduğunu doğrulayın:

# 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

Çalıştığını onaylamak için bir dosya oluşturun:

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

Uygulama bilerek izin verilmeyen dosyalar yazmaya çalışıyorsa bu sorun yaratmayacak mı?
16:22

Hiç de değil, uygulama sadece başlangıçta beni biraz karıştırdı azaltılmış izinlerle yazacak - stackoverflow.com/questions/28454551/…
Daniel Sokolowski

1
Bence bu komutta setfacl --default --modify group:rwx wordpressiki nokta üst üste yok. O olmalısetfacl --default --modify group::rwx wordpress
Marcos

2

(Systemd kullanan Debian Stretch için - Teşekkürler womble!)

UMask=0002Apache2 systemd servis birimi dosyasını koyun , servis birimini yeniden yükleyin ve ardından Apache2'yi yeniden başlatın.

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

$ cat apache2.service
[Birim]
Açıklama = Apache HTTP Sunucusu
Sonra = network.target remote-fs.target nss-lookup.target

[Hizmet].
.
.
.
= 0002 UMask

$ sudo systemctl daemon-reload
$ sudo systemctl apache2'yi yeniden başlat

Debian Squeeze sistemd kullanmadı.
womble

Ah evet, orjinal sorunun sonunda Debian Squeeze diyorlar. Soru bugün itibariyle ~ 8 yıl önce olduğu gibi ve başlıkta ortaya çıkan sorunu 2019'un sonlarından itibaren en son Debian ile çözmeye çalıştığım için, ben de bunu yayınladım. Sanırım bugün sekiz yıl öncesine kıyasla bir çözüm arayan çoğu insan benim çözümümden faydalanabilir, bu yüzden benim koyduğum şeyi bırakacağım. Bunu belirttiğiniz için teşekkürler.
duplexddaann
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.