แก้ไขการอนุญาตไฟล์สำหรับ WordPress [ปิด]


399

ฉันได้ดูที่นี่แต่ไม่พบรายละเอียดใด ๆ เกี่ยวกับการอนุญาตไฟล์ที่ดีที่สุด ฉันยังดูคำถามของแบบฟอร์ม WordPress ที่นี่ด้วยแต่ใครก็ตามที่แนะนำว่า 777 นั้นต้องการบทเรียนเล็ก ๆ น้อย ๆ เพื่อความปลอดภัย

ในระยะสั้นคำถามของฉันคือสิ่งนี้ ฉันควรมีสิทธิ์ใดบ้างสำหรับสิ่งต่อไปนี้:

  1. โฟลเดอร์รากที่เก็บเนื้อหา WordPress ทั้งหมด
  2. WP-ผู้ดูแลระบบ
  3. wp-content
  4. WP-รวมถึง

แล้วไฟล์ทั้งหมดในแต่ละโฟลเดอร์เหล่านั้น?


โดยทั่วไปเฉพาะโฟลเดอร์อัพโหลด Wordpress เท่านั้นที่ควรจะเป็น 777 แต่มันจะเป็นภัยคุกคามความปลอดภัยที่ร้ายแรง หากคุณใช้เซิร์ฟเวอร์ที่เปิดใช้งาน Suphp ไม่จำเป็นต้องแก้ไขสิทธิ์ด้วยตนเอง
Ali F

4
ฉันลงคะแนนให้ปิดคำถามนี้เป็นนอกหัวข้อเนื่องจากเป็นหัวข้อปิดตามส่วนที่ตัดตอนมาของแท็ก wiki: "คำถามนอกหัวข้อประกอบด้วยคำถามเกี่ยวกับการพัฒนาชุดรูปแบบการบริหาร WordPress แนวทางปฏิบัติที่ดีที่สุดด้านการจัดการการกำหนดค่าเซิร์ฟเวอร์ ฯลฯ "
Adriaan

คำตอบ:


499

เมื่อคุณติดตั้ง WP คุณ (เว็บเซิร์ฟเวอร์) อาจต้องมีสิทธิ์ในการเขียนไฟล์ ดังนั้นสิทธิ์การเข้าถึงอาจจำเป็นต้องหลวม

chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--

หลังจากการตั้งค่าคุณควรกระชับสิทธิ์การเข้าถึงตามHardening WordPressไฟล์ทั้งหมดยกเว้น wp-content ควรเขียนได้โดยบัญชีผู้ใช้ของคุณเท่านั้น wp-content ต้องสามารถเขียนได้โดยwww-dataเช่นกัน

chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content

บางทีคุณอาจต้องการเปลี่ยนเนื้อหาในเนื้อหา WP ในภายหลัง ในกรณีนี้คุณทำได้

  • เปลี่ยนผู้ใช้ชั่วคราวเป็นwww-dataด้วยsu ,
  • ให้การเข้าถึงกลุ่ม wp-content แบบเขียน 775 และเข้าร่วมกลุ่มwww-dataหรือ
  • ให้ผู้ใช้ของคุณสิทธิการเข้าถึงไปยังโฟลเดอร์โดยใช้ACL ของ

สิ่งที่คุณทำให้แน่ใจว่าไฟล์ที่มีสิทธิ์ RW สำหรับwww ข้อมูล


2
Kornel ให้ลิงก์ที่เชื่อถือได้หนึ่งรายการด้านล่าง ดูเพิ่มเติมที่codex.wordpress.org/Changing_File_Permissionsเอกสารhttpของ Apache ของhttpd.apache.org/docs/2.2/misc/security_tips.htmlและการค้นหา google ในหัวข้อนี้ แต่ในกรณีทั่วไปเมื่อมีข้อสงสัยอย่าให้สิทธิ์ในการเขียน (และแน่นอนว่าไม่มีความเป็นเจ้าของ) และคลายเป็นกรณี ๆ ไปไม่ใช่ตรงกันข้าม (หลักการของสิทธิ์น้อยที่สุดที่คุณละเมิดที่นี่)
Calimo

