คุณสามารถเรียกใช้โปรแกรมผิด มีคนทำให้คุณรันโปรแกรมได้
การ-execdir
ดำเนินการรันคำสั่งของคุณจากไดเรกทอรีที่มีไฟล์ที่พบ เมื่อ$PATH
มีทางญาติเช่น.
หรืออะไรที่ไม่ได้เริ่มต้นด้วย/
, -execdir
ไม่ปลอดภัยเพราะไดเรกทอรีที่ไฟล์จะพบ (หรือไดเรกทอรีอื่นมีมติเมื่อเทียบกับมัน) นอกจากนี้ยังอาจมีปฏิบัติการที่มีชื่อเดียวกันกับที่คุณกำลังพยายาม วิ่ง. ปฏิบัติการที่ไม่น่าเชื่อถือที่อาจเกิดขึ้นนั้นจะถูกเรียกใช้แทน
นี่อาจเป็นการเอาเปรียบผู้ใช้รายอื่นโดยเจตนาเพื่อให้คุณเรียกใช้โปรแกรมของพวกเขาซึ่งอาจก่อให้เกิดอันตรายหรือละเมิดความปลอดภัยของข้อมูลแทนที่จะเป็นโปรแกรมที่คุณพยายามเรียกใช้ หรือน้อยกว่านั้นอาจส่งผลให้โปรแกรมทำงานผิดพลาดโดยไม่ตั้งใจแม้ว่าจะไม่มีใครพยายามทำให้ปัญหาเกิดขึ้น
หากทุกอย่างของคุณในPATH
ตัวแปรสภาพแวดล้อมเป็นเส้นทางแน่นอนข้อผิดพลาดนี้ไม่ควรเกิดขึ้นแม้ว่าไดเรกทอรีที่คุณค้นหาและกำลัง-execdir
ไอเอ็นจีจากจะPATH
มีอยู่ใน (ผมได้ตรวจสอบว่าการทำงานนี้.) หากคุณเชื่อว่าคุณไม่ได้มีญาติไดเรกทอรีใด ๆ ในแต่ยังคงได้รับข้อผิดพลาดนี้โปรดอัปเดตคำถามของคุณมีรายละเอียดรวมทั้งการส่งออกของ$PATH
echo "$PATH"
ตัวอย่างที่เป็นรูปธรรม
เป็นตัวอย่างของสิ่งที่ผิดพลาดไปสมมติว่า:
- อลิซมี
.
ในตัวเธอ$PATH
เพราะเธอต้องการที่จะสามารถเรียกใช้โปรแกรมในสิ่งที่ไดเรกทอรีเธอcd
'd ./
เพื่อโดยไม่ต้องรบกวนต้องเพิ่มชื่อของพวกเขาด้วย
- ความคลั่งไคล้ของอลิซได้แบ่งปัน
/home/eve/shared
กับอลิซแล้ว
- อลิซต้องการสถิติ (เส้นคำไบต์) ใน
.c
ไฟล์ที่ Eve ได้แบ่งปันกับเธอ
ดังนั้นอลิซจึงวิ่ง:
find ~eve/shared -name \*.c -execdir wc {} \;
แต่น่าเสียดายที่อลิซอีฟได้สร้างสคริปต์ของเธอเองตั้งชื่อมันwc
ตั้งปฏิบัติการ ( chmod +x
) /home/eve/shared
และวางมันลอบในหนึ่งในไดเรกทอรีที่อยู่ภายใต้ สคริปต์ของ Eve มีลักษณะเช่นนี้:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
ดังนั้นเมื่ออลิซใช้find
กับ-execdir
การทำงานwc
กับไฟล์อีฟได้ร่วมกันและจะได้รับไปยังไฟล์ในไดเรกทอรีเดียวกับที่กำหนดเองของอีฟwc
สคริปต์อีฟwc
วิ่ง - มีทั้งหมดของสิทธิพิเศษของอลิซ!
(การมีเล่ห์เหลี่ยมอีฟได้ทำให้wc
บทของเธอเป็นตัวคลุมสำหรับระบบwc
ดังนั้นอลิซจะไม่รู้ด้วยซ้ำว่ามีบางอย่างผิดปกตินั่นคือมันdo_evil
ถูกเรียกใช้อย่างไรก็ตามเรียบง่ายและซับซ้อนมากขึ้น )
วิธีfind
นี้ป้องกันได้
find
ป้องกันปัญหาด้านความปลอดภัยนี้ไม่ให้เกิดขึ้นโดยปฏิเสธที่จะ-execdir
ดำเนินการเมื่อ$PATH
มีไดเรกทอรีที่เกี่ยวข้อง
find
เสนอข้อความวินิจฉัยสองข้อความขึ้นอยู่กับสถานการณ์ที่เฉพาะเจาะจง
ถ้า.
อยู่ใน$PATH
นั้น (ตามที่คุณเห็น) มันพูดว่า:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
มันอาจมีข้อความพิเศษสำหรับ.
เคสเนื่องจากเป็นเรื่องธรรมดาโดยเฉพาะ
หากเส้นทางสัมพัทธ์อื่นที่ไม่ใช่ - .
พูดว่า - foo
ปรากฏขึ้น$PATH
และคุณวิ่งไปfind
ด้วย-execdir
มันบอกว่า:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
มันจะดีกว่าที่จะไม่มีทางญาติใน$PATH
เลย
ความเสี่ยงของการมี.
หรือเส้นทางญาติอื่น ๆ$PATH
มีความคิดริเริ่มโดยเฉพาะอย่างยิ่งเมื่อใช้ยูทิลิตี้ที่เปลี่ยนแปลงไดเรกทอรีโดยอัตโนมัติซึ่งเป็นเหตุผลที่find
จะไม่อนุญาตให้คุณใช้-execdir
ในสถานการณ์นี้
แต่การมีเส้นทางญาติโดยเฉพาะอย่างยิ่ง.
ในตัวคุณ$PATH
นั้นมีความเสี่ยงและหลีกเลี่ยงได้ดีที่สุด พิจารณาสถานการณ์สมมติในตัวอย่างด้านบน สมมติว่าแทนที่จะวิ่งfind
, อลิซก็cd
เพื่อและวิ่ง~eve/shared/blah
wc *.c
หากblah
มีwc
สคริปต์ของ Eve ให้do_evil
เรียกใช้เป็นอลิซ