ฉันจะตั้งค่าเครื่องมือแก้ไขของ sudo / visudo ได้อย่างไร?


17

ฉันใช้ Ubuntu 10.04 Server และพยายามตั้งค่า sudoers เพื่อเคารพตัวเลือกของผู้ใช้ (ภายในขีด จำกัด )

ใน sudoers ของฉันฉันมี:

Defaults        editor=/usr/bin/nano:/usr/bin/vim
Defaults        env_reset

และในผู้ใช้. bashrc:

export EDITOR=/usr/bin/vim

มีการตั้งค่า $ EDITOR:

$ echo $EDITOR
/usr/bin/vim

ตามman sudoersนี้ควรจะเพียงพอสำหรับ $ EDITOR ที่จะตั้งค่าเป็นกลุ่ม:

editor  A colon (':') separated list of editors allowed to be used with visudo.
        visudo will choose the editor that matches the user's EDITOR environment
        variable if possible, or the first editor in the list that exists and is
        executable. The default is the path to vi on your system.

อย่างไรก็ตามnanoยังคงมีการใช้งานสำหรับผู้ใช้รายนี้ ตรวจสอบอย่างรวดเร็วของ env:

$ sudo -- env | grep EDITOR

ไม่ส่งคืนอะไรเลย

$ sudo -E -- env | grep EDITOR

ผลตอบแทน EDITOR=/usr/bin/vim

ฉันทราบว่าฉันสามารถทำสิ่งต่อไปนี้เพื่อให้ EDITOR ทำงานได้:

  • ตั้งค่าenv_editor, env_keep+=EDITORหรือตัวเลือกอื่น ๆ ที่ช่วยให้ตัวแปร EDITOR ใน sudoers: ฉันไม่ต้องการที่จะทำเช่นนี้มันจะช่วยให้การดำเนินการโดยพลการของอะไร (เช่นexport EDITOR=~/bad_program_to_run_as_root)
  • ใช้งานsudo -Eหรือแม้กระทั่งalias sudo='sudo -E': เอาชนะจุดที่มีenv_resetและผู้ใช้ที่ไม่มี SETENV (ไม่ใช่สิ่งที่ฉันต้องการให้ออก: ดูจุดก่อนหน้า)sudo: sorry, you are not allowed to preserve the environment
  • ชุดeditor=/usr/bin/vim: แต่มีผู้ใช้รายอื่นที่ไม่ทราบว่าเป็นกลุ่ม
  • ใช้sudo select-editor: ปิด แต่sudo visudoยังคงเปิดอยู่nano
  • เพียงแค่ใช้ sudoedit หรือเป็นกลุ่มโดยตรง แต่แล้วคุณจะสูญเสียความปลอดภัยของเครื่องมือต่างๆเช่นvisudo, ,vipwcrontab -e
  • แค่จัดการกับมันอาจเป็นไปได้ แต่ถ้าฉันไม่มีข้อมูลเชิงลึกฉันก็อยากจะรู้

ฉันได้ลองตั้งค่าVISUALและSUDO_EDITORตัวแปร (ในความสิ้นคิด)

มีบางอย่างที่ฉันพลาดที่จะsudo visudoเปิดขึ้นในตัวเลือกผู้ใช้ที่เลือกโดยไม่ต้องประนีประนอมด้านบน?

แก้ไข:

ฉันคิดว่าฉันเข้าใจว่าทำไมสิ่งนี้ถึงไม่ทำงานอย่างที่ฉันคาดไว้ ฉันวางมันลงที่นี่ในกรณีที่คนอื่นมีความเข้าใจผิดเหมือนกัน

ในไฟล์ sudoers

Defaults        editor=/usr/bin/nano:/usr/bin/vim
  • อ้างถึงรายการของโปรแกรมแก้ไขที่ได้รับอนุญาตเมื่อทำงานเท่านั้นvisudo(ไม่ใช่โปรแกรมอื่น ๆ )
  • editorตรวจสอบ $ EDITOR แต่ถ้าทำงานsudo visudo, sudoไม่ได้กำหนด $ EDITOR ดังนั้นเมื่อvisudoทำงานก็จะเป็นที่ว่างเปล่า
  • ดังนั้นจึงใช้ตัวแก้ไขแรกในกรณีนี้ nano

