Bagaimana cara menetapkan umask default di Apache pada Debian?

14

Saya perlu file yang dibuat oleh apache2 untuk memiliki umask 002, yaitu grup rw, secara default.

Saya sudah mencoba memasukkan umask 002/ etc / apache2 / envvars dan walaupun skrip ini dijalankan sebagai bagian dari apache start up ( apache2ctl graceful) umask tidak berpengaruh. Agaknya suatu tempat lebih lanjut dalam proses start up (misalnya ketika pengguna diturunkan dari rootke www-data) ada tempat yang lebih baik untuk meletakkan ini.

Saya sudah membaca posting tentang Fedora dan satu menyarankan memasukkan umask /etc/init.d/apache2tetapi tidak satupun dari ini berlaku / bekerja di Debian (Squeeze).

Bisakah kamu menolong?

artfulrobot
sumber
1
Anda harus mencoba me-restart Apache dengan "/etc/init.d/apache2 restart" atau "service apache2 restart"
Jens Bradler
ya, tidak ada yang berhasil.
artfulrobot
Bagaimana Anda membuat file baru (WebDAV, PHP)?
Jens Bradler
Dalam pengujian saya, saya menggunakan file_put_contents (). tetapi kode yang saya coba 'perbaiki' dengan ini adalah modul Kurang Drupal (yang membuat versi cache file Less CSS yang diproses). Masalah khusus saya adalah bahwa saya tidak dapat berjalan drush cc allsebagai pengguna karena kesalahan pada semua file cache yang dibuat www-data ini.
artfulrobot

Jawaban:

11

Untuk memastikan bahwa pengaturan umask berlaku, gunakan tes sederhana dan jangan gunakan aplikasi web lain untuk ini. Mungkin saja aplikasi ini mengubah hak secara independen dari pengaturan umask di Apache.

Skrip PHP pengujian sederhana:

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

Berhati-hatilah karena pengguna www-data memiliki akses tulis ke folder tempat Anda menginstal file uji sederhana ini.

Untuk menjalankan umask baru, periksa apakah file / etc / apache2 / envvars akan digunakan dalam file mulai Apache Anda /etc/init.d/apache2:

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

Setel umask Anda di / etc / apache2 / envvars:

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

Mulai ulang Apache Anda:

service apache2 restart

Periksa perbedaannya:

#> 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
Jens Bradler
sumber
Terima kasih! Bahkan jika itu membuat saya merasa seperti orang idiot untuk membacanya (saya punya oktal yang salah untuk grup rw) * blush *
artfulrobot
Cuplikan PHP kecil Anda menyelamatkan kewarasan saya, plugin PDO Sqlite3 Wordpress akan selalu mengatur grup agar hanya membaca untuk file database itu.
Daniel Sokolowski
2

Jika Anda menjalankan beberapa situs, Anda dapat mengatur izin grup default menggunakan Access Control Lists (ACL) per direktori seperti:

Setel setidflag untuk memaksa semua file baru mewarisi grup dari direktori:

# chmod g+s wordpress

Buat file baru rwuntuk izin grup, mis. sehingga www-datadapat menulis ke file SFTPed oleh pengguna unggahan:

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

Konfirmasikan ACL seperti itu:

# 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

Buat file untuk mengonfirmasi itu berfungsi:

# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test
Daniel Sokolowski
sumber
Tidakkah ini menjadi masalah jika aplikasi mencoba untuk menulis file dengan izin yang dikurangi secara sengaja?
berbt
Tidak sama sekali, aplikasi hanya akan menulis dengan izin berkurang yang sebenarnya membuat saya sedikit bingung pada awalnya - stackoverflow.com/questions/28454551/…
Daniel Sokolowski
1
Saya pikir perintah setfacl --default --modify group:rwx wordpressini tidak ada titik dua. Seharusnyasetfacl --default --modify group::rwx wordpress
Marcos
2

(Untuk Debian Stretch yang menggunakan systemd - Terima kasih womble!)

Masukkan UMask=0002file unit layanan Apache2 systemd, muat ulang unit layanan, dan kemudian restart Apache2.

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

$ cat apache2.service
[Satuan]
Deskripsi = Server HTTP Apache
Setelah = network.target remote-fs.target nss-lookup.target

[Layanan].
.
.
.
UMask = 0002

$ sudo systemctl daemon-reload
$ sudo systemctl restart apache2
duplexddaann
sumber
Debian Squeeze tidak menggunakan systemd.
womble
Ah ya, di akhir tubuh pertanyaan asli mereka mengatakan Debian Squeeze. Karena pertanyaannya adalah ~ 8 tahun yang lalu pada hari ini, dan ketika saya mencoba untuk menyelesaikan masalah yang ditimbulkan dalam judul dengan Debian terbaru pada akhir 2019, itulah yang saya posting. Saya pikir sebagian besar orang mencari solusi hari ini sebagai lawan delapan tahun yang lalu mungkin mendapat manfaat dari solusi saya, jadi saya hanya akan meninggalkan apa yang saya masukkan. Terima kasih telah menunjukkan itu.
duplexddaann