Score:0

www-data user เปิดไฟล์เขียน php ไม่ได้

ธง bj

ฉันมีเซิร์ฟเวอร์ apache ที่ทำงานเป็น www-data บน Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-97-generic x86_64) ในไฟล์ php บรรทัดต่อไปนี้ล้มเหลวโดยมีข้อผิดพลาด: การอนุญาตถูกปฏิเสธ

$f=fopen("detekst.txt","a+");

ดูที่สิทธิ์:

ลา -al detekst.txt
-rw-rw-r-- 1 L146584 leerlingen 1364 15 ก.พ. 15:12 detekst.txt

และตรวจสอบกลุ่ม

กลุ่ม www-ข้อมูล 
www-data : www-data leerlingen

ฉันยังยืนยันโดยใช้ exec('whoami'); www-data ที่เรียกใช้ php

การใช้โปรแกรมแก้ไขข้อความ สมาชิกคนอื่นของ leerlingen สามารถเปิดไฟล์เพื่อเขียนได้

ดังนั้นฉันจึงงงจริง ๆ ทำไม www-data ที่เป็นสมาชิกของ leerlingen ไม่สามารถเปิดไฟล์ได้

ถ้าฉันเปลี่ยนการอนุญาตของ detekst.txt เป็น 0666:

-rw-rw-rw- 1 L146584 leerlingen 1364 15 ก.พ. 15 15:12 detekst.txt

รหัส php ทำงานได้ดี !!

นอกจากนี้เมื่อกลับไปที่การอนุญาตไฟล์ 664 และเปลี่ยนกลุ่มเป็น www-data ทั้งหมดทำงานได้ดี

-rw-rw-r-- 1 L146584 www-data 1478 ก.พ. 58 15:45 detekst.txt

ฉันทำอะไรผิดที่นี่?

Score:0
ธง ru

กลุ่มของคุณไม่ได้เป็นเจ้าของไฟล์ที่เป็นปัญหา www-ข้อมูล เมื่อคุณพยายามใช้ไฟล์ดังกล่าวเป็นครั้งแรก www-ข้อมูล ผู้ใช้และกลุ่มไม่มีสิทธิ์ในการเขียนเมื่อ 644 หรือ 664 เป็นสิทธิ์ในไฟล์. ถ้า www-ข้อมูล ไม่มีผู้ใช้หรือกลุ่มเป็นเจ้าของไฟล์ ไฟล์นี้จัดอยู่ในหมวดหมู่ "อื่นๆ" สำหรับสิทธิ์ซึ่งเป็นแบบอ่านอย่างเดียว (4 = อนุญาตแบบอ่านอย่างเดียวในภาษา chmod)

การแก้ไขนี้คือการเปลี่ยนความเป็นเจ้าของกลุ่มตามที่คุณเห็น www-ข้อมูล จากนั้นตรวจสอบว่ามีการอนุญาต 664 อย่างน้อยเพราะนั่นเพิ่มสิทธิ์ในการเขียน

อีกวิธีหนึ่งคือ เพิ่ม www-data ลงในกลุ่มอื่น จากนั้นคุณรีบูตเซิร์ฟเวอร์ของคุณเพื่อให้แน่ใจว่าบริการทั้งหมดเริ่มต้นใหม่ อย่างถูกต้อง ด้วยสิทธิ์ใหม่ ใน Linux บริการเริ่มต้นแล้วและจะไม่สืบทอดการเป็นสมาชิกกลุ่มสิทธิ์ใหม่จนกว่าบริการจะเริ่มต้นใหม่ทั้งหมดภายใต้เซสชันใหม่ของ 'ผู้ใช้' นั้น ไม่ว่าจะเป็นผู้ใช้ดีมอนระบบหรือไม่ก็ตาม ดังนั้นการรีบูตจะช่วยรีเฟรชข้อมูลนั้นเมื่อเริ่มต้นเว็บเซิร์ฟเวอร์ครั้งถัดไป

John Val avatar
bj flag
ขอบคุณโทมัส แต่ www-data เป็นสมาชิกของกลุ่ม leerlingen แล้วทำไม www-data ถึงไม่มีความเป็นเจ้าของ? สมาชิกคนอื่น ๆ ของ leerlingen มีสิทธิ์ในการเขียน และฉันไม่ต้องการให้สมาชิกทั้งหมดของ leerlingen เป็นสมาชิกของกลุ่ม www-data
ru flag
คุณไม่ควรใส่ www-data ลงในกลุ่มอื่นนอกเหนือจาก www-data เพราะไม่เช่นนั้นระบบจะให้สิทธิ์ในสิ่งที่คุณอาจไม่ต้องการ หากคุณเพิ่ม www-data ลงในกลุ่มแต่ไม่ได้รีสตาร์ทเซิร์ฟเวอร์เพื่อให้บริการทั้งหมดรีบูตด้วยชุดสิทธิ์ใหม่ เซิร์ฟเวอร์จะไม่สามารถเข้าถึงได้
John Val avatar
bj flag
ตอนนี้ฉันแก้ไขปัญหาโดยใช้ acl โดยเพิ่ม www-data เป็นผู้ใช้พิเศษให้กับไฟล์ทั้งหมดในแผนผังไดเร็กทอรี
ru flag
@JohnVal ACL มีผลทันที ใช่ แต่แทนที่ ACL เพียงแค่เริ่มบริการของคุณใหม่ด้วยการรีบูต ซึ่งจะทำให้แน่ใจว่า `www-data` สืบทอดสิทธิ์ที่เหมาะสมที่ได้รับมอบหมาย
John Val avatar
bj flag
ขอบคุณอีกครั้ง โทมัส บางทีการรีบูตหรือรีสตาร์ทบริการ apache2 อาจจะแก้ปัญหาได้ แต่ฉันไม่ได้ลอง มีการแชร์ไดเร็กทอรีโดยใช้ Samba และแม้แต่การสร้างไฟล์ใหม่ก็ทำให้ฉันมีผู้ใช้ www-data พิเศษโดยใช้ acl ดังนั้นฉันจึงเป็นคนที่มีความสุขในตอนนี้ ขอให้คุณดี
John Val avatar
bj flag
โทมัส ฉันจะรีบูต :)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา