`/ etc / sudoers` - ระบุ` env_keep` สำหรับคำสั่งเดียวเท่านั้น?


23

มีวิธีการระบุที่sudoควรรักษาตัวแปรสภาพแวดล้อมบางอย่างสำหรับคำสั่งที่ระบุเท่านั้นหรือไม่ สำหรับวัตถุประสงค์บางอย่างฉันต้องการ$HOMEenv ของฉัน ตัวแปรเก็บรักษาไว้เมื่อฉันรันคำสั่งบางอย่าง สำหรับวัตถุประสงค์อื่นและคำสั่งอื่น ๆ ฉันต้องการให้รีเซ็ต สามารถทำได้ด้วย/etc/sudoersหรือไม่

แก้ไข:

ขอบคุณสำหรับคำตอบ ฉันสงสัยว่าฉันอาจถามคำถามติดตามซึ่งก็คือ "ทำไมจึงไม่ได้ผล?"

ในตัวอย่างที่ผมกำลังพยายามที่จะได้รับการทำงานที่ผมต้องการที่จะอ่านของฉันsudo nano $HOME/.nanorcถ้าฉันใช้สิ่งนี้:

Defaults:simon env_keep=HOME

มันทำงานได้อย่างสมบูรณ์แบบ ถ้าฉันใช้สิ่งนี้:

Defaults!/bin/nano env_keep=HOME

หรือสิ่งนี้:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

มันไม่ทำงานเลย ข้อเสนอแนะใด ๆ เกี่ยวกับสาเหตุที่? (ฉันใช้การทดสอบเดเบียน, btw.)

(หมายเหตุ: ผมไม่คิดว่ามันnanoเฉพาะครับ - ฉันสามารถทำซ้ำพฤติกรรมกับสคริปต์ทุบตีหนึ่งบรรทัดที่เพียงechos $HOME)


1
แทนที่จะพยายามทำให้ nano วิ่งผ่าน sudo เพื่อใช้ไฟล์ config เดียวกันให้ใช้sudoeditแทน sudoeditจะเรียกใช้คัดลอกเนื้อหาของไฟล์ไปยังไฟล์ tmp และเรียกใช้ตัวแก้ไขที่คุณเลือกในฐานะผู้ใช้ของคุณเมื่อตัวแก้ไขออกจากมันจะตรวจสอบว่าคุณเปลี่ยนแปลงอะไรหรือไม่และถ้าเป็นเช่นนั้นแทนที่ต้นฉบับด้วยตัวแก้ไข คุณสามารถเลือกเครื่องมือแก้ไขที่คุณต้องการให้เรียกใช้โดยการตั้งค่า$EDITORหรือ $ VISUAL` env vars
Arrowmaster

@ Arrowmaster - ขอบคุณดูเหมือนว่าวิธีการที่ดีกว่าที่ฉันทำไปด้วย ตั้งแต่ฉันแล้วห่อsudoด้วยฟังก์ชั่นของตัวเองผมได้เพิ่มเพียงif [ "$1" == "$EDITOR" ]; thenบล็อกและตอนนี้ฉันเรียกsudoeditแทน :)
simon

คำตอบ:


21

ในการลบล้างenv_keepเฉพาะสำหรับ/path/to/command(เมื่อเรียกใช้ผ่านกฎใด ๆ โดยผู้ใช้ใด ๆ ) และสำหรับผู้ใช้joe(ไม่ว่าคำสั่งใดที่เขาใช้อยู่):

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

คุณสามารถใช้-=หรือ+=เพื่อลบหรือเพิ่มรายการในenv_keepรายการ


ยอดเยี่ยมขอบคุณ ฉันไม่พบตัวอย่างที่ถูกต้องของไวยากรณ์นั้น ตอนนี้คุณสะกดมันออกมาสำหรับฉันฉันสามารถดูว่าฉันควรจะทำงานออกจากmanหน้าและฉันรู้สึกโง่เล็กน้อย ไม่ต้องสงสัยเลยว่าคำตอบนี้จะช่วยผู้อื่นด้วย
simon

1
@simon: อย่ารู้สึกโง่เขลาฉันก็พบว่าคำอธิบายไวยากรณ์ในsudoersman page นั้นยากที่จะหาคำอธิบายที่เป็นทางการและตัวอย่างง่าย ๆ ในการค้นหาถ้าคุณรู้วิธีเขียนแล้ว
Gilles 'หยุดความชั่วร้าย'

อืม - ฉันอาจจะพูดในไม่ช้า ตอนนี้ฉันลองแล้วฉันไม่สามารถใช้งานได้จริง ฉันจะรบกวนให้คุณดูการแก้ไขของฉันได้ไหม?
simon

1
@simon: ฉันเดาว่าคุณมีรายการที่ให้คุณทำทุกอย่างและไม่มีenv_keepการตั้งค่านั้น( simon ALL = ALL) Sudo ใช้รายการที่ตรงกันล่าสุด
Gilles 'หยุดความชั่วร้าย' ใน

ระวังหากตั้งค่า secure_path คุณจะต้องเพิ่มค่าเริ่มต้น: joe! secure_path
Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

บรรทัดเหล่านั้นมาจากของฉันเอง/etc/sudoersเพื่อแก้ไขปัญหาที่pbuilderค้นหาใน$HOMEไฟล์กำหนดค่าผู้ใช้ แต่ต้องเรียกใช้ในฐานะรูท (การย้ายไฟล์ไป/rootยังจุดประสงค์เพื่อเอาชนะทั้งระบบและไฟล์กำหนดค่าผู้ใช้)


ใช่มันเป็นกรณีการใช้งานที่คล้ายกันมากกับที่ฉันมีในใจขอบคุณ!
simon

คุณมีความคิดใด ๆ หรือไม่ว่าทำไมตัวอย่างในการแก้ไขของฉันจึงไม่ทำงาน
simon

@simon sudo ค่อนข้างพิถีพิถันเกี่ยวกับลำดับของรายการในการกำหนดค่ารายการในภายหลังจะเขียนทับรายการก่อนหน้า อาจมีข้อขัดแย้งเช่นนี้ในการกำหนดค่าของคุณ
Arrowmaster

1

ผู้ชาย sudoers:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, 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.

ดังนั้นใช่คุณสามารถทำเช่นนั้นได้ใช้env_reset, env_keepและenv_checkในของคุณ / etc / sudoers

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