มีใครยืนยันได้ไหมว่าสิ่งนี้ถูกต้อง?

ฉันคาดหวังว่าโซลูชันที่ปลอดภัยจะต้องเพิ่ม:

Defaults!/usr/sbin/visudo env_keep+=EDITOR

คือเก็บ EDITOR ถ้าเพียงและถ้าทำงาน visudo นี้จะถูกตรวจสอบกับ

Defaults                  editor=/usr/bin/nano:/usr/bin/vim

และถ้ามันไม่ตรงกันก็จะใช้ nano

แม้ว่าจะแปลก แต่ก็ไม่ได้เป็นเช่นนั้น:

$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged

/bin/echoใช้เป็นเครื่องมือแก้ไข ข้อผิดพลาด? หรือความเข้าใจผิดอื่น

ขอบคุณ

คำตอบ:


6

คุณมีสิทธิที่การตั้งค่าตัวแปรควรเปลี่ยนแก้ไขที่ใช้สำหรับEDITOR sudoแต่มีสองตัวแปรอื่น ๆ ที่มีความสำคัญเหนือEDITOR: และSUDO_EDITOR VISUALตรวจสอบให้แน่ใจไม่มีของพวกเขาชี้ไปที่บางแก้ไขอื่น ๆ nanoเช่น


เหตุผลที่ฉัน upvoted เป็นเพราะคำตอบไม่กี่เพื่อให้การอ้างอิงถึงการมีความสำคัญมากกว่าVISUAL EDITORฉันคิดว่าEDITORตัวแปรของฉันเพิ่งถูกเพิกเฉย ปรากฎใน Centos7 ทั้งสองEDITORและดูเหมือนจะเริ่มต้นกับVISUAL pico
สาม

5

มีวิธีแก้ไขปัญหาอื่นตามที่อธิบายไว้ที่นี่ :

sudo update-alternatives --config editor

แต่มันไม่เป็นมิตรกับระบบที่มีผู้ใช้หลายคนเนื่องจากจะอัพเดต symlink ใน/usr/bin/:

$ ls -l `which editor`
lrwxrwxrwx 1 root root 24 lip  4 19:37 /usr/bin/editor -> /etc/alternatives/editor

$ ls -l /etc/alternatives/editor
lrwxrwxrwx 1 root root 18 Jul  5 01:39 /etc/alternatives/editor -> /usr/bin/vim.basic

เกิดอะไรขึ้นกับselect-editorล่ะ? เมื่อฉันเรียกใช้มันสร้างไฟล์:

$ ls -l .selected_editor 
-rw-r--r-- 1 rld rld 75 Jul  5 01:54 .selected_editor

$ cat .selected_editor 
# Generated by /usr/bin/select-editor
SELECTED_EDITOR="/usr/bin/vim.basic"

แต่sudo visudoใช้นาโนต่อไป


3

ใน Debian 7 การตั้งค่า EDITOR ในสภาพแวดล้อมไม่ทำงาน

หากต้องการใช้ Nano ฉันลงเอยด้วยการเพิ่มบรรทัดต่อไปนี้ลงใน /etc/sudoers

Defaults        editor="/usr/bin/nano"

ทำงานเหมือน CHAMP บน DigitalOcean Ubuntu 12.04 ขอบคุณ
Joe Codeswell user601770

ขอบคุณ. สิ่งนี้ยังทำงานกับ Oracle Linux (ฉันชอบ nano / pico)
MikeP

1

env_reset ไม่ให้ผู้ใช้ตั้งค่าตัวแปรในบรรทัดคำสั่ง:

$ sudo EDITOR=vim -- env |grep EDIT
EDITOR=vim

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

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