วิธีการตั้งค่าเส้นทางสำหรับคำสั่ง sudo


37

ถ้าฉันออก

sudo my-command

Linux มองหาสิ่งนั้นmy-commandอย่างไร

my-commandอยู่ในเส้นทางของฉัน ฉันสามารถเรียกใช้ได้โดยไม่มีปัญหา แต่เมื่อฉันเรียกมันด้วยผมจะได้รับsudo command not foundที่น่าสนใจไม่เคยสัมผัสกับสิ่งนี้มาก่อน จะเอาชนะได้อย่างไร?

แก้ไข:นั่น"ที่ซ้ำกันที่เป็นไปได้" 's คำตอบที่เลือกไม่ถูกต้องดีอย่างน้อยไม่ถึงจุด คำตอบนี้จาก terdon เป็นคำตอบที่ถูกต้อง

คำตอบ:


48

แห่งนี้ตั้งอยู่ตามปกติโดยตัวเลือกในsecure_path /etc/sudoersจากman sudoers:

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

หากต้องการเรียกใช้คำสั่งที่ไม่ได้อยู่ในค่าเริ่มต้น$PATHคุณสามารถทำได้

  1. ใช้เส้นทางแบบเต็ม: sudo ~/bin/my-command; หรือ

  2. secure_pathเพิ่มไดเรกทอรีที่มีคำสั่งไปยัง เรียกใช้sudo visudoและแก้ไขเส้นทางที่ปลอดภัย:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    บันทึกไฟล์และครั้งต่อไปที่คุณเรียกใช้sudoไดเรกทอรี~/binจะอยู่ใน$PATHนั้น


2
หรือเพียงแค่แสดงความคิดเห็นออกทั้งบรรทัดหากนี่ไม่ใช่เครื่องจักรที่ใช้ในการผลิตและเราไม่สนใจ จากนั้นจะใช้เส้นทางของผู้ใช้ มันบอกว่ามันไม่ได้ตั้งค่าเริ่มต้น แต่นั่นอาจไม่เป็นความจริงเสมอไป ...
Nagev

2

นี่คือสิ่งที่ฉันใช้สำหรับการแก้ปัญหา:

sudo cp $(which my-command) /usr/bin
...

whichคำสั่งจะถูกดำเนินการใน subshell ที่เป็นที่ไม่ใช่รากเพื่อให้มันสามารถที่จะหาmy-commandแล้ว sudo สำเนาปฏิบัติการเพื่อเส้นทางที่rootเข้าถึงผู้ใช้สามารถ ไม่ดีสำหรับการรักษาความปลอดภัย แต่มันก็โอเคสำหรับฉันที่เรียกใช้อิมเมจนักเทียบท่าที่ถูกทำลายหลังจากคำสั่งรัน

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