ไม่สามารถเขียนไฟล์บน CentOS


2

ฉันมี VPS ที่ทำงานบน CentOS 6 และ apache2 เป็นเว็บเซิร์ฟเวอร์ ฉันมีสคริปต์ PHP หลายตัวที่ทำงานในเซิร์ฟเวอร์ของฉันและทุกอย่างราบรื่นยกเว้นการเขียนไฟล์ ด้วยเหตุผลบางอย่างสคริปต์ PHP ของฉันไม่สามารถเขียนหรือสร้างไฟล์ได้

ฉันใช้ตำแหน่งเริ่มต้นซึ่งเป็นเจ้าของโดย/var/www/html/root:root

ฉันได้ลอง CHMODing ไดเรกทอรีและไฟล์ชั่วคราวไม่สำเร็จ
ฉันยังลองตั้งค่าการอนุญาตของโฟลเดอร์เป็น 777 ผลลัพธ์เดียวกัน - ไม่สำเร็จ

มันค่อนข้างแปลกและฉันเป็นผู้เริ่มต้นเมื่อพูดถึงการจัดการ VPS

ฉันเพิ่มบรรทัดบันทึกข้อผิดพลาด PHP ไปที่ php.ini และบอกให้เก็บบันทึกไว้ /var/log/


1) ID ผู้ใช้ใดที่สคริปต์ PHP ทำงาน 2) คุณพยายามเขียนไดเรกทอรีใด 3) Chmod 777 เป็นความคิดที่แย่จริงๆ โปรดเลิกทำ 4) ข้อผิดพลาดใด ๆ ในบันทึก?
Hennes

1) ฉันไม่รู้ฉันจะรู้ได้อย่างไร 2) / var / www / html 3) มันเป็นแค่การลองฉันจะยกเลิกทันที 4) ไม่ถ้าบันทึกอยู่ใน / var / log / ดังนั้นจะไม่มีบันทึกข้อผิดพลาดเลย
ยกเลิก

1) เริ่มต้นด้วยพื้นฐาน: คุณใช้เว็บเซิร์ฟเวอร์ชนิดใด NGIX, xshttp, apache, ... ? 2) ขึ้นอยู่กับเซิร์ฟเวอร์ใดมันตั้งค่าได้อย่างไร? (มักจะเป็นผู้ใช้ 'ไม่มีใคร' หรือผู้ใช้เฉพาะที่มีสิทธิ์ จำกัด อย่างชัดเจนเพื่อ จำกัด อันตรายที่อาจเกิดขึ้นหากคุณถูกแฮ็ก (ตรวจสอบผู้ใช้ :: กลุ่มของ / var / www / html อาจให้คำแนะนำที่นี่) 4) ตำแหน่งบันทึกแตกต่างกันไป เซิร์ฟเวอร์ ดังนั้นมันจึงค้างอยู่ในวันที่ 1
Hennes

1) ฉันใช้ apache2 ขออภัยที่ไม่ได้กล่าวถึง 2) ปรากฏว่ารูทเป็นเจ้าของ/var/www/html(ฉันใช้la -lเพื่อตรวจสอบว่ามีสองคอลัมน์พูดว่า "รูท") 3) ฉันเพิ่มบรรทัดข้อผิดพลาดของ PHP ลงใน php.ini และฉันบอกให้เก็บการเข้าสู่ระบบ/var/log/
ยกเลิก

2
เกิดข้อผิดพลาดอะไรขึ้นเมื่อคุณพยายามใช้ php เพื่อเขียนไฟล์
ลอเรนซ์

คำตอบ:


2

CentOS เป็นหนึ่งในระบบปฏิบัติการเหล่านั้นซึ่งมักจะมาพร้อมกับ SELinux บางรูปแบบ มีสงครามศักดิ์สิทธิ์หลายอย่างว่าการใช้ SELinux นั้นเป็นของดีหรือของเสีย แต่เป็นทางเลือกที่คุณจะต้องทำ

หากคุณยังคงเป็นผู้เริ่มต้นฉันขอแนะนำให้คุณใช้เวลากับ SELinux ที่ปิดอยู่และจากนั้นเมื่อคุณมีทุกอย่างที่ทำงานอยู่คุณสามารถเปิดใช้งานและเลือกกำหนดค่าใหม่ได้

หมายเหตุ: วิธีการทำสิ่งต่าง ๆ ในโลกแห่งความเป็นจริงนั้นตรงกันข้าม: เริ่มจากระบบที่ถูกล็อคไว้อย่างสมบูรณ์และทีละอย่างจะช่วยให้สิ่งที่คุณต้องการ


ขอบคุณมากสำหรับสิ่งนี้ - ฉันต้องย้ายเซิร์ฟเวอร์ Debian ไปยัง CentOS และสำหรับชีวิตของฉันฉันไม่สามารถหาสาเหตุที่การกำหนดค่าเดียวกันที่แน่นอนไม่ทำงาน (ฉันได้รับข้อผิดพลาดการอนุญาตไฟล์กับ PHP ทั่ว สถานที่) จนกว่าฉันจะปิด SELinux ... หากมีประโยชน์สำหรับทุกคนที่อ่านข้อความนี้ฉันได้ปฏิบัติตามคำแนะนำที่นี่เพื่อปิดมัน
Dave Hollingworth

0

คุณไม่ควรใช้/var/www/htmlเพื่อจัดเก็บไฟล์ของคุณ ไม่ได้มีไว้สำหรับใช้เป็นที่เก็บข้อมูลชั่วคราว สคริปต์ PHP ควรส่งคืน html ที่สร้างขึ้นไม่ใช่เขียนไปยังไฟล์

หากคุณต้องการจัดเก็บข้อมูลที่ใดที่หนึ่งจริงๆคุณควรสร้างโฟลเดอร์ใหม่ที่มีสิทธิ์ที่เหมาะสม ใน linux มักจะnobodyเป็นบัญชีผู้ใช้ที่ทำงาน apache แต่ก็อาจเป็นข้อมูล www หรือเพียงแค่ apache คุณสามารถให้สิทธิ์การเข้าถึง apache ในโฟลเดอร์นั้นโดย:

chown nobody:nobody <dirname>

การตั้งค่าการอนุญาตจำนวนมากเกินไปในโฟลเดอร์อาจทำให้เกิดข้อผิดพลาดได้หาก apache ถูกตั้งค่าเพื่อป้องกันการเรียกใช้ไฟล์ด้วยการอนุญาต 777 (โลกที่เขียนได้)

วิธีที่ง่ายมากที่จะทำให้ทุกอย่างถูกต้องคือให้ PHP สร้างไดเรกทอรีเองตั้งแต่แรก:

<?php
 $dir = 'path-to-folder/myFolder';
 if ( !file_exists($dir) )
   mkdir ($dir, 0777);
 file_put_contents ($dir.'/test.txt', 'Hello World');

ฉันใช้เว็บไซต์โฮสต์รูปภาพและฉันต้องการเก็บรูปภาพทั้งหมดไว้ในโฟลเดอร์ ฉันมักจะเก็บบันทึกไว้ในไฟล์ข้อความ. log แทนฐานข้อมูลและดูเหมือนว่าฉันจะไม่สามารถผนวกข้อความเข้ากับไฟล์ได้
ยกเลิก

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