ฉันจะตอบคำถาม rahmu และ MV ด้วยโซลูชันทางเทคนิค ทุกสิ่งที่ตามมาใช้ได้สำหรับระบบที่เหมือน UNIX เท่านั้น
เลื่อนผ่านส่วน chmod / chown สำหรับตัวอย่างโดยใช้ ACL - เครื่องมือที่ทรงพลังกว่าโหมดไฟล์ UNIX
ค้นหาชื่อผู้ใช้เว็บเซิร์ฟเวอร์ของคุณ
ก่อนอื่นคุณจะต้องรู้ชื่อผู้ใช้ที่ใช้งานเว็บเซิร์ฟเวอร์ของคุณ หากคุณกำลังใช้ Apache ก็สามารถapache
หรือhttpd
, www-data
ฯลฯ ในที่สุด Debian เหมือนระบบ Apache www-data
คือ สำหรับ nginx โดยทั่วไปก็เป็นเช่นwww-data
กัน
หากต้องการตรวจสอบลอง:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
ตรวจสอบให้แน่ใจว่าชื่อผู้ใช้คำสั่งนี้ผลตอบแทนเป็นที่สอดคล้องกัน(ตัวอย่างเช่นผมใช้ Nginx 99% ของเวลา แต่คำสั่งนี้ผลตอบแทนที่tomcat7
เป็นเว็บเซิร์ฟเวอร์ Java ผมติดตั้งครั้งเดียว)
ให้สิทธิ์กับเว็บเซิร์ฟเวอร์: การใช้chmod
และchown
การทำchmod
666 หรือ 777 (โซลูชัน go-to สำหรับปัญหาแบบนั้นในเอกสาร / บทแนะนำที่ไม่ดี) สามารถทำให้สิ่งต่าง ๆ ใช้งานได้อย่างน่าอัศจรรย์ แต่ไม่ปลอดภัย การให้สิทธิ์ 666 หรือ 777 จะทำให้สามารถเข้าถึง "others" ดังนั้นไม่ใช่แค่ Apache แต่ยังgrandmother
และ nsa
(หากมีบัญชีผู้ใช้เหล่านั้นอยู่ในเครื่องของคุณ - แต่ไม่จริง ๆ โปรดหลีกเลี่ยงการทำเช่นนี้ยกเว้นว่าเป็นการทดสอบ / การแก้ไขปัญหาเท่านั้น)
มันจะดีกว่าที่จะเจาะจงมากขึ้นและให้สิทธิ์เพียงคุณและ Apache เปลี่ยนกลุ่มไฟล์ของคุณเพื่อให้การควบคุมไฟล์ของคุณกับเว็บเซิร์ฟเวอร์เป็นไปอย่างสมบูรณ์ หากต้องการทำสิ่งนี้ให้เปลี่ยนเจ้าของซ้ำ:
chown -R www-data:www-data your/folder/
แต่ส่วนใหญ่คุณอาจต้องการเข้าถึงไฟล์ของคุณอย่างเต็มที่โดยการเปลี่ยนกลุ่มเท่านั้น:
chown -R yourusername:www-data your/folder/
จากนั้นทำสิ่งที่เหมาะสมchmod
เพื่อให้กลุ่มwww-data
มีสิทธิ์เช่นเดียวกับคุณ ตัวอย่างเช่นหากโหมดปัจจุบันคือ 640 (6 สำหรับคุณ, 4 สำหรับ www-data, 0 สำหรับผู้อื่น, แปลเป็น -rw-r -----)ให้ตั้งเป็น 660 (6 สำหรับคุณ, 6 สำหรับ www- ข้อมูล, 0 สำหรับคนอื่น ๆ ที่จะแปล -rw-RW ----) ดูคำตอบของ rahmu เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับโหมดไฟล์มันเป็นกลไกที่เก่า แต่สวยงาม
เพื่อหลีกเลี่ยงการจัดการกับตัวเลขอาร์เคนด้วยchmod
คุณสามารถใช้ไวยากรณ์นี้:
chmod -R g+rw your/folder/
มันหมายถึง "ไปยังกลุ่ม ( g
), เพิ่ม ( +
) อ่านและเขียน ( rw
) สิทธิ์ในโฟลเดอร์your/folder/
ซ้ำ ( -R
)"
ใน 90% ของกรณีนี้ควรจะเพียงพอ
วิธีที่ฉันชอบ: การใช้ ACL (Access Control List)
บางครั้งวิธีแก้ปัญหาแรกไม่เพียงพอ ฉันจะใช้ตัวอย่างของSymfony Frameworkที่บันทึกและแคชข้อมูลจำนวนมาก ดังนั้นจึงต้องการการเข้าถึงเพื่อเขียนไปยังโฟลเดอร์ที่เหมาะสม
และวิธีchmod
/ chown
อาจไม่เพียงพอเมื่อคุณใช้ควบคู่กับ Symfony Console ใน CLI (ภายใต้บัญชีผู้ใช้ของฉัน) และเว็บ (ผู้ใช้เว็บเซิร์ฟเวอร์) นี่เป็นสาเหตุของปัญหามากมายเนื่องจาก Symfony กำลังแก้ไขสิทธิ์อย่างต่อเนื่อง
ในกรณีนี้เราจะใช้ ACL (Access Control List) ซึ่งเป็นวิธีการขั้นสูงในการจัดการสิทธิ์บนระบบ UNIX หลายระบบ
นี่คือคำสั่งที่ได้รับจากเอกสาร Symfony อย่างเป็นทางการ ( โปรดเปลี่ยนapp/cache
และapp/logs
ต้องการของคุณ ):
บนระบบที่รองรับchmod +a
(เช่นไม่ใช่ Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
บนระบบที่ไม่รองรับchmod +a
(ทั่วไป)
คุณจะต้องใช้setfacl
เครื่องมือ อาจจะติดตั้งไว้ในระบบของคุณเป็นค่าเริ่มต้นดังนั้นให้ลองsetfacl -v
ดูว่าคำสั่งนั้นมีให้หรือไม่
หากคำสั่งไม่พร้อมใช้งานและคุณใช้ Ubuntu 14.04+ คุณเพียงแค่ต้องติดตั้งเครื่องมือ:
sudo apt install acl
มิฉะนั้นให้ปฏิบัติตามเอกสารระบบปฏิบัติการของคุณเพราะคุณอาจต้องเปลี่ยนวิธีติดตั้งพาร์ติชันของคุณ ( เอกสาร Ubuntu ที่นี่ )
และที่นั่นเรา:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
ฉันไม่เคยมีปัญหากับวิธีนี้พอใจหรือคืนเงินของคุณ