การตั้งค่าการอนุญาตที่ถูกต้องสำหรับการอัพโหลดไฟล์


12

ฉันมีสคริปต์ php ที่อัปโหลดไฟล์ไปยังไดเรกทอรีที่เรียกว่า "อัพโหลด" วิธีเดียวที่ฉันจะได้รับการอัปโหลดเพื่อทำงานคือถ้าฉัน:

chmod 777 uploads

ฉันรู้ว่ามันไม่ถูกต้อง แต่ฉันไม่รู้ว่าฉันควรทำอย่างไรเพื่อให้มันใช้งานได้

ข้อมูลเซิร์ฟเวอร์: T1-Micro Amazon Linux AMI 2013.03 บน Amazon EC2

คำถาม:

  • ฉันจะทราบได้อย่างไรว่าผู้ใช้ต้องการเข้าถึง ... เช่นชื่อผู้ใช้ของ apache หรือเว็บเซิร์ฟเวอร์คืออะไร

  • ฉันต้องให้สิทธิ์การเข้าถึงในระดับใดและฉันจะใช้คำสั่งใดในการทำเช่นนั้น

ขอบคุณ!

แก้ไข: ฉันพบคำตอบมากมายเกี่ยวกับสแต็คล้นซึ่งฉันจะทำการวิจัย ตัวอย่างเช่น

/programming/3642241/php-file-upload-permissions

/programming/10842880/setting-permissions-in-php-on-server

/programming/8948537/permission-denied-when-attempting-to-upload-file-with-php

ขอบคุณ

คำตอบ:


20

ลองใช้:

ps -ef | grep apache

และดูคอลัมน์ซ้ายสุดที่สอดคล้องกับเซิร์ฟเวอร์ Apache นี่คือผู้ใช้ที่กำลังเรียกใช้ Apache และโดยการสืบทอดยังเป็น PHP

เปลี่ยนความเป็นเจ้าของของไดเรกทอรีอัปโหลดเป็นผู้ใช้นี้และ จำกัด สิทธิ์เล็กน้อยเช่นหากผู้ใช้เว็บเซิร์ฟเวอร์เป็นwww-dataของกลุ่มชื่อเดียวกัน (ใช้เส้นทางตัวอย่างของ/var/www/uploads):

sudo chown www-data:www-data /var/www/uploads
sudo chmod 755 /var/www/uploads

(หรือสิทธิ์ใด ๆ ที่คุณต้องการในอินสแตนซ์นี้) ฉันใช้sudoในคำสั่งตัวอย่าง - ฉันไม่รู้ว่าระบบ EC2 ได้รับการตั้งค่าในเรื่องนี้อย่างไรเพื่อรับสิทธิ์ superuser

หากคุณได้อัปโหลดไฟล์ / ไดเรกทอรีแล้วคุณอาจต้องการเปลี่ยนความเป็นเจ้าของและการอนุญาตในไฟล์เหล่านั้นเช่นกัน ในการทำเช่นนี้ไปจาก777การอนุญาตที่สมเหตุสมผลมากขึ้นคุณสามารถเรียกใช้:

sudo chown -R www-data:www-data /var/www/uploads
sudo chmod -R 755 /var/www/uploads
sudo find /var/www/uploads -type f -exec chmod -x {} \;

อย่าเรียกใช้คำสั่ง "สุ่มสี่สุ่มห้า" หากคุณไม่เข้าใจแต่ละส่วนของคำสั่ง ตรวจสอบmanหน้าหากมีสิ่งใดที่ไม่ชัดเจน (ควรตรงไปตรงมามาก)


ขอบคุณ สิ่งนี้ช่วยได้มาก apache เป็นผู้ใช้ sudo chown และ sudo chmod ทำงานทั้งสองอย่าง
fun_programming

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