สคริปต์ PHP ไม่สามารถเข้าถึง / tmp โฟลเดอร์


16

ฉันไม่มี open_basedir, php สามารถเข้าถึง / etc / usr / proc / home เป็นต้น… แต่ไม่ใช่ / tmp

tmpfs ถูกเมาท์บน / tmp (/ tmp type tmpfs (rw)) นั่นเป็นเหตุผลที่ฉันต้องการใช้โฟลเดอร์ / tmp

ไฟล์ของฉันเป็นของ http (ผู้ใช้สำหรับ nginx และ php) และทุกคนสามารถอ่านได้

sudo -u http cat /tmp/file ทำงานอยู่ แต่สิ่งใดก็ตามที่อยู่ในสคริปต์ php ไม่ได้ (เช่น file_exist () หรือไฟล์ ())

แก้ไข: ข้อผิดพลาดแสดงในบันทึก:

PHP Warning:  file(/tmp/ydlw/pid): failed to open stream: No such file or directory in /srv/http/ydlw/status.php on line 267

edit2: ฉันทดสอบปัญหาด้วยวิธีอื่น ฉันทำ

touch("/tmp/boo");
file_exist("/tmp/boo");

และ file_exist คืนค่าจริงเพื่อให้ไฟล์ถูกสร้างขึ้น จากนั้นฉันดูด้านใน / tmp และไม่พบไฟล์ "boo" นั่นคือสิ่งที่ฉันกลัว php ไม่«เห็น»จุดเชื่อมต่อ ทำไมจึงเป็นเช่นนั้นและฉันจะแก้ไขได้อย่างไร


เกิดข้อผิดพลาดจากฟังก์ชั่น PHP เหล่านั้นคืออะไร? บันทึกข้อผิดพลาด PHP แสดงอะไร
Tero Kilkanen

ฉันเพิ่มบันทึกข้อผิดพลาด
eephyne

ไฟล์นี้/tmp/ydlw/pidมีอยู่ใน/tmp? ถ้าไม่เช่นนั้นนั่นคือเหตุผลของข้อผิดพลาด
Tero Kilkanen

-rw-r - r-- 1 http http 343 23 juil 10:12 / tmp / ydlw / pid
eephyne

อะไรคือการกระจาย Linux และรุ่น PHP ของคุณและคุณได้รับ PHP มาจากไหน?
Michael Hampton

คำตอบ:


31

ฉันพบว่าทำไมเอ่อมีคนให้คำแนะนำระดับโลกแก่ฉัน

มันไม่ใช่ความผิดของ php หรือ tmpfs ผู้กระทำผิดถูก systemd PrivateTmpและระบบรักษาความปลอดภัยของเขา

สำหรับผู้ที่ได้รับปัญหาเดียวกันกับที่ฉันทำบริการ php (และอาจจะบางคน) มีPrivateTmpตัวเลือกtrueในสคริปต์ systemd ( /usr/lib/systemd/system)

ในกรณีนั้น/tmpจะมีการสร้างและแยกรายการใหม่จากรายการอื่น การบันทึกข้อมูลภายในทั้งหมดจะถูกลบเมื่อบริการหยุดทำงาน

มันเป็นมาตรการรักษาความปลอดภัยเนื่องจาก/tmpสามารถมีข้อมูลที่ละเอียดอ่อนมากและสคริปต์ PHP ไม่ปลอดภัยเสมอไป

ยกเลิกการใช้งานนี้เพียงแค่คัดลอกภายในสคริปต์/etc/systemd/system(เพื่อหลีกเลี่ยงการเขียนทับของการเปลี่ยนแปลงของคุณหลังจากการปรับปรุง) และชุดที่จะPrivateTmpfalse

นอกจากนี้คุณยังสามารถตั้งสองคนหรือมากกว่าบริการที่จะแบ่งปัน / tmp JoinsNamespaceOfเดียวกันโดยใช้

สำหรับข้อมูลเพิ่มเติม> man systemd.exec


4
ขอบคุณสำหรับสิ่งนั้น! ฉันใช้เวลาทั้งวันในการคิดออก สมองของฉันละลายจากการพยายามอย่างหนักที่จะคิดออก
Marcelo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.