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

ก่อนอื่นขอชี้แจงก่อนว่าไฟล์ wordfence-waf.php นี้คืออะไร
ไฟล์ดังกล่าวเป็นไฟล์ป้องกันของไฟร์วอลล์ Wordfence ซึ่งต้องเขียนไว้ในไดเร็กทอรีรากของเว็บไซต์ ในระดับเดียวกับ wp-config.php
หากไม่มีไฟล์นี้ ไฟร์วอลล์จะไม่สามารถเริ่มต้นทำงานได้ เปรียบเสมือนคุณติดตั้งแม่กุญแจแล้วแต่ไม่สามารถเสียบกุญแจเข้าไปได้
ตัวเลือกที่ 1: การแก้ไขสิทธิ์ด้วยการคลิกเพียงครั้งเดียวผ่านแผงควบคุม (BT Panel/)เฮสเทียซีพี/cPanel)
หากคุณใช้ BT Panel วิธีนี้ง่ายที่สุด ไปที่เว็บไซต์ของคุณ ค้นหาเว็บไซต์ที่เกี่ยวข้อง คลิก การตั้งค่า จากนั้นไปที่ สิทธิ์การเข้าถึงไดเร็กทอรี เปลี่ยนสิทธิ์การเข้าถึงไดเร็กทอรีรากของเว็บไซต์เป็น 755 และสิทธิ์การเข้าถึงไฟล์ทั้งหมดเป็น 644 จากนั้นตรวจสอบว่าผู้ใช้ที่กำลังทำงานอยู่คือ "www" หรือไม่ ถ้าไม่ใช่ ให้เปลี่ยนเป็น "www" คลิกปุ่ม "ซ่อมแซมสิทธิ์การเข้าถึง" รอจนกว่าจะเสร็จสิ้น รีเฟรช Wordfence แล้วลองใหม่อีกครั้ง
สำหรับ HestiaCP ให้ไปที่หน้าแก้ไขเว็บไซต์และเปิดใช้งานตัวเลือกที่เรียกว่า "อนุญาตการเขียนไปยังรูทของเว็บไซต์" จากนั้นเรียกใช้คำสั่ง SSH สองสามคำสั่งเพื่อรวมเจ้าของและสิทธิ์การเข้าถึงของไดเร็กทอรีเว็บไซต์
chown -R admin:www-data /home/admin/web/你的域名/public_html
chmod -R 755 /home/admin/web/你的域名/public_html
find /home/admin/web/你的域名/public_html -type f -print0 | xargs -0 chmod 644cPanel ใช้งานง่ายกว่า เปิดตัวจัดการไฟล์ เปิดใช้งาน "แสดงไฟล์ที่ซ่อนอยู่" ที่มุมบนขวา คลิกขวาที่ไดเร็กทอรีแล้วเปลี่ยนสิทธิ์เป็น 755 เปลี่ยนสิทธิ์ของไฟล์เป็น 644 และยังมีฟังก์ชันในการกำหนดเจ้าของไฟล์ในตัวเลือกขั้นสูงอีกด้วย
ตัวเลือกที่ 2: เปลี่ยนสิทธิ์การเข้าถึงด้วยตนเองผ่าน SSH (ทั่วไป)ลินุกซ์)
หากแผงควบคุมไม่สามารถจัดการได้ ให้ใช้ SSH ด้วยตนเอง เมื่อเชื่อมต่อกับเซิร์ฟเวอร์แล้ว ให้ทำการรวมสิทธิ์การเป็นเจ้าของก่อน ในสภาพแวดล้อม LNMP/LEMP กลุ่มรันไทม์เว็บโดยทั่วไปคือ www-data หรือ www
chown -R 你的面板用户:www-data /网站根目录完全路径จากนั้นตั้งค่าสิทธิ์การเข้าถึงโฟลเดอร์เป็น 755 และสิทธิ์การเข้าถึงไฟล์เป็น 644
find /网站根目录 -type d -print0 | xargs -0 chmod 755
find /网站根目录 -type f -print0 | xargs -0 chmod 644หลังจากดำเนินการเสร็จสิ้นแล้ว ให้กลับไปที่ส่วนหลังบ้านของ WordPress และเปิดใช้งานไฟร์วอลล์อีกครั้ง ซึ่งน่าจะช่วยแก้ไขปัญหาได้
ตัวเลือกที่ 3: สร้างไฟล์ wordfence-waf.php ด้วยตนเอง (วิธีแก้ปัญหาที่ยอดเยี่ยมเมื่อสิทธิ์การเข้าถึงถูกล็อก)
หากคุณไม่สามารถเปลี่ยนแปลงอะไรได้ผ่านทางแผงควบคุม SSH ให้ทำการเปลี่ยนแปลงด้วยตนเอง สร้างไฟล์ชื่อ wordfence-waf.php ในไดเร็กทอรีหลัก แล้ววางโค้ดต่อไปนี้ลงในไฟล์นั้น
<?php
if (!defined('WFWAF_VERSION')) {
define('WFWAF_VERSION', '7.11.0');
}
$wafConfig = array(
'wafAutoPrepend' => true,
'wafFile' => __FILE__,
'wpContentDir' => dirname(__FILE__) . '/wp-content',
'wpPluginsDir' => dirname(__FILE__) . '/wp-content/plugins',
'wafLogDir' => dirname(__FILE__) . '/wp-content/wflogs',
);
require_once $wafConfig['wpPluginsDir'] . '/wordfence/lib/waf/waf.php';อย่าลืมเปลี่ยนเวอร์ชัน 7.11.0 เป็นเวอร์ชัน Wordfence ปัจจุบันของคุณ ตั้งค่าสิทธิ์การเข้าถึงไฟล์เป็น 644 และเจ้าของไฟล์ควรตรงกับเว็บไซต์ จากนั้นแก้ไขไฟล์ wp-config.php และเพิ่มบรรทัดต่อไปนี้ไว้ที่ด้านบนสุดของไฟล์
require_once 'wordfence-waf.php';บันทึกและรีเฟรช Wordfence ไฟร์วอลล์จะตรวจจับได้โดยอัตโนมัติและจะไม่รายงานข้อผิดพลาดอีกต่อไป
ตัวเลือกที่ 4: ตรวจสอบกฎที่จำกัดสิทธิ์ในการเขียน
บางครั้งปัญหาอาจไม่ได้อยู่ที่สิทธิ์การเข้าถึง แต่เป็นไฟล์การตั้งค่าที่ปิดกั้นอยู่ ลองเปิดไฟล์ .htaccess แล้วลบกฎทั้งหมดที่จำกัดการเขียนไฟล์หรือป้องกันการสร้างไฟล์ PHP สำหรับ Nginx ให้ตรวจสอบการตั้งค่าเว็บไซต์ของคุณว่ามีข้อจำกัดอะไรบ้าง เช่น การอ่านอย่างเดียวสำหรับพาธรูท หรือ create_file off แล้วลบออก
อีกสถานการณ์หนึ่งคือ โฮสต์เสมือนหรือบริการคลาวด์โฮสติ้งแบบเบาอาจจำกัดการสร้างไฟล์ PHP ในไดเร็กทอรีรูท ในกรณีนี้ คุณต้องติดต่อผู้ให้บริการโฮสติ้งของคุณเพื่อลบข้อจำกัด หรือเปลี่ยนโหมดการป้องกันของ Wordfence ไปที่เมนู Wordfence, ตัวเลือกทั้งหมด, WAF และเปลี่ยนโหมดกลไกการป้องกันเป็น การป้องกันแบบขยาย (Extended Protection) เพื่อข้ามการสร้างไฟล์รูท
วิธีแก้ปัญหาที่ 5: ความขัดแย้งของปลั๊กอินที่ทำให้เกิดการบล็อก
ปลั๊กอินแคชหรือปลั๊กอินรักษาความปลอดภัยบางตัวอาจบล็อกการทำงานนี้ ให้ปิดใช้งานปลั๊กอินแคชชั่วคราว เช่น WP Rocket, W3 Total Cache และ LiteSpeed Cache รวมถึงปลั๊กอินรักษาความปลอดภัย เช่น Sucuri และ iThemes Security จากนั้นล้างแคชของเซิร์ฟเวอร์และ opcache แล้วรีสตาร์ทบริการ PHP
systemctl restart php8.3-fpmขั้นตอนการแก้ไขปัญหาอย่างรวดเร็ว (แนะนำให้ทำตามขั้นตอนตามลำดับ)
ผมแนะนำให้คุณทำตามลำดับนี้เพื่อหลีกเลี่ยงการเสียเวลาไปกับการแก้ไขปัญหาเอง ขั้นแรก ให้รวมสิทธิ์การเข้าถึงและการเป็นเจ้าของไฟล์เข้าด้วยกัน วิธีนี้มีโอกาสแก้ปัญหาได้มากที่สุด ถ้ายังไม่ได้ผล ให้รีสตาร์ท PHP-FPM และรีเฟรชส่วนหลังบ้าน ถ้ายังไม่ได้ผลอีก ให้สร้างไฟล์ใหม่และแก้ไข wp-config ด้วยตนเอง จากนั้นตรวจสอบว่าการตั้งค่า Nginx หรือ Apache ของคุณกำลังบล็อกการสร้างไฟล์ PHP ใหม่ในไดเร็กทอรีรูทหรือไม่ สุดท้าย ลองเปลี่ยนโหมดไฟร์วอลล์ดู
สิ่งหนึ่งที่ผมต้องย้ำเตือนคุณก็คือ คุณไม่ควรตั้งค่าสิทธิ์การเข้าถึงเป็น 777 เด็ดขาด สิทธิ์การเข้าถึงโฟลเดอร์ควรเป็น 755 และสิทธิ์การเข้าถึงไฟล์ควรเป็น 644 นั่นคือมาตรฐาน การตั้งค่าสิทธิ์การเข้าถึงเป็น 777 จะทำให้เว็บไซต์ของคุณเสี่ยงต่อการถูกโจมตีโดยตรง ซึ่งก่อให้เกิดความเสี่ยงด้านความปลอดภัยสูงมาก หากเว็บไซต์ของคุณถูกแฮ็ก คุณจะแก้ไขอะไรไม่ได้แล้ว
พูดตามตรง ผมไม่แน่ใจว่าวิธีแก้ปัญหาเหล่านี้จะได้ผลกับสถานการณ์ของคุณหรือไม่ แต่ผมได้แบ่งปันปัญหาที่ผมเจอและวิธีการที่ผมคิดค้นขึ้นมาแล้ว หากคุณได้รับข้อความแสดงข้อผิดพลาดอื่นๆ โปรดแคปหน้าจอแล้วส่งมาให้ผม ผมจะลองตรวจสอบดูอีกครั้ง
เนื่องจากคุณอ่านมาถึงตรงนี้แล้ว ถ้าคุณคิดว่ามีประโยชน์ โปรดกดไลค์และแชร์ด้วยนะคะ และถ้าอยากรับข่าวสารอัปเดตก่อนใคร สามารถติดตามฉันได้เลยค่ะ!
ขอบคุณที่อ่านบทความของฉัน แล้วพบกันใหม่ครั้งหน้า
หวัง Chen Weiliang บล็อก ( https://www.chenweiliang.com/ บทความแนะนำ "วิธีแก้ปัญหาแบบครบวงจรสำหรับปัญหา WordPress Wordfence ไม่สามารถสร้างไฟล์ wordfence-waf.php ได้" ที่แชร์ไว้ที่นี่ อาจเป็นประโยชน์สำหรับคุณ
ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-34337.html
