คำสั่ง sudo ไม่ได้มา /root/.bashrc


27

ฉันได้เพิ่มพา ธ ที่กำหนดเองไปยังPATHตัวแปรในไฟล์ /root/.bashrc ของฉัน

เมื่อฉันทำsudo su; echo $PATHมันจะแสดงรายการ '/ path / to / custom / bins'

แต่ฉันทำsudo sh -c 'echo $PATH'มันแสดงให้เห็นว่า /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

เส้นทางโฟลเดอร์ที่เพิ่มในไฟล์. bashrc จะมองไม่เห็น

คำสั่ง sudo ไม่มีสภาพแวดล้อมเดียวกันกับผู้ใช้รูทหรือไม่?

sudo  bashrc 

คำตอบ:


32

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

sudo sh -c 'echo $PATH'หรือsudo bash -c 'echo $PATH'ไม่เรียกใช้เชลล์แบบโต้ตอบดังนั้นจึง.bashrcไม่เกี่ยวข้อง

sudo su; echo $PATHรันอินสแตนซ์แบบโต้ตอบของเชลล์รูท ถ้าทุบตีแล้ว~root/.bashrcโหลด ตัวอย่างนี้เรียกใช้งานecho $PATHเมื่อเชลล์แบบโต้ตอบนี้สิ้นสุดลงดังนั้นสิ่งที่เกิดขึ้นในเชลล์แบบโต้ตอบจะไม่มีผลกับสิ่งที่ตัวอย่างข้อมูลพิมพ์ในตอนท้าย แต่ถ้าคุณพิมพ์echo $PATHพรอมต์ของเปลือกโต้ตอบที่ตั้งขึ้นโดยคุณจะเห็นชุดค่าโดยsudo su~root/.bashrc

เนื่องจาก.bashrcถูกเรียกใช้ในแต่ละเชลล์แบบโต้ตอบไม่ใช่โดยเชลล์ล็อกอิน (ไม่ใช่แม้แต่เชลล์ล็อกอินแบบโต้ตอบซึ่งเป็นข้อบกพร่องการออกแบบในการทุบตี) มันเป็นสถานที่ที่ผิดที่จะกำหนดตัวแปรสภาพแวดล้อม ใช้.bashrcสำหรับการตั้งค่า bash แบบโต้ตอบเช่นการเชื่อมโยงคีย์นามแฝงและการตั้งค่าความสมบูรณ์ ตั้งค่าตัวแปรสภาพแวดล้อมในแฟ้มที่จะโหลดเมื่อคุณเข้าสู่ระบบ: หรือ~/.pam_environment~/.profile

ดังนั้นการตั้งค่าPATHใน.profileแทน.bashrcและทั้งเรียกใช้เปลือกเข้าสู่ระบบด้วยsudo -i 'echo $PATH'หรืออย่างชัดเจนแหล่งที่มาด้วย.profilesudo sh -c '. ~/.profile; echo $PATH'


1
ได้กล่าวถึงประเด็นที่เกี่ยวข้องมากมายเกี่ยวกับหอย .... ขอบคุณ ....

1
ฉันจะเพิ่มลงในได้.profileอย่างไร คุณหมายถึง/root/.profileหรือ/home/user/.profile? ฉันพยายามเพิ่มexport PATH=$PATH:/mydirทั้งสองอย่าง ใช้งานไม่ได้ ฉันลองโดยexportที่ไม่ได้ผล
falsePockets

@fullPockets ไม่ได้ทำงานเพื่ออะไร คุณควรถามคำถามใหม่และอธิบายสิ่งที่คุณทำ
Gilles 'หยุดความชั่วร้าย' ใน

สิ่งที่ไม่ได้ผลเป็นสิ่งเดียวกันที่ OP พยายามทำ ฉันกำลังพยายามเพิ่มไดเรกทอรีไปยัง PATH ของ superuser ของฉัน ฉันไม่ควรถามคำถามใหม่เนื่องจากคำถามนั้นจะซ้ำกับคำถามนี้
falsePockets

@fullPockets แต่เห็นได้ชัดว่าคุณไม่ได้ทำสิ่งเดียวกันเพื่อเข้าถึงบัญชี superuser และเนื่องจากคุณไม่ได้พูดในสิ่งที่คุณกำลังทำฉันไม่สามารถช่วยเหลือคุณได้นอกจากการทำซ้ำสิ่งที่มีอยู่แล้วในคำตอบของฉัน
Gilles 'หยุดความชั่วร้าย'

14

ดูที่-Eและ-iตัวเลือก

-E: ระบุถึงนโยบายความปลอดภัยที่ผู้ใช้ต้องการเก็บรักษาตัวแปรสภาพแวดล้อมที่มีอยู่ นโยบายความปลอดภัยอาจส่งคืนข้อผิดพลาดหากผู้ใช้ไม่มีสิทธิ์ในการรักษาสิ่งแวดล้อม

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


3

คุณสามารถทำได้sudo bashซึ่งจะอ่านbashไฟล์เริ่มต้นตามที่ระบุไว้ในbashหน้าเอกสาร / คู่มือ อย่างไรก็ตามโปรดทราบว่ามันอาจไม่ได้ตั้งค่าHOMEตัวแปรสภาพแวดล้อมอย่างถูกต้อง สามารถแก้ไขได้ในbashไฟล์เริ่มต้นทั้งระบบ (ใน/etcตำแหน่งที่แน่นอนขึ้นอยู่กับ distro) - ทดสอบว่า$uidเป็น 0 หรือไม่

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