การอนุญาตให้ใช้โฟลเดอร์ / ไฟล์ Magento 2


61

ฉันสงสัยว่าการอนุญาตอาจทำให้เกิดความสับสนในการติดตั้ง Magento 2 ของฉัน ในรุ่นเก่าฉันจะเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างโฟลเดอร์ 755 และไฟล์ 644:

find . -type f -exec chmod -c 644 {} \; && find . -type d -exec chmod -c 755 {} \;

คุณช่วยบอกฉันทีว่าไฟล์และโฟลเดอร์ที่ถูกต้องสำหรับ Magento 2 มีความแตกต่างกันอย่างไร? นอกจากนี้หากมีบางโฟลเดอร์หรือไฟล์บางไฟล์ที่ต้องการสิทธิ์ที่แตกต่างกัน


ลองใช้ 777 สิทธิ์ก่อนที่จะสำรองข้อมูล
วีโอไอพี 2

ตัวจัดการ PHP ของเซิร์ฟเวอร์ของฉันคือ suPHP และฉันไม่ต้องการมอบหมาย 777 ให้กับทุกสิ่งเพราะจะเปิดเว็บไซต์ของฉันให้กับทุกคน มีการอนุญาตเฉพาะเพิ่มเติมที่สามารถกำหนดได้หรือไม่?
Neekoy

Magento ได้รับอนุญาตให้ใช้งานโฟลเดอร์ในโฟลเดอร์ 775 และตั้งค่าอนุญาตไฟล์เป็น 644
Rishabh Rk Rai

FYI ถ้า magento 2 อยู่ในไดเรกทอรี "home" var/cacheและpub/staticต้องการ suid bits set ฉันใช้: find var/cache -type d -print0 | xargs -0 sudo chmod 1775
Chris K

คำตอบ:


117

คุณสามารถดูhttp://devdocs.magento.com/

สิ่งสำคัญ:

เจ้าของระบบไฟล์ Magento: ต้องมีการควบคุมเต็มรูปแบบ (อ่าน / เขียน / ดำเนินการ) ของไฟล์และไดเรกทอรีทั้งหมด

ต้องไม่เป็นผู้ใช้เว็บเซิร์ฟเวอร์ ควรเป็นผู้ใช้อื่น

ผู้ใช้เว็บเซิร์ฟเวอร์ต้องมีสิทธิ์เขียนเพื่อเข้าถึงไฟล์และไดเรกทอรีต่อไปนี้: var app / etc pub (และอาจสร้างขึ้นใหม่ใน 2.2.1 :)

นอกจากนี้กลุ่มของเว็บเซิร์ฟเวอร์จะต้องเป็นเจ้าของระบบไฟล์ Magento เพื่อให้ผู้ใช้ Magento (ผู้ที่อยู่ในกลุ่ม) สามารถแบ่งปันการเข้าถึงไฟล์กับผู้ใช้เว็บเซิร์ฟเวอร์ (ซึ่งรวมถึงไฟล์ที่สร้างโดย Magento Admin หรือยูทิลิตี้บนเว็บอื่น ๆ )

เราขอแนะนำให้ตั้งค่าการอนุญาตดังนี้:

All directories have 770 permissions.

770 permissions give full control (that is, read/write/execute) to the owner and to the group and no permissions to anyone else.

All files have 660 permissions.

660 permissions mean the owner and the group can read and write but other users have no permissions.

คุณควรตั้งค่าเป็นร้องแนะนำ

cd <your Magento install dir> 

find . -type f -exec chmod 644 {} \;                        // 644 permission for files

find . -type d -exec chmod 755 {} \;                        // 755 permission for directory 

find ./var -type d -exec chmod 777 {} \;                // 777 permission for var folder    

find ./pub/media -type d -exec chmod 777 {} \;

find ./pub/static -type d -exec chmod 777 {} \;

chmod 777 ./app/etc