22
ทำไมถึงมีฟีเจอร์อัพเดทอัตโนมัติหากมันใช้งานไม่ได้โดยไม่เปลี่ยนสิทธิ์?
malhal

6
@ ManuelSchneid3r ฉันเห็นไฟล์ PHP บางไฟล์ภายใต้ wp-content เหล่านี้ควรจะเขียนได้จริงหรือไม่www-data? ฟังดูไม่น่าเชื่อถือเลย
Alexis Wilke

12
วิธีนี้จะป้องกันไม่ให้ wordpress ติดตั้ง 'การปรับปรุงความปลอดภัยอัตโนมัติ' คุณต้องดำเนินการตามขั้นตอนด้านบนด้วยตนเองสำหรับการอัพเดทเวิร์ดเพรสย่อย
Jeroen

11
นี่ไม่ใช่การกำหนดค่าที่ปลอดภัย การตั้งค่าการอนุญาตการอ่านไฟล์เหล่านี้ไม่มีผลกระทบเมื่อผู้ใช้ apache เป็นเจ้าของไฟล์ด้วย! ไม่ได้ใช้. อ้างถึงcodex.wordpress.org/Changing_File_Permissions
PodTech.io

60

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

chown www-data:www-data -R *

มันจะมีประโยชน์อย่างไรก็ตามในขณะที่คุณกำลังติดตั้งหรืออัปเกรด WordPress และปลั๊กอิน แต่เมื่อคุณทำเสร็จแล้วก็ไม่ควรเก็บไฟล์ wp ของเว็บเซิร์ฟเวอร์

โดยทั่วไปจะช่วยให้เว็บเซิร์ฟเวอร์วางหรือเขียนทับไฟล์ใด ๆ ในเว็บไซต์ของคุณ ซึ่งหมายความว่ามีความเป็นไปได้ที่จะเข้าครอบครองเว็บไซต์ของคุณหากมีคนจัดการเพื่อใช้เว็บเซิร์ฟเวอร์ (หรือช่องโหว่ด้านความปลอดภัยในสคริปต์. php) เพื่อวางไฟล์บางไฟล์ไว้ในเว็บไซต์ของคุณ

เพื่อปกป้องไซต์ของคุณจากการโจมตีดังกล่าวคุณควรปฏิบัติดังนี้:

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

/

ไดเรกทอรี WordPress ราก: ไฟล์ทั้งหมดควรเขียนได้โดยบัญชีผู้ใช้ของคุณเท่านั้นยกเว้น. htaccess หากคุณต้องการให้ WordPress สร้างกฎการเขียนซ้ำให้คุณโดยอัตโนมัติ

/wp-admin/

พื้นที่การจัดการ WordPress: ไฟล์ทั้งหมดควรเขียนได้โดยบัญชีผู้ใช้ของคุณเท่านั้น

/wp-includes/

ส่วนใหญ่ของตรรกะแอปพลิเคชัน WordPress: ไฟล์ทั้งหมดควรเขียนได้โดยบัญชีผู้ใช้ของคุณเท่านั้น

/wp-content/

เนื้อหาที่ผู้ใช้จัดหา: มีเจตนาที่จะเขียนได้โดยบัญชีผู้ใช้ของคุณและกระบวนการเว็บเซิร์ฟเวอร์

ภายใน/wp-content/คุณจะได้พบกับ:

/wp-content/themes/

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

/wp-content/plugins/

ไฟล์ปลั๊กอิน: ไฟล์ทั้งหมดควรเขียนได้โดยบัญชีผู้ใช้ของคุณเท่านั้น

