ผ่าน PATH ผ่าน sudo


13

ในระยะสั้น : วิธีที่จะทำให้ sudo ไม่ล้างเส้นทางทุกครั้งหรือไม่

ฉันมีบางเว็บไซต์ที่ใช้งานบนเซิร์ฟเวอร์ของฉัน (การทดสอบ Debian) เขียนด้วย Ruby on Rails ฉันใช้ Mongrel + Nginx เพื่อโฮสต์พวกเขา แต่มีปัญหาหนึ่งที่เกิดขึ้นเมื่อฉันต้องรีสตาร์ท Mongrel (เช่นหลังจากทำการเปลี่ยนแปลงบางอย่าง)

ไซต์ทั้งหมดได้รับการตรวจสอบใน VCS (git แต่ไม่สำคัญ) และมีการตั้งค่าเจ้าของและกลุ่มให้กับผู้ใช้ของฉันในขณะที่ Mongrel ทำงานภายใต้ผู้ใช้ muhrel, huh, mongrel ที่ถูก จำกัด สิทธิ์อย่างรุนแรง ดังนั้น Mongrel จะต้องเริ่มต้นภายใต้รูท (สามารถเปลี่ยน UID ได้โดยอัตโนมัติ) หรือ mongrel

ในการจัดการ mongrel ฉันใช้ mongrel_cluster gem เพราะอนุญาตให้เริ่มหรือหยุดเซิร์ฟเวอร์ Mongrel จำนวนเท่าใดก็ได้ด้วยคำสั่งเดียว แต่มันต้องการไดเรกทอรี / var/lib/gems/1.8/bin เพื่อที่จะอยู่ใน PATH: นี่ไม่เพียงพอที่จะเริ่มด้วยเส้นทางที่สมบูรณ์ .

การปรับเปลี่ยน PATH ในรูท. bashrc ไม่มีการเปลี่ยนแปลงอะไรเลยการปรับแต่ง env_reset ของ sudo และ env_keep ก็ไม่เหมือนกัน

ดังนั้นคำถาม: วิธีเพิ่มไดเรกทอรีไปยัง PATH หรือทำให้ PATH ของผู้ใช้อยู่ใน sudo?

อัปเดต: ตัวอย่างบางส่วน

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

นอกจากนี้ฉันสามารถพูดได้ว่ามันทำงานได้ดีในเดเบียนคอกเทน (เลนนี่) เช่นกัน


1

คำตอบ:


12

ดิ้นรนกับปัญหาเดียวกันสองสามชั่วโมง ในเดเบียนเลนนี่คุณสามารถแก้ไขได้โดยการเพิ่ม

Defaults        exempt_group=<your group> 

ไปยังไฟล์ sudoers

นี่เป็นวิธีเดียวในการเลือกตัวเลือกเส้นทางที่ปลอดภัย - รวบรวม (เท่าที่ฉันรู้)

ยวดนี้จะ ด้วย ยกเว้นผู้ใช้ไม่จำเป็นต้องป้อนรหัสผ่านเมื่อพวกเขา sudo


3

ถ้าคุณมี secure_path ที่ตั้งอยู่ใน /etc/sudoersคุณสามารถเล่นกับ env_reset / env_keep สิ่งที่คุณชอบและมันจะไม่สร้างความแตกต่างให้กับเส้นทาง หากคุณเห็นอะไรเช่นนี้แสดงความคิดเห็น

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

ไม่แน่นอนมันไม่ได้ตั้งค่า
whitequark

0

ฉันว่าดูตัวเลือก env_reset และ env_keep ใน ผู้ชาย sudo . แต่ดูเหมือนว่าคุณได้ทำไปแล้ว (คุณเพิ่งโทรหา env_keep "keepenv" โดยไม่ตั้งใจ) ถ้าคุณ ปิดการใช้งาน ตัวเลือก env_reset (เปิดใช้งานเป็นค่าเริ่มต้น) ฉันคิดว่าไม่ควรลบ ใด ตัวแปร env แต่มันปลอดภัยน้อยกว่า

นอกจากนี้ยังมีตัวเลือก secure_path สำหรับ sudo; ฉันคิดว่านี่เปิดใช้งานโดยค่าเริ่มต้น คุณสามารถลองปิดการใช้งาน

อ็อพชันก่อนหน้านี้ถูกตั้งค่าในไฟล์ / etc / sudoers ของคุณ นอกจากนี้ยังมี -i ตัวเลือกบรรทัดคำสั่งเพื่อ sudo นั่นจะทำให้ sudo รัน /root/.profile หรือ /root/.login คุณสามารถกำหนดเส้นทางที่ต้องการได้


1
ไม่เมื่อปิด env_reset จะยังคงมีการเปลี่ยนแปลง (ไม่ลบ) PATH อาจเป็นไปได้ที่จะเพิ่ม / * / sbin dirs ไม่ได้ตัวเลือก -i ไม่เหมาะเพราะมันจะเริ่มเชลล์แบบโต้ตอบและฉันต้องการเพียงแค่เรียกใช้คำสั่ง
whitequark

โอเคปัญหาหายไปหลังจากติดตั้ง Debian อีกครั้ง (เนื่องจากการโยกย้ายไปยัง LVM) และ RubyGems คำตอบของคุณมีประโยชน์มากที่สุดเพื่อให้สามารถยอมรับได้ในขณะนี้
whitequark

-1

คุณทำอะไรผิดไป นอกจากนี้คุณไม่ได้ระบุสิ่งที่คุณทำกับไฟล์ / etc / sudoers ของคุณ นี่คือสิ่งที่คุณควรทำ - นี่คือระบบ CentOS, BTW:

ก่อนอื่นนี่คือด้วยการตั้งค่า env_keep ที่ถูกต้อง (สังเกตเห็น PATH อยู่ในนั้น):

sudo grep -5 PATH / etc / sudoers   ค่าเริ่มต้น env_keep = "สี DISPLAY HOSTNAME ความไม่ชัดเจนในการป้อน KDEDIR \                           LS_COLORS จดหมาย PS1 PS2 QTDIR ชื่อผู้ใช้ \                           LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \                           LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \                           LC_PAPER LC_TELEPHONE LC_TIME LC_ALL ภาษา LINGUAS LINGUAS \                           _XKB_CHARSET XAUTHORITY เส้นทาง "

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

ดูดี. ตอนนี้ลองลบการตั้งค่า env_keep แล้วลองอีกครั้ง:

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

เส้นทางที่น่าเศร้า:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin

1
ฉันตรวจสอบว่ามากกว่าสองครั้ง! ตรวจสอบการอัปเดตในโพสต์
whitequark

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