การตั้งค่าเส้นทางเพื่อใช้กับผู้ใช้ทั้งหมดรวมถึงรูท / sudo


41

คำแนะนำในฉันจะตั้งค่าตัวแปร PATH สำหรับผู้ใช้ทั้งหมดบนเซิร์ฟเวอร์ได้อย่างไร ทำงานเพื่อตั้งค่าเส้นทางสำหรับผู้ใช้ 'ปกติ' ทั้งหมด อย่างไรก็ตามถ้าฉันทำsudo -sแล้วprintenv PATHเส้นทางที่อัปเดตจะไม่ปรากฏขึ้น ฉันดูที่การตั้งค่าเส้นทางของ TeX Live สำหรับรูท แต่นี่ดูเหมือนจะไม่สมเหตุสมผลสำหรับฉันบางทีอาจเป็นเพราะฉันมาจากพื้นหลังของ Windows มีวิธีใดบ้างในการตั้งค่าพา ธ ทั้งระบบอย่างแท้จริงเช่นว่ารายการจะได้รับการสืบทอดโดยทุกกระบวนการที่ทำงานบนระบบหรือไม่?

คำตอบ:


43

ปรับปรุง:

การตั้งค่าตัวแปรสภาพแวดล้อมทั่วโลกควรจะยังคงดำเนินการ/etc/environmentแต่เมื่อคุณชี้ให้เห็นว่าการใช้sudo -sมีผลกระทบของตัวแปรเหล่านี้คือ "หายไป"

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

/etc/sudoers:

Defaults  env_reset
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

ดังนั้นสิ่งที่ตั้งอยู่ในเส้นทางถูกแทนที่โดย/etc/environmentsudo

หน้าคู่มือสำหรับsudoersรัฐ:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller's environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

คุณสามารถใช้งานได้sudo suว่าจะให้เชลล์ที่มีสิทธิ์รูท แต่มี PATH ที่เหมาะสม


คำตอบเดิม

/etc/environmentคุณควรกำหนดไว้ใน

ลองsudo YOUR_TEXT_EDITOR /etc/environment(ให้แน่ใจว่าได้สร้างการสำรองข้อมูลก่อน)

สำหรับข้อมูลเพิ่มเติม: EnvironmentVariables

ตัวแปรสภาพแวดล้อมทั้งระบบ

การตั้งค่าตัวแปรสภาพแวดล้อมที่ส่งผลกระทบต่อระบบโดยรวม (ไม่ใช่แค่ผู้ใช้เฉพาะ) ไม่ควรอยู่ในสคริปต์ระดับระบบใด ๆ ที่ได้รับการดำเนินการเมื่อมีการโหลดระบบหรือเซสชันเดสก์ท็อป

/etc/environment- ไฟล์นี้มีความหมายโดยเฉพาะสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบ ไม่ใช่ไฟล์สคริปต์ แต่ประกอบด้วยนิพจน์การกำหนดหนึ่งรายการต่อบรรทัด ไฟล์นี้จัดเก็บการตั้งค่าโลแคลและพา ธ ทั่วทั้งระบบ

ไม่แนะนำ:

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

/etc/bash.bashrc- นี่เป็นไฟล์ทั้งระบบ ~ / .bashrc Ubuntu ได้รับการกำหนดค่าตามค่าเริ่มต้นให้เรียกใช้ไฟล์นี้ทุกครั้งที่ผู้ใช้เข้าสู่เชลล์หรือสภาพแวดล้อมเดสก์ท็อป


อ่า: สำหรับฉันนี่เป็นสิ่งที่ผิดทุกอย่าง (ทุกคนควรสืบทอดเส้นทางเดิมช่วงเวลาเดียวกัน) แต่ฉันเดาว่ามันเป็นอย่างนั้น
Joseph Wright

คุณสามารถใช้visudo(ต้องการสิทธิ์รูท) เพื่อแก้ไขการตั้งค่าพา ธ ที่ปลอดภัย นี่ไม่ใช่วิธีปฏิบัติที่แนะนำ มันเป็นเพียงที่นี่เพื่อการศึกษา
Elliot Labs LLC

2

sudo -iจะจำลองการเข้าสู่ระบบ (ในลักษณะที่คล้ายกันsudo su -) และให้ตัวแปรสภาพแวดล้อมเหล่านี้แก่คุณ


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