ไดเรกทอรีอื่น ๆ ที่อาจมีอยู่/wp-content/ควรมีการจัดทำเอกสารโดยปลั๊กอินหรือชุดรูปแบบที่ต้องการ สิทธิ์อาจแตกต่างกันไป

ที่มาและข้อมูลเพิ่มเติม: http://codex.wordpress.org/Hardening_WordPress


ด้วยบัญชีผู้ใช้ของคุณ หมายถึงผู้ใช้ที่ดำเนินการสคริปต์ php บนเว็บไซต์ (ปกติผู้ใช้ apache)?
shasi kanth

4
@shasikanth ไม่ผู้ใช้ apache เป็นผู้ที่เขาอ้างถึงว่าเป็น“ กระบวนการเซิร์ฟเวอร์เว็บ” บัญชีผู้ใช้คือผู้ใช้ Linux ของคุณ (ssh, ผู้ใช้ ftp ฯลฯ )
Daniel Bang

ในคำตอบนี้และในคำตอบที่ยอมรับผู้ใช้ (ไม่ใช่ www-data) ควรเป็นส่วนหนึ่งของกลุ่ม www-data หรือไม่
user658182

1
ไม่นั่นคือประเด็นทั้งหมด
Piotr Nawrot

1
ปัญหาที่ฉันพบคือเมื่อใดก็ตามที่ฉันทำให้ SSH "ผู้ใช้" เป็นเจ้าของ / wp-content / plugins /, Wordpress กลายเป็นไม่สมบูรณ์โดยสิ้นเชิงจากภายในผู้ดูแลระบบด้วยข้อผิดพลาด FTP ประจำป๊อปอัปหรือการอนุญาตที่ผิดพลาด ไม่สามารถเพิ่มหรืออัปเดตปลั๊กอิน เฉพาะเมื่อฉันทำให้ www-data เป็นเจ้าของเนื้อหา wp ฟังก์ชันการทำงานของปลั๊กอินผู้ดูแลระบบ Wordpress ทำงาน (ตัวอย่าง: sudo chown www-data: www-data -R / var / www / html / wp-content /)
Heres2u

26

สำหรับผู้ที่มีโฟลเดอร์รากของ WordPress ภายใต้โฟลเดอร์ภายในบ้าน:

** Ubuntu / apache

  1. เพิ่มผู้ใช้ของคุณไปยังกลุ่ม www-data:

เครดิตให้สิทธิ์การเขียนกับกลุ่ม www-data

คุณต้องการโทรหาusermodผู้ใช้ของคุณ ดังนั้นจะเป็น:

sudo usermod -aG www-data yourUserName

** www-dataมีกลุ่มที่ถือว่าอยู่

  1. ตรวจสอบว่าผู้ใช้ของคุณอยู่ในwww-dataกลุ่ม:

    groups yourUserName

คุณควรได้รับ:

youUserName : youUserGroupName www-data

