ทำไมฉันถึงไม่สามารถ sudo คำสั่งบางอย่างได้? (เช่นเป็นกลุ่ม)


16

ฉันมีการเข้าถึง sudo บนเซิร์ฟเวอร์เพื่อนของฉันใช้งาน centos-6.3 แต่เมื่อฉันพยายามเรียกใช้คำสั่งบางอย่างเช่นsudo vim /var/www/html/index.htmlฉันได้รับข้อผิดพลาดsudo: vim: command not foundฉันสามารถทำได้ แต่ทำงานsudo suแล้วvim /var/www/html/index.htmlก็ทำงานได้ตามที่คาดไว้

echo $PATHและsudo echo $PATHผลผลิตทั้งสอง:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vim อย่างไรก็ตามอัตราผลตอบแทน:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

ฉันพยายามเพิ่ม

export PATH=$PATH:/usr/local/bin

ไป/root/.bashrcซึ่งเป็นแก้ไขปัญหาเมื่อใช้แต่ไม่ได้เป็นเพียงsudo susudo <command>

ฉันจะsudo <command>ไปทำงานได้อย่างไร


คุณได้เพิ่มผู้ใช้นั้นไปยัง sudoers ใน Centos OS แล้วหรือยัง
AAlvz

คำตอบ:


18

เมื่อรันsudoระบบหลายระบบจะถูกกำหนดค่าเพื่อล้างสภาพแวดล้อมของค่าที่ไม่ใช่รายการที่อนุญาตทั้งหมดและเพื่อรีเซ็ตตัวแปร PATH ให้เป็นค่าที่ถูกสุขลักษณะ

คุณจะได้พบกับอดีตDefaults env_resetและอีกหลายในDefaults env_keep += "SOME_VARIABLE_NAME" แทนที่/etc/sudoers"ปลอดภัย" หลังPATHถูกระบุเป็นDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- ลบบรรทัดนี้เพื่อลบพฤติกรรมนี้เมื่อsudoไอเอ็นจี


วิธีซึ่งตัวแปรสภาพแวดล้อมมีการจัดการที่ถูกพิมพ์เมื่อคุณเรียก  ว่าเป็นsudo -Vroot


หากคุณไม่ต้องการกำจัดค่าเริ่มต้นเหล่านี้คุณสามารถระบุโปรแกรมโดยใช้พา ธ แบบเต็ม ( sudo /usr/local/bin/vim)

อีกทางหนึ่งคุณสามารถอนุญาตให้บัญชีของคุณSETENVในsudoersไฟล์ตัวอย่างเช่น:

%wheel  ALL=(ALL)       SETENV: ALL

สิ่งนี้ช่วยให้คุณสามารถแทนที่ค่าปริยายของสภาพแวดล้อมเช่นนี้: sudo PATH=$PATH which vimเนื่องจากตัวแปรนั้นถูก intepreted โดยเชลล์ของคุณก่อนที่คำสั่งจะถูกเรียกใช้งานส่งผลให้เกิดการสืบทอดPATH(ซึ่งอาจไม่รวมถึง/sbinฯลฯ )


ขอบคุณ ฉันจะใช้การทำงานของเดนนิสจนกว่าฉันจะได้เจ้าของเพื่อชมไฟล์ sudoers
JaredMcAteer

6
sudo echo $PATH

ไม่ได้ทำในสิ่งที่คุณคิด $PATHได้รับการแทนที่ด้วยเปลือก (ของคุณ) ก่อนที่จะรันคำสั่ง

sudo -iเพื่อให้บรรลุพฤติกรรมที่ต้องการคุณสามารถใช้

จากman sudo :

-i [คำสั่ง]

-i ( เข้าสู่ระบบเริ่มต้นจำลอง ) ตัวเลือกที่ทำงานเปลือกที่ระบุไว้ในpasswdรายการ (5) ของผู้ใช้เป้าหมายเป็นเปลือกเข้าสู่ระบบ ซึ่งหมายความว่าไฟล์ทรัพยากรเฉพาะการเข้าสู่ระบบเช่น.profileหรือ.loginจะถูกอ่านโดยเชลล์ หากระบุคำสั่งคำสั่งจะถูกส่งไปยังเชลล์เพื่อดำเนินการ


1
นี่เป็นวิธีแก้ปัญหาที่เหมาะสมจนกว่าฉันจะได้รับเจ้าของเพื่อปรับไฟล์ sudoers
JaredMcAteer

1

ฉันจะsudo <command>ไปทำงานได้อย่างไร

จนกว่าคุณจะแก้ไขปัญหาเกี่ยวกับเส้นทางให้ใช้ชื่อพา ธ เต็ม

  sudo /usr/local/bin/vim /var/www/html/index.html

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