ฉันควรกังวลเรื่องความปลอดภัยใดเมื่อตั้งค่า FS_METHOD เป็น“ โดยตรง” ใน wp-config


36

ฉันเพิ่งมีปัญหาที่ฉันไม่สามารถติดตั้งปลั๊กอิน WP Smush Pro ได้เนื่องจากฉันไม่มีตัวเลือกการติดตั้งด้วยตนเองหรือการติดตั้งด้วยคลิกเดียว

ผมมาในโพสต์นี้wp-config.phpซึ่งแนะนำให้ปรับเปลี่ยนการตั้งค่าใน ฉันได้เพิ่มการตั้งค่าที่แนะนำ แต่สิ่งที่สำคัญที่สุดคือ:

define('FS_METHOD', 'direct');

สิ่งที่ผมอยากจะรู้ว่าสิ่งที่เป็นกังวลจริงผมควรจะมีรอบการตั้งค่าFS_METHODเพื่อdirect? มีทางเลือกอื่นในการติดตั้งปลั๊กอินหรือไม่

นี่คือสิ่งที่เอกสารทางการได้กล่าว:

FS_METHOD บังคับให้วิธีการระบบแฟ้ม ควรเป็น "โดยตรง", "ssh2", "ftpext" หรือ "ftpsockets" โดยทั่วไปคุณควรเปลี่ยนแปลงสิ่งนี้หากคุณประสบปัญหาการอัพเดท หากคุณเปลี่ยนและไม่ช่วยให้เปลี่ยนกลับ / ลบ ภายใต้สถานการณ์ส่วนใหญ่การตั้งค่าเป็น 'ftpsockets' จะทำงานหากวิธีที่เลือกโดยอัตโนมัติไม่ทำงาน

(การตั้งค่าหลัก) บังคับโดยตรงให้ใช้คำร้องขอ Direct File I / O จากภายใน PHP ซึ่งเต็มไปด้วยการเปิดปัญหาด้านความปลอดภัยบนโฮสต์ที่กำหนดค่าไม่ดีซึ่งจะถูกเลือกโดยอัตโนมัติเมื่อเหมาะสม

คำตอบ:


33

นี่เป็นเพียงวิธีการที่ฉันเข้าใจความคิดของWordPress ไฟล์ API ถ้ามันผิดโปรดลงคะแนน :)

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

หากคุณอัปโหลดไฟล์โดยใช้ PHP ผู้ใช้ linux ซึ่งกำลังเรียกใช้งาน PHP กำลังเป็นเจ้าของไฟล์ ผู้ใช้นี้สามารถแก้ไขลบเรียกใช้ไฟล์ ฯลฯ ไม่เป็นไรตราบใดที่คุณเท่านั้นที่เป็นผู้ใช้ที่รัน PHP บนระบบของคุณ

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

[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1

"ฮะ!" เด็กเลวพูด ช่วยให้ดูถ้าผู้ชายคนนี้ได้มีการกำหนดFS_METHODที่จะdirectและเขาเขียนสคริปต์เช่น

<?php
unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' );
?>

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

ไซต์ของคุณถูกแฮ็ค

หรือตามที่ระบุไว้ใน Codex:

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


15

ความเสี่ยงคืออะไร?

บนโฮสต์ที่ใช้ร่วมกันที่มีการกำหนดค่าไม่ดี PHP ของลูกค้าทุกคนจะดำเนินการในฐานะผู้ใช้รายเดียวกัน (สมมติว่ามีการพูดapacheคุยกัน) การตั้งค่านี้เป็นเรื่องปกติที่น่าประหลาดใจ

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

มันFS_METHOD 'direct'เกี่ยวข้องกับอะไร?

เมื่อ WordPress ต้องการติดตั้งไฟล์ (เช่นปลั๊กอิน) มันจะใช้ฟังก์ชั่นget_filesystem_method ()เพื่อกำหนดวิธีการเข้าถึงระบบไฟล์ หากคุณไม่ได้กำหนดFS_METHODมันจะเลือกค่าเริ่มต้นสำหรับคุณมิฉะนั้นจะใช้การเลือกของคุณตราบใดที่เหมาะสม

พฤติกรรมเริ่มต้นจะพยายามตรวจสอบว่าคุณอยู่ในสภาพแวดล้อมที่มีความเสี่ยงเช่นเดียวกับที่ฉันอธิบายไว้ข้างต้นและหากคิดว่าคุณปลอดภัยแล้วจะใช้'direct'วิธีนี้ ในกรณีนี้ WordPress จะสร้างไฟล์โดยตรงผ่าน PHP ทำให้พวกเขาเป็นของapacheผู้ใช้ (ในตัวอย่างนี้) มิฉะนั้นจะกลับไปใช้วิธีที่ปลอดภัยกว่าเช่นให้คุณใส่ข้อมูลประจำตัว SFTP และสร้างไฟล์ตามที่คุณต้องการ

FS_METHOD = 'direct'ถาม WordPress เพื่อบายพาสที่ที่มีความเสี่ยงการตรวจจับและมักจะสร้างไฟล์โดยใช้'direct'วิธีการ

ถ้าอย่างนั้นทำไมต้องใช้FS_METHOD = 'direct'?

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

คุณจะใช้define('FS_METHOD', 'direct' );ในสถานการณ์ที่เป็นเท็จเช่นนี้: คุณเป็นส่วนหนึ่งของทีมที่เชื่อถือได้ซึ่งสมาชิกทั้งหมดอัปโหลดไฟล์ผ่านบัญชีของตนเอง PHP ทำงานเป็นผู้ใช้แยกต่างหาก WordPress จะสมมติว่านี่เป็นสภาพแวดล้อมที่มีความเสี่ยงและจะไม่เริ่มต้นที่'direct'โหมด ในความเป็นจริงมันแชร์กับผู้ใช้ที่คุณเชื่อถือเท่านั้นและเนื่องจาก'direct'โหมดดังกล่าวปลอดภัย ในกรณีนี้คุณควรdefine('FS_METHOD', 'direct' );บังคับให้ WordPress เขียนไฟล์โดยตรง


1

มีสถานการณ์ 'กำหนดค่าอย่างดี' ซึ่ง 'โดยตรง' จะนำไปสู่ปัญหา

นอกจากนี้ยังเป็นไปได้ที่จะกำหนดค่า WP โฮสติ้งที่แชร์กับผู้ใช้งานที่ไม่ได้ใช้งาน PHP ซึ่งแตกต่างจากผู้ใช้ที่เป็นเจ้าของไฟล์ / ไดเรกทอรี ดังนั้นคุณจะจบลงด้วยไฟล์ที่เป็นของผู้ใช้ 1 และรหัส PHP จะถูกดำเนินการเป็น php-user1

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

ดังนั้นหากมีการตั้งค่าโฮสติ้งเช่นนั้นคุณต้องใช้ FTP สำหรับการอัปเดตและ 'โดยตรง' จะไม่ทำงาน

หากคุณตั้งค่า 'โดยตรง' ใน wp-config.php และผู้ใช้งานการดำเนินการ PHP ไม่ได้รับอนุญาตให้เขียนคุณจะได้รับข้อความอัปเดตที่ล้มเหลวและไม่มีป๊อปอัปที่ขอข้อมูลประจำตัว FTP

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