chmod 644 ./app/etc/*.xml

chown -R :<web server group> .

chmod u+x bin/magento

ฉันหวังว่านี่จะช่วยคุณได้


3
ใช้งานได้กับฉัน\;เท่านั้นเช่น:find ./var -type d -exec chmod 777 {} \;
bpoiss

1
แต่นี่เป็นโหมดการพัฒนา สำหรับการผลิตมันควรเป็นแบบอ่านอย่างเดียว - ไม่มีความคิดว่ามันจะทำงานอย่างไร
อเล็กซ์

3
ฉันคิดว่าคุณต้องchmod u+x bin/magentoสามารถใช้คำสั่งคอนโซลได้เช่นกัน
Volvox

42
เพื่อน ๆ จะไม่ปล่อยให้เพื่อน 777
Darren Felton

6
app / etc 777> เยี่ยมมาก แฮกง่าย app / etc มีข้อมูลฐานข้อมูลของคุณ
CompactCode

19

ในบางกรณีที่ไม่ค่อยเกิดขึ้นคุณไม่สามารถใช้ 770 และ 660 เช่น @MagenX พูดว่า 755 และ 644 อาจเป็นสิทธิ์ที่คุณต้องการ (ผู้ใช้ Fast-CGI บางคนที่ฉันเดา)

ดังนั้นในกรณีนี้คุณเรียกใช้:

find . -type d -exec chmod 755 {} \; && find . -type f -exec chmod 644 {} \; && chmod u+x bin/magento

ดูเหมือนว่าจะแก้ไขได้ แต่หาก Magento สร้างไฟล์หรือไดเรกทอรีใหม่พวกเขาจะได้รับอนุญาต 770 และ 660 อีกครั้ง คุณสามารถแก้ไขค่า chmod เริ่มต้นในไฟล์ต่อไปนี้:

/vendor/magento/framework/Filesystem/DriverInterface.php 
(WRITEABLE_DIRECTORY_MODE and WRITEABLE_FILE_MODE)

/lib/internal/Cm/Cache/Backend/File.php 
(directory_mode and file_mode)

หลังจากการเปลี่ยนแปลงเหล่านี้ให้รันคำสั่งแรกอีกครั้งและหลังจากนั้นไฟล์ที่สร้างขึ้นใหม่จะไม่เป็นปัญหาอีกต่อไป

หมายเหตุ: การแก้ไขไฟล์แบบนี้ไม่ได้เป็นความคิดที่ดี แต่ฉันคิดว่าตัวเลือก chmod เหล่านี้กำลังจะถูกกำหนดค่าในอนาคตดังนั้นฉันจึงใช้วิธีที่ง่าย


1
ไม่พบ /lib/internal/Cm/Cache/Backend/File.php เมื่อ M231
snh_nl

@snh_nl ในเวอร์ชัน Magento ใหม่กว่าพวกเขาไม่ได้ตั้งค่าการอนุญาตอีกต่อไปหากทำได้ดูเหมือนว่าพวกเขาจะใช้ 775 หลังจากติดตั้งใหม่คุณสามารถเรียกใช้: find -type f -exec chmod 664 {} \; หา -type d -exec chmod 775 {} \; ค้นหา ./var -type d -exec chmod 777 {} \; ค้นหา ./pub/media -type d -exec chmod 777 {} \; ค้นหา ./pub/static -type d -exec chmod 777 {} \; chmod 777 ./app/etc chmod 644 ./app/etc/*.xml chmod u + x bin / magento ในรากและคุณควรจะปรับ
Daniel van der Garde

11

คุณสามารถใช้วิธีการเช่นเดียวกับเอกสารแนะนำของMagento :

find . -type f -exec chmod 664 {} \;
find . -type d -exec chmod 775 {} \;
find var pub/static pub/media app/etc -type f -exec chmod g+w {} \;
find var pub/static pub/media app/etc -type d -exec chmod g+ws {} \;
chmod u+x bin/magento

จะให้สิทธิ์การเขียนกับโฟลเดอร์ที่สร้างใน windows ได้อย่างไร? @Rafael Corrêa Gomes
ZUS

8
sudo find . -type d -exec chmod 770 {} \; && sudo find . -type f -exec chmod 660 {} \; && sudo chmod u+x bin/magento

สำหรับชุดพัฒนาท้องถิ่นpubและvarถึง 775 หรือ 777


ทำไม? (มีความยาวขั้นต่ำในการแสดงความคิดเห็น)
vitoriodachef

7

หากคุณใช้ SELinux ̣ (เช่น CentOS) ให้ลอง:

sudo chcon -R -t httpd_sys_rw_content_t var

(จากโฟลเดอร์ root ของ magento แน่นอน)


6

ในชุมชนวีโอไอพีที่แนะนำ

เราขอแนะนำให้ตั้งค่าการอนุญาตดังนี้:

ไดเรกทอรีทั้งหมดมี770สิทธิ์ สิทธิ์ 770 ให้การควบคุมเต็มรูปแบบ (นั่นคืออ่าน / เขียน / ดำเนินการ) ให้กับเจ้าของและกลุ่มและไม่มีสิทธิ์ให้กับคนอื่น

ไฟล์ทั้งหมดมีสิทธิ์660 สิทธิ์ 660 หมายถึงเจ้าของและกลุ่มสามารถอ่านและเขียน แต่ผู้ใช้รายอื่นไม่มีสิทธิ์

สำหรับการอ้างอิงเพิ่มเติมลิงค์นี้https://devdocs.magento.com/guides/v2.3/install-gde/prereq/file-system-perms.html


4

4

วางเนื้อหานี้ไว้ในโฟลเดอร์รูทของคุณจากนั้นรันด้วยคอนโซล

chmod +x yourfile.shอย่าลืมที่จะ

#!/bin/sh
chmod 2775 -R .

chmod 777 -R ./pub/

chmod 777 -R ./var/

ฉันจะใส่รหัสนี้ได้อย่างไร เป็นไฟล์ htacces หรือ php
matinict

หลีกเลี่ยงสิ่งนี้โดยทั่วไปจะทำให้ไดเรกทอรีเว็บเซิร์ฟเวอร์ของคุณเปิดให้สาธารณะ แทนที่จะอ่าน devdocs ที่ Magento จัดหาให้เพื่อรักษาความปลอดภัยเวอร์ชันที่คุณใช้งานอยู่
themanwhoknowstheman

4

ไม่มีสิทธิ์พิเศษคุณเพียงแค่ตรวจสอบให้แน่ใจว่าไฟล์ที่เป็นของผู้ใช้ที่รัน php หรือในกรณีของ cPanel - ผู้ใช้ cpanel และกลุ่มเดียวกัน

ดังนั้นคำสั่งของคุณดี:

find . -type f -exec chmod -c 644 {} \; && find . -type d -exec chmod -c 755 {} \;

เพียงอัปเดตเจ้าของไฟล์:

chown -R user:user *

userเจ้าของอยู่ที่ไหนuserที่ดูแล php

แทนการเปลี่ยนการอนุญาตทุกครั้งเข้าสู่ระบบ / ทำงานในฐานะผู้ใช้ที่เหมาะสมเจ้าของไฟล์จากรูทเป็นผู้ใช้:

cd /magento/root/folder/
su $(stat -c '%U' index.php) -s /bin/bash
whoami
pwd

จะให้สิทธิ์การเขียนกับโฟลเดอร์ที่สร้างใน windows ได้อย่างไร? @MagenX
ZUS

3
find . -type f -exec chmod 400 {} \;
find . -type d -exec chmod 500 {} \;
find var/ -type f -exec chmod 600 {} \;
find media/ -type f -exec chmod 600 {} \;
find var/ -type d -exec chmod 700 {} \;
find media/ -type d -exec chmod 700 {} \;
chmod 700 includes
chmod 600 includes/config.php

นอกจากนี้ยังมีข้อมูลโดยละเอียดในhttp://devdocs.magento.com/guides/m1x/install/installer-privileges_after.html


5
คำถามต้องขอคำแนะนำเกี่ยวกับ Magento 2
Flipmedia

0

ฉันแก้ไขด้วยวิธีนี้สำหรับ CentOS Linux 7.4.1708 บน Plesk Onyx 17.8.11

find . -type f -exec chmod 644 {} \; &&  find . -type d -exec chmod 755 {} \; && find ./var -type d -exec chmod 777 {} \; && find ./pub/media -type d -exec chmod 777 {} \; && find ./pub/static -type d -exec chmod 777 {} \; && chmod 777 ./app/etc  && chmod 644 ./app/etc/*.xml

chown -R :<web server group> .

คุณควรหลีกเลี่ยงการใช้ 777 ในไฟล์และไดเรกทอรี มันเปิดร้านค้าของคุณเพื่อความเสี่ยงด้านความปลอดภัยที่ไม่จำเป็น ให้อ่านเอกสารที่จัดทำโดยคุณภาพเยี่ยมสำหรับรุ่นที่คุณใช้งานอยู่
themanwhoknowstheman

0

ดำเนินการคำสั่งเหล่านี้ในฐานะผู้ใช้รูท หากคุณได้รับอนุญาต 777 ให้ย้อนกลับโดยใช้คำสั่งสองคำสั่งแรกและดำเนินการกับส่วนที่เหลือ

find . -type f -exec chmod 664 {} \;

find . -type d -exec chmod 775 {} \;

find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +

find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +

ตั้งค่าความเป็นเจ้าของให้กับผู้ใช้ Magento และผู้ใช้เว็บโดยใช้

sudo chown -R <Magento user>:<web server group> .

การรันคำสั่งเหล่านี้เป็นการกำหนดสิทธิ์สำหรับโฟลเดอร์และไฟล์ใน Magento root และสำหรับไฟล์ใหม่ที่จะสร้างใน var, pub และไดเรกทอรีที่สร้างขึ้น

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

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