ทำไม $ HOME ถึงไม่เปลี่ยนถ้าฉันใช้ sudo


15

ฉันคาดว่าจะมีตัวเลือก -H เพื่อมอบสภาพแวดล้อมของผู้ใช้เป้าหมายให้ฉัน

nbest @ geo: ~ $ sudo -H -u tanum echo $ HOME
/ home / nbest
nbest @ geo: ~ $ sudo -u tanum echo $ HOME
/ home / nbest
nbest @ geo: ~ $ sudo -i -u tanum echo $ HOME
/ home / nbest
nbest @ geo: ~ $ sudo -H -i -u tanum echo $ HOME
/ home / nbest

สิ่งนี้จะช่วยให้ฉันพูดว่า:

sudo -u tanum ls ~

และรับรายชื่อไดเรกทอรีบ้านของผู้ใช้เป้าหมาย ไม่ใช่กรณี สิ่งนี้เกิดจากenv_resetค่าเริ่มต้นsudoersหรือไม่

ถ้าเป็นเช่นนั้น -H มีผลกระทบอะไรบ้าง? วิธีที่ปลอดภัยที่สุดในการลบล้างพฤติกรรมนี้คืออะไร

หากไม่ใช่สิ่งที่ตั้งใจไว้ของ -H คืออะไร?

กรุณาตั้งฉันตรง

คำตอบ:


16

$HOMEและ~ได้รับการขยายตัวของechoเปลือกพวกเขาจะไม่ตีความโดย

กล่าวอีกนัยหนึ่งechoไม่เห็น$HOMEว่าเป็นข้อโต้แย้ง /home/nbestมันจริงเห็น ดังนั้นคำสั่งดังต่อไปนี้ตรงเหมือนกัน (ในกรณีของคุณ):

nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest

สิ่งที่คุณพยายาม ( -H,, -i... ) คุณจะไม่ได้รับพฤติกรรมที่ต้องการ เพราะ$HOMEถูกแทนที่ด้วยเปลือกของคุณและเปลือกของคุณทำงานในฐานะผู้ใช้ของคุณ sudoไม่ส่งผลกระทบต่อเชลล์ของคุณ แต่อย่างใด


หากต้องการแก้ไข 'ปัญหา' (ซึ่งจริง ๆ แล้วเป็นฟีเจอร์) คุณสามารถเริ่มต้น subshell ใหม่:

nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'

(โปรดทราบว่าฉันใช้เครื่องหมายคำพูดเดี่ยวเพื่อหลีกเลี่ยงการขยาย) วิธีนี้เชลล์ใหม่shจะทำงานในฐานะผู้ใช้แทนและพิมพ์โฮมไดเร็กตอรี่ของเขา


เป็นอีกทางเลือกหนึ่งคือการใช้งาน~usernameที่ได้รับการขยายตัวไปยังบ้านของผู้ใช้นั้นโดยไม่จำเป็นต้องใช้หรือsudo suลอง:

nbest@geo:~$ echo ~tanum

1
แน่นอน. น่าอายแค่ไหน! sudo do what I mean
นีลที่ดีที่สุด

1
มันไม่ได้ผลสำหรับฉัน เช่นsudo -H -u buildbot bash -c "echo $HOME"ให้ฉัน/home/ubuntuซึ่งเป็นผู้ใช้เริ่มต้นในบางภาพอูบุนตู
Cerin

@Cerin ใช้เครื่องหมายคำพูดเดี่ยวเพื่อป้องกันการขยาย:sh -c 'echo $HOME'
Andrea Corbellini

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