** youUserGroupName จะคล้ายกับชื่อผู้ใช้ของคุณ

  1. เปลี่ยนความเป็นเจ้าของกลุ่มของโฟลเดอร์ wp-content ซ้ำ ๆ เพื่อคงความเป็นเจ้าของของผู้ใช้

    chown yourUserName:www-data -R youWebSiteFolder/wp-content/*

  2. เปลี่ยนไดเรกทอรีเป็น youWebSiteFolder / wp-content /

    cd youWebSiteFolder/wp-content

  3. เปลี่ยนการอนุญาตกลุ่มของโฟลเดอร์และโฟลเดอร์ย่อยซ้ำเพื่อเปิดใช้งานสิทธิ์การเขียน:

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

โหมด ** ของ `/ home / yourUserName / youWebSiteFolder / wp-content / 'เปลี่ยนจาก 0755 (rwxr-xr-x) เป็น 0775 (rwxrwxr-x)

  1. เปลี่ยนการอนุญาตกลุ่มของไฟล์และไฟล์ย่อยซ้ำเพื่อเปิดใช้งานสิทธิ์การเขียน:

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

ผลลัพธ์ควรมีลักษณะดังนี้:

WAS:
-rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
CHANGED TO:
-rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html

เทียบเท่ากับ:

chmod -R ug + rw foldername

การอนุญาตจะเป็น 664 สำหรับไฟล์หรือ 775 สำหรับไดเรกทอรี

ป.ล. ถ้าใครพบข้อผิดพลาด'could not create directory'เมื่ออัปเดตปลั๊กอินให้ทำ:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
เมื่อคุณอยู่ที่รูทโดเมนของคุณ
สมมติว่า: wp-config.phpมี
ข้อมูลประจำตัว FTP ใน LocalHost
define('FS_METHOD','direct');


10
-1 คุณไม่ต้องการให้ www-data มีสิทธิ์เขียนเพื่อเข้าถึงไฟล์ wordpress ยกเว้นใน wp-content
Calimo

775 ใน wp-content ช่วยได้ ด้วย 644 สำหรับไฟล์, 755 สำหรับโฟลเดอร์และผู้ใช้ chown: www-data บางครั้งฉันยังคงมีปัญหากับการอัปโหลดสื่ออัปเดตปลั๊กอิน ฯลฯ 775 ช่วยให้ wp-content ถูกเปลี่ยนแปลงโดย www-data: www-data เช่นกัน ซึ่งแก้ปัญหาได้
guylabbe.ca

ลบ -R ออกจากคำสั่ง find / chmod เนื่องจากช้าและไม่จำเป็น
อดัม Jimenez

20

ดีที่สุดในการอ่านเอกสาร wordpress ในhttps://wordpress.org/support/article/changing-file-permissions/นี้

  • ไฟล์ทั้งหมดควรเป็นของบัญชีผู้ใช้จริงไม่ใช่บัญชีผู้ใช้ที่ใช้สำหรับกระบวนการ httpd
  • ความเป็นเจ้าของกลุ่มไม่เกี่ยวข้องยกเว้นว่ามีข้อกำหนดเฉพาะของกลุ่มสำหรับการตรวจสอบสิทธิ์กระบวนการของเว็บเซิร์ฟเวอร์ นี่ไม่ใช่กรณีปกติ
  • ไดเรกทอรีทั้งหมดควรเป็น 755 หรือ 750
  • ไฟล์ทั้งหมดควรเป็น 644 หรือ 640 ข้อยกเว้น: wp-config.php ควรเป็น 440 หรือ 400 เพื่อป้องกันผู้ใช้รายอื่นบนเซิร์ฟเวอร์ไม่ให้อ่าน
  • ไม่ควรให้ไดเรกทอรี 777 แม้แต่อัปโหลดไดเรกทอรี เนื่องจากกระบวนการ php ทำงานเป็นเจ้าของไฟล์จึงได้รับสิทธิ์จากเจ้าของและสามารถเขียนไปยังไดเรกทอรี 755

4
ไม่แน่ใจว่าทำไมคุณถึงถูกโหวต: มันเกือบจะเหมือนว่าผู้คนต้องการคำตอบที่ดีที่สุดเพื่อเป็นวิธีการออกจากการติดตั้งที่ไม่ปลอดภัย !
BCran

ลิงก์ล้าสมัย ใหม่ที่นี่: wordpress.org/support/article/changing-file-permissionsและขอบคุณที่เป็นคนเดียวที่อ้างอิงเอกสารจริง!
คนธรรมดา

หาก wp-config.php เป็น 400, apache ควรรวมไว้ในวิธีใด (เช่นอ่าน) ในการโหลดหน้า?
Martin Braun

14

ฉันตั้งค่าการอนุญาตเป็น:

    # Set all files and directories user and group to wp-user
    chown wp-user:wp-user -R *

    # Set uploads folder user and group to www-data
    chown www-data:www-data -R wp-content/uploads/

    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} \;

    # Set all files permissions to 644
    find . -type f -exec chmod 644 {} \;

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

จากนั้นจะอนุญาตให้ผู้ใช้ apache จัดการกับโฟลเดอร์อัพโหลดและในที่สุดก็ตั้งค่าการอนุญาตไฟล์และโฟลเดอร์ให้ปลอดภัย

แก้ไข

หากคุณใช้แคชรวมของ W3C คุณควรทำสิ่งต่อไปนี้ด้วย:

rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced

จากนั้นมันจะทำงาน!

แก้ไข

หลังจากที่ในขณะที่การพัฒนาเว็บไซต์ WordPress ฉันขอแนะนำไฟล์ที่แตกต่างกันต่อสภาพแวดล้อม

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

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/

www-data: www-data = apache หรือผู้ใช้และกลุ่ม nginx

การจัดเตรียมจะแบ่งปันสิทธิ์การผลิตเดียวกันกับที่ควรจะเป็นโคลนนิ่งของมัน

ในที่สุดสภาพแวดล้อมการพัฒนาจะสามารถเข้าถึงปลั๊กอินอัปเดตแปลทุกอย่าง ...

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin

www-data: www-data = apache หรือผู้ใช้ nginx และกลุ่ม your-user: root-group = ผู้ใช้ปัจจุบันและกลุ่ม root

สิทธิ์เหล่านี้จะช่วยให้คุณสามารถเข้าถึงการพัฒนาภายใต้themesและyour-pluginโฟลเดอร์โดยไม่ต้องขออนุญาต เนื้อหาที่เหลือจะเป็นของผู้ใช้ Apache หรือ Nginx เพื่ออนุญาตให้ WP จัดการระบบไฟล์

ก่อนสร้าง git repo ให้เรียกใช้คำสั่งเหล่านี้ก่อน:

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

11
Nooo! ไม่เคยทำ 777 โปรดอย่าแนะนำสิ่งนี้กับคนที่เพิ่งอ่านสิ่งนี้
Karlo

ไม่มีไฟล์หรือโฟลเดอร์ที่ควรเป็นเจ้าของโดยกระบวนการ http - นี่คือช่องว่างการรักษาความปลอดภัยที่สำคัญ หากผู้ใช้ที่เป็นอันตรายพบการโจมตีในปลั๊กอินหรือธีมหรือเวิร์ดเพรสเองพวกเขาสามารถอัปโหลดโค้ดที่สามารถเรียกใช้โดย apache และเข้าถึง - ฉันได้เห็นมันเป็นมือแรก :(
DropHit

10

สิทธิ์ที่ถูกต้องสำหรับไฟล์คือ 644 สิทธิ์ที่ถูกต้องสำหรับโฟลเดอร์คือ 755

ในการเปลี่ยนการอนุญาตใช้เทอร์มินัลและคำสั่งต่อไปนี้

find foldername -type d -exec chmod 755 {} \;
find foldername -type f -exec chmod 644 {} \;

755 สำหรับโฟลเดอร์และ 644 สำหรับไฟล์


1
และ 640 สำหรับ wp-config.php แต่น่าเสียดายที่คุณต้องเปลี่ยนการอนุญาต & อัปโหลด & ปลั๊กอิน & ชุดรูปแบบของโฟลเดอร์เป็น 775 และหากคุณต้องการอัปเกรด wordpress ของคุณคุณต้องเปลี่ยนโฟลเดอร์ทั้งหมดเป็น 775 ในส่วนนี้สิทธิ์ของคุณจะปรากฏข้อผิดพลาดขณะอัปเกรด / เปลี่ยนปลั๊กอินธีมและการอัปโหลดสื่อ
erginduran

8

ฉันคิดว่ากฎด้านล่างมีการแนะนำสำหรับเว็บไซต์ wordpress เริ่มต้น:

  • สำหรับโฟลเดอร์ที่อยู่ใน wp-content ให้ตั้งค่าการอนุญาต 0755:

    chmod -R 0755 ปลั๊กอิน

    chmod -R 0755 อัพโหลด

    chmod -R 0755 อัพเกรด

  • ให้ผู้ใช้ apache เป็นเจ้าของไดเรกทอรีด้านบนของ wp-content:

    chown apache อัพโหลด

    chown apache อัพเกรด

    chown apache plugin


1
นอกจากนี้คุณยังสามารถตั้งค่าซ้ำสิทธิ์สำหรับไดเรกทอรีเช่น: chown -R Apache อัปโหลด และหากจำเป็นคุณสามารถให้สิทธิ์การเป็นเจ้าของกลุ่มกับ apache: chgrp apache uploads
shasi kanth

8

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

สิ่งนี้จะกำหนด "รูท" (หรือสิ่งที่ผู้ใช้ที่คุณใช้) เป็นผู้ใช้ในทุกไฟล์ / โฟลเดอร์ R หมายถึงการเรียกซ้ำดังนั้นมันจึงไม่หยุดที่โฟลเดอร์ "html" หากคุณไม่ได้ใช้ R ก็จะใช้ได้กับไดเรกทอรี "html" เท่านั้น

sudo chown -R root:www-data /var/www/html  

สิ่งนี้จะตั้งค่าเจ้าของ / กลุ่มของ "wp-content" เป็น "www-data" ดังนั้นจึงอนุญาตให้เว็บเซิร์ฟเวอร์ติดตั้งปลั๊กอินผ่านแผงการดูแลระบบ

chown -R www-data:www-data /var/www/html/wp-content

สิ่งนี้จะตั้งค่าการอนุญาตของทุก ๆ ไฟล์ในโฟลเดอร์ "html" (รวมถึงไฟล์ในไดเรกทอรีย่อย) เป็น 644 ดังนั้นบุคคลภายนอกไม่สามารถเรียกใช้ไฟล์ใด ๆ แก้ไขไฟล์ใด ๆ กลุ่มไม่สามารถเรียกใช้ไฟล์ใด ๆ แก้ไขไฟล์ใด ๆ และเท่านั้น ผู้ใช้จะได้รับอนุญาตให้แก้ไข / อ่านไฟล์ได้ แต่แม้ผู้ใช้จะไม่สามารถเรียกใช้ไฟล์ใด ๆ ได้ สิ่งนี้สำคัญเนื่องจากจะป้องกันการดำเนินการใด ๆ ในโฟลเดอร์ "html" เช่นกันเนื่องจากเจ้าของโฟลเดอร์ html และโฟลเดอร์อื่น ๆ ทั้งหมดยกเว้นโฟลเดอร์ wp-content คือ "root" (หรือผู้ใช้ของคุณ) www-data สามารถ ' ไม่แก้ไขไฟล์ใด ๆ นอกโฟลเดอร์ wp-content ดังนั้นแม้ว่าจะมีช่องโหว่ในเว็บเซิร์ฟเวอร์และหากมีคนเข้าถึงเว็บไซต์โดยไม่ได้รับอนุญาตพวกเขาจะไม่สามารถลบเว็บไซต์หลักยกเว้นปลั๊กอินได้

sudo find /var/www/html -type f -exec chmod 644 {} +

สิ่งนี้จะ จำกัด การอนุญาตการเข้าถึง "wp-config.php" ให้กับผู้ใช้ / กลุ่มด้วย rw-r ----- การอนุญาตเหล่านี้

chmod 640 /var/www/html/wp-config.php

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

chown -R www-data /var/www/html

และใน Nginx (ขั้นตอนเดียวกันสำหรับ apache) เพื่อป้องกันโฟลเดอร์ wp-admin จากการเข้าถึงที่ไม่ได้รับอนุญาตและการตรวจสอบ apache2-utils เป็นสิ่งจำเป็นสำหรับการเข้ารหัสรหัสผ่านแม้ว่าคุณจะติดตั้ง nginx อยู่ก็ตามให้ละเว้น c หากคุณวางแผนที่จะเพิ่มผู้ใช้มากขึ้นในไฟล์เดียวกัน

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName

ตอนนี้ไปที่ตำแหน่งนี้

/etc/nginx/sites-available/

ใช้รหัสนี้เพื่อป้องกันโฟลเดอร์ "wp-admin" ด้วยรหัสผ่านตอนนี้มันจะถามรหัสผ่าน / ชื่อผู้ใช้ถ้าคุณพยายามเข้าถึง "wp-admin" แจ้งให้ทราบล่วงหน้าที่นี่คุณใช้ไฟล์ ".htpasswd" ซึ่งมีรหัสผ่านที่เข้ารหัสไว้

location ^~ /wp-admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    index  index.php index.html index.htm;
}

ตอนนี้รีสตาร์ท nginx

sudo /etc/init.d/nginx restart

ไม่แนะนำให้ใช้ผู้ใช้รูท แต่อาจเป็นอันตรายได้เพียงทำให้ผู้ใช้ใหม่ n เพิ่มเขาในกลุ่ม sudo
erginduran

ฉันไม่ได้สนับสนุนที่นี่เพื่อใช้รูท ฉันใช้รูทเป็นตัวอย่าง คุณสามารถใช้ชื่ออะไรก็ได้แทนการใช้รูท
Don Dilanga

2

คำสั่ง:

chown www-data:www-data -R *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

โดยที่ ftp-user คือผู้ใช้ที่คุณใช้อัปโหลดไฟล์

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content

1
ควรจะเป็นชื่อผู้ใช้ chown: www-data ไม่เช่นนั้นคุณจะไม่สามารถแก้ไขไฟล์ได้
malhal

คุณสามารถใช้แทน$(whoami) ftp-userตามค่าเริ่มต้นผู้ใช้ปัจจุบันของคุณ ( ไม่ใช่รูท ) คือผู้ใช้ FTP ของคุณหากคุณใช้เซิร์ฟเวอร์ของคุณ (โลคอล, vps, ฯลฯ )
Juanjo Salvador

2

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

https://en-ca.wordpress.org/plugins/all-in-one-wp-security-and-firewall/

https://en-ca.wordpress.org/plugins/wordfence/

ปลั๊กอินเหล่านี้จะสแกนการติดตั้ง Wordpress ของคุณและแจ้งให้คุณทราบเกี่ยวกับปัญหาที่อาจเกิดขึ้น สิ่งเหล่านี้จะเตือนคุณเกี่ยวกับการอนุญาตของโฟลเดอร์ที่ไม่ปลอดภัย นอกจากนั้นปลั๊กอินเหล่านี้จะแนะนำให้คุณทราบว่าควรกำหนดสิทธิ์ใดให้กับโฟลเดอร์


2
chown -Rv www-data:www-data
chmod -Rv 0755 wp-includes
chmod -Rv 0755 wp-admin/js
chmod -Rv 0755 wp-content/themes
chmod -Rv 0755 wp-content/plugins
chmod -Rv 0755 wp-admin
chmod -Rv 0755 wp-content
chmod -v 0644 wp-config.php
chmod -v 0644 wp-admin/index.php
chmod -v 0644 .htaccess

1

ฉันไม่สามารถบอกคุณได้ว่าสิ่งนี้ถูกต้องหรือไม่ แต่ฉันใช้ภาพ Bitnami บน Google Compute App Engine ฉันมีปัญหากับปลั๊กอินและการย้ายข้อมูลและหลังจากทำสิ่งต่าง ๆ เพิ่มเติมโดยการอนุญาต chmod'ing ฉันพบสามบรรทัดนี้ซึ่งแก้ไขปัญหาทั้งหมดของฉัน ไม่แน่ใจว่าเป็นวิธีการที่เหมาะสมหรือไม่ แต่ได้ผลสำหรับฉัน

sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs/
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type f -exec chmod 664 {} \;
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type d -exec chmod 775 {} \;


1

กำหนดในไฟล์ wp_config

/var/www/html/Your-Project-File/wp-config.php

define( 'FS_METHOD', 'direct' );

chown - เปลี่ยนความเป็นเจ้าของไฟล์ / dirs กล่าวคือ เจ้าของไฟล์ / dir เปลี่ยนเป็นไฟล์ที่ระบุ แต่ไม่ได้แก้ไขสิทธิ์

sudo chown -R www-data:www-data /var/www

0

จากการอ่านและการทนทุกข์ทรมานในเว็บไซต์ของฉันเองและหลังจากถูกแฮ็กฉันได้รับรายการด้านบนที่มีสิทธิ์สำหรับปลั๊กอินความปลอดภัยสำหรับ Wordpress ชื่อ Wordfence (ไม่มีส่วนเกี่ยวข้องกับมัน)

ในตัวอย่างของเรารูทเอกสารเวิร์ดเพรสคือ /var/www/html/example.com/public_html

เปิดสิทธิ์เพื่อให้ www-data สามารถเขียนไปยังรูทเอกสารดังนี้:

cd /var/www/html/example.com
sudo chown -R www-data:www-data public_html/

ในตอนนี้จากแดชบอร์ดในไซต์ของคุณในฐานะผู้ดูแลระบบคุณสามารถทำการอัปเดตได้

ไซต์ที่ปลอดภัยหลังจากอัพเดตเสร็จสิ้นโดยทำตามขั้นตอนเหล่านี้:

sudo chown -R wp-user:wp-user public_html/

คำสั่งดังกล่าวเปลี่ยนสิทธิ์ของทุกอย่างใน wordpress ติดตั้งให้กับผู้ใช้ wordpress FTP

cd public_html/wp-content
sudo chown -R www-data:wp-user wflogs
sudo chown -R www-data:wp-user uploads

คำสั่งดังกล่าวทำให้มั่นใจได้ว่าปลั๊กอินความปลอดภัย Wordfence สามารถเข้าถึงบันทึกได้ ไดเรกทอรีอัพโหลดยังสามารถเขียนได้โดย www-data

cd plugins
sudo chown -R www-data:wp-user wordfence/

คำสั่งดังกล่าวยังช่วยให้มั่นใจได้ว่าปลั๊กอินความปลอดภัยจำเป็นต้องมีการเข้าถึงการเขียนเพื่อการทำงานที่เหมาะสม

สิทธิ์ไดเรกทอรีและไฟล์

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

ตั้งค่าการอนุญาตสำหรับ wp-config.php เป็น 640 เพื่อให้ผู้ใช้ wp เท่านั้นที่สามารถอ่านไฟล์นี้และไม่มีใครอื่น การอนุญาตของ 440 ไม่สามารถใช้งานได้สำหรับฉันด้วยการเป็นเจ้าของไฟล์ด้านบน

sudo chmod 640 wp-config.php

การอัปเดตอัตโนมัติ Wordpress โดยใช้ SSH ทำงานได้ดีกับ PHP5 แต่ยากจนด้วย PHP7.0 เนื่องจากปัญหากับ php7.0-ssh2 ที่มาพร้อมกับ Ubuntu 16.04 และฉันไม่สามารถหาวิธีติดตั้งเวอร์ชั่นที่ถูกต้องและทำให้มันใช้งานได้ โชคดีที่ปลั๊กอินที่น่าเชื่อถือมากที่เรียกว่าssh-sftp-updater-support (ฟรี) ทำให้การอัปเดตอัตโนมัติโดยใช้ SFTP เป็นไปได้โดยไม่จำเป็นต้องใช้ libssh2 ดังนั้นการอนุญาตข้างต้นไม่จำเป็นต้องคลายยกเว้นในบางกรณีที่จำเป็น

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