ฉันจะตั้งค่า umask เริ่มต้นใน Apache บน Debian ได้อย่างไร


14

ฉันต้องการไฟล์ที่สร้างโดย apache2 เพื่อให้มี umask 002เช่น group rw โดยค่าเริ่มต้น

ฉันได้ลองใส่umask 002ใน / etc / apache2 / envvars และแม้ว่าสคริปต์นี้จะได้รับการดำเนินการเป็นส่วนหนึ่งของการเริ่มต้น apache ( apache2ctl graceful) umask ไม่มีผลใด ๆ น่าจะมีอีกที่หนึ่งในกระบวนการเริ่มต้น (เช่นเมื่อผู้ใช้ถูกลดระดับจากrootเป็นwww-data) มีบางสิ่งที่ดีกว่าในการวางสิ่งนี้

ฉันได้อ่านโพสต์เกี่ยวกับ Fedora และมีคนแนะนำให้ใส่ umask ใน/etc/init.d/apache2แต่ไม่ได้ใช้ / ทำงานใน Debian (Squeeze)

คุณช่วยได้ไหม


1
คุณควรลองรีสตาร์ท Apache ด้วย "/etc/init.d/apache2 restart" หรือ "service apache2 restart"
Jens Bradler

ใช่ไม่ทำงาน
artfulrobot

คุณสร้างไฟล์ใหม่ (WebDAV, PHP) ได้อย่างไร?
Jens Bradler

ในการทดสอบของฉันฉันใช้ file_put_contents () แต่รหัสที่ฉันพยายามจะ 'แก้ไข' ด้วยโมดูลนี้คือ Less Less ของ Drupal (ซึ่งสร้างไฟล์แคช Less Less ที่ได้รับการประมวลผลในเวอร์ชันแคช) ปัญหาเฉพาะของฉันคือฉันไม่สามารถเรียกใช้drush cc allในฐานะผู้ใช้ของฉันได้เพราะมันเกิดข้อผิดพลาดกับไฟล์แคชที่ www-data เหล่านี้สร้างขึ้น
artfulrobot

คำตอบ:


11

เพื่อให้แน่ใจว่าการตั้งค่า umask จะมีผลโปรดใช้การทดสอบอย่างง่ายและอย่าใช้แอปพลิเคชันเว็บอื่นสำหรับสิ่งนี้ อาจเป็นกรณีที่แอปพลิเคชันเหล่านี้เปลี่ยนสิทธิ์เป็นอิสระจากการตั้งค่า umask ของ Apache

สคริปต์ 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";
}
?>

โปรดระวังว่าผู้ใช้ www-data มีสิทธิ์การเขียนไปยังโฟลเดอร์ที่คุณติดตั้งไฟล์ทดสอบอย่างง่ายนี้

หากต้องการให้ umask ใหม่รันอยู่ให้ตรวจสอบว่าไฟล์ / etc / apache2 / envvars จะถูกใช้ภายในไฟล์เริ่มต้น Apache ของคุณ /etc/init.d/apache2:

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

ตั้ง umask ของคุณใน / etc / apache2 / envvars:

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

รีสตาร์ท Apache ของคุณ:

service apache2 restart

ตรวจสอบความแตกต่าง:

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

ขอขอบคุณ! แม้ว่ามันจะทำให้ฉันรู้สึกเหมือนคนงี่เง่าที่จะอ่านมัน (ฉันมี octal ผิดสำหรับกลุ่ม rw) * อาย *
artfulrobot

ตัวอย่าง PHP เล็ก ๆ ของคุณบันทึกสติของฉันปลั๊กอิน PDO Sqlite3 Wordpress จะตั้งกลุ่มให้อ่านเป็นไฟล์ฐานข้อมูลเท่านั้น
Daniel Sokolowski

2

หากคุณเรียกใช้หลายไซต์คุณสามารถตั้งค่าการอนุญาตกลุ่มเริ่มต้นโดยใช้ Access Control Lists (ACL) ต่อไดเรกทอรีเช่น:

ตั้งค่าsetidสถานะเพื่อบังคับให้ไฟล์ใหม่ทั้งหมดเพื่อสืบทอดกลุ่มจากไดเรกทอรี:

# chmod g+s wordpress

ทำให้ไฟล์ใหม่มีrwสิทธิ์กลุ่มเช่น เพื่อให้ www-dataสามารถเขียนไปยังไฟล์ SFTPed โดยผู้ใช้อัปโหลด:

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

ยืนยันว่า ACL เป็นเช่นนั้น:

# 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

สร้างไฟล์เพื่อยืนยันว่าใช้งานได้:

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

สิ่งนี้จะเป็นปัญหาหรือไม่หากแอปพลิเคชันพยายามเขียนไฟล์ที่มีการอนุญาตลดวัตถุประสงค์
berbt

ไม่เลยแอปพลิเคชันจะเขียนด้วยสิทธิ์ที่ลดลงซึ่งทำให้ฉันสับสนเล็กน้อยในตอนแรก - stackoverflow.com/questions/28454551/…
Daniel Sokolowski

1
ฉันคิดว่าคำสั่งsetfacl --default --modify group:rwx wordpressนี้ไม่มีโคลอน มันควรจะเป็นsetfacl --default --modify group::rwx wordpress
มาร์กอส

2

(สำหรับ Debian Stretch ที่ใช้ systemd - ขอบคุณ womble!)

ใส่UMask=0002ในไฟล์หน่วยบริการ system2 Apache2 โหลดหน่วยบริการแล้วรีสตาร์ท Apache2

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

$ cat apache2.service
[Unit]
คำอธิบาย = เซิร์ฟเวอร์ Apache HTTP
หลังจาก = network.target remote-fs.target nss-lookup.target

[บริการ].
.
.
.
umask = 0002

$ sudo systemctl daemon-reload
$ sudo systemctl รีสตาร์ท apache2

Debian Squeeze ไม่ได้ใช้ systemd
womble

อ่าใช่ในตอนท้ายของเนื้อความของคำถามดั้งเดิมพวกเขาพูดว่า Debian Squeeze เป็นคำถามที่มาจาก ~ 8 ปีที่แล้ว ณ วันนี้และในขณะที่ฉันพยายามที่จะแก้ปัญหาที่เกิดขึ้นในชื่อกับ Debian ล่าสุด ณ ปลายปี 2019 นั่นคือสิ่งที่ฉันโพสต์ ฉันคิดว่าคนส่วนใหญ่ที่กำลังมองหาวิธีแก้ปัญหาในวันนี้เมื่อเทียบกับแปดปีที่แล้วอาจได้ประโยชน์จากวิธีแก้ปัญหาของฉันดังนั้นฉันจะทิ้งสิ่งที่ฉันใส่ไว้ขอบคุณที่ชี้ให้เห็น
duplexddaann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.