มันปลอดภัยที่จะเพิ่ม เส้นทางของฉัน มาทำไม


49

ฉันเคยเห็นผู้คนพูดถึงคำตอบอื่น ๆ ว่าเป็นความคิดที่ดีที่จะรวมไดเรกทอรีการทำงานปัจจุบัน (' ') ในตัวแปรสภาพแวดล้อมของคุณแต่ไม่สามารถค้นหาคำถามเพื่อแก้ไขปัญหาได้โดยเฉพาะ.$PATH

ดังนั้นทำไมฉันไม่ควรเพิ่ม.เส้นทางของฉัน และแม้ว่าจะมีคำเตือนทั้งหมดที่ฉันทำอยู่แล้วฉันต้องระวังอะไรบ้าง ปลอดภัยกว่าที่จะเพิ่มไปยังจุดสิ้นสุดมากกว่าการเริ่มต้นหรือไม่


คำตอบ:


39

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

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

อย่างไรก็ตามหากคุณกำลังจะเพิ่มลง.ในของคุณPATHฉันขอแนะนำให้ผนวกท้ายรายการ ( export PATH=$PATH:.) อย่างน้อยคุณจะไม่แทนที่ไบนารีของระบบด้วยวิธีนี้

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


1
+ ยอมรับทฤษฎีพื้นฐานและกล่าวถึงว่าปัญหายังคงมีอยู่แม้ว่าคุณจะเป็นผู้ใช้คนเดียวในระบบ คำตอบทั้งคู่นำมาซึ่งคะแนนที่ยอดเยี่ยม ฉันจะเพิ่มว่าเมื่อใดก็ตามที่คุณแบ่งปันไดเรกทอรีกับผู้ใช้รายอื่นมีความเสี่ยงเพิ่มขึ้นไม่ว่าคุณจะรูทหรือไม่ก็ตาม
Jander

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

35

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

กรณีที่เลวร้ายที่สุดเกิดขึ้นเมื่อ:

  • คุณเข้าสู่ระบบในฐานะ root เนื่องจากคำสั่งที่เป็นอันตรายมีพลังทำลายไม่ จำกัด
  • .อยู่ที่จุดเริ่มต้นของ PATH ของคุณเนื่องจากคำสั่งมาตรฐานสามารถแทนที่ได้โดยที่คุณไม่ต้องสังเกต (โดยปกติจะเป็นคำสั่งlsที่สามารถซ่อนตัวเองจากรายการ)

ความเสี่ยงจะต่ำกว่ามากหากคุณเข้าสู่ระบบในฐานะผู้ใช้ทั่วไปและมี.ที่ส่วนท้ายของ PATH ของคุณ แต่ยังคงมีอยู่:

  • บางคนอาจพบว่าคุณพิมพ์คำสั่งผิดบ่อยๆและติดตั้งคำที่ตรงกัน
  • บางคนอาจติดตั้งคำสั่งปลอมด้วยชื่อของคำสั่งที่ไม่ได้ติดตั้ง

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


15
ติดตั้งslเพื่อดูว่ามีจุด 3 เกิดขึ้นบ่อยแค่ไหน
jordanm

alias l=`ls`หรือ
Anko

ไม่จำเป็นต้องเป็นอันตราย ฉันคาดว่าlsจะได้รับรายชื่อไดเรกทอรี แต่บางโครงการที่ฉันดาวน์โหลดอาจมีlsสคริปต์ในโฟลเดอร์โครงการรากเป็นทางลัดไปยังสิ่งอื่น lsอาจเป็นตัวอย่างที่ไม่ดี แต่ฉันสามารถจินตนาการถึงeการแก้ไขdการดีบักmการทำbเพื่อการสร้างได้ ฉันมีบางอย่างของตัวเองทั่วโลก หากฉันพิมพ์mฉันคาดว่าจะเปิดใช้งาน (ทางลัด) จะไม่มีสคริปต์ในเครื่องบางตัวถูกเรียกmให้ทำงาน
gman

@gman ถูกต้อง คำสั่งที่ไม่เป็นอันตรายอาจมีผลกระทบโดยไม่เจตนา โปรดทราบว่าคำสั่ง / นามแฝงตัวอักษรเดียวถูกขมวดคิ้วนับตั้งแต่การก่อตั้ง Unix เนื่องจากมีความเสี่ยงสูงจากการพิมพ์ผิด มาตรฐานที่หายากคือwและ[.
jlliagre

3

แม้ว่าคุณจะเสมอระมัดระวังกับสิ่งที่คุณพิมพ์วาง.ที่คุณPATHแม้ในท้ายที่สุดก็ยังคงไม่ปลอดภัยเพราะบางโปรแกรมเปลี่ยนไดเรกทอรีปัจจุบัน/tmp(ซึ่งสามารถเขียนได้ในโลก) และอาจจะพยายามดำเนินการสาธารณูปโภคที่เป็นจริงไม่ได้ติดตั้ง /tmpจึงผิดนัดสิ่งที่อยู่ใน หากสิ่งนี้เกิดขึ้นนี่เป็นเวคเตอร์ของการโจมตี

ยังทราบว่ามีไม่ได้เป็นอุปสรรคมากในการหลีกเลี่ยง.ในPATHเพราะ./เป็นเรื่องง่ายที่จะพิมพ์ (โดยเฉพาะอย่างยิ่งบนแป้นพิมพ์ QWERTY เหมือนที่ตัวละครเหล่านี้อยู่ในคีย์ติดต่อกันและไม่จำเป็นต้องกดปุ่ม Shift) และการใช้./ยังจะช่วยให้เสร็จสิ้นจึงอาจเกิดการประหยัดการกดแป้นพิมพ์ ในตอนท้าย

หากคุณต้องการพิมพ์คำสั่งจากไดเรกทอรีปัจจุบันจริงๆแล้วเชลล์สมัยใหม่ (เช่น zsh พร้อมกับcommand_not_found_handler) อาจมีคุณสมบัติที่จะทำอย่างปลอดภัยนั่นคืออนุญาตให้คุณเพิ่มการตรวจสอบความปลอดภัยทั้งหมดที่คุณต้องการในตัวจัดการก่อน คำสั่งถูกดำเนินการ

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