VIM:“ sudo vim bad_idea” หรือไม่


20

ผู้ใช้ irc ใน #Vim กระตุ้นให้ฉันไม่ใช้ Sudo กับ Vim เช่น:

sudo vim bad_idea

เมื่อฉันทำสิ่งต่าง ๆ ในสถานที่เช่น / var / www / ฉันไม่สามารถเขียนได้หากไม่มี ดังนั้นการไม่ใช้ sudo จึงกลายเป็นปัญหา แน่นอนฉันสามารถทำการเปลี่ยนแปลงในตำแหน่งที่ตั้งต่าง ๆ เช่น / tmp / แล้วคัดลอก dirs ไปยัง / var / www อย่างไรก็ตามฉันรู้สึกถึงวิธีที่ง่ายขึ้น

  1. หากคุณไม่ได้ "sudo Vim" ทำไม?
  2. ถ้าใช่กับคำถามที่ 1 คุณจะหลีกเลี่ยงปัญหาที่จะไม่ใช้ sudo ได้อย่างไร

คำตอบ:


35

ฉันตกอยู่ภายใต้หมวดหมู่แรก: sudo vim /var/www/html/some_fileเป็นความคิดที่ไม่ดี; มันช่วยให้เชลล์หนีที่ไม่ได้เข้าสู่ระบบ แทนการใช้sudoedit /var/www/html/some_file; ที่มีผลเหมือนกัน


5
"การหลบหนีของเชลล์ที่ไม่ได้เข้าสู่ระบบ" คืออะไร? และทำไมไม่สำคัญใน / var / www เท่านั้น?
hasen

6
เป็นกลุ่มมีอำนาจที่จะเรียกใช้คำสั่งอื่น ๆ ในบรรทัดคำสั่ง อย่างไรก็ตาม, เนื่องจาก vim เริ่มทำงานผ่าน sudo, และดังนั้นจึงรันเป็น root, คำสั่งใด ๆ เหล่านั้นจะรันด้วยสิทธิพิเศษรูท คำสั่งเหล่านี้เป็นที่รู้จักกันในชื่อ "shell escapes" และไม่ได้บันทึกการใช้งานการเรียกใช้ sudo อื่น ๆ และไม่ จำกัด เพียงแค่ / var / www; มีอยู่ทุกที่ที่ฉันจะใช้ ฉันใช้นามแฝงว่า "sudo vi" ถึง "sudoedit" ในไฟล์ bashrc ของฉัน
เควินเอ็ม

ฉันเห็นสิ่งที่คุณได้รับและต้องการเห็นด้วย แต่ชี้แจง เราไม่รู้ว่ากิจกรรมรูทปกติของ su และ sudo ของเขากำลังถูกบันทึกหรือไม่ "sudo vim" อนุญาตให้เรียกใช้ subshell เป็น root ซึ่งมีความแม่นยำมาก ภายในเชลล์นั้น "sudo" จะไม่สามารถควบคุมสิ่งที่รูททำได้และทำไม่ได้
pbr

3
เควินคุณจัดการกับนามแฝง "sudo vi" เป็น "sudoedit" ได้อย่างไร? จากคู่มือทุบตี ... "อักขระ /, $,`, และ = และอักขระเมตาอักขระหรือการอ้างอิงข้อความข้างต้นอาจไม่ปรากฏในชื่อนามแฝง " ... ช่องว่างเป็นหนึ่งใน metacharacters ที่กำลังพูดถึง
pbr

9
ตกลงดังนั้นจึงไม่ใช่นามแฝงต่อ se แต่มีผลเหมือนกัน: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || คำสั่ง sudo "$ @"; } '
Kevin M

10

อ้างอิง: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% ถูกแทนที่ด้วยชื่อไฟล์ปัจจุบันดังนั้นคุณสามารถใช้:

: w! sudo tee%


หากคุณกำลังจะใช้ tee ฉันขอแนะนำ ': w! sudo tee%> / dev / null' ดังนั้นคุณจะไม่เห็นไฟล์ทั้งหมดที่สะท้อนกลับมาที่คุณ ฉันมักจะใช้ ': w! dd of =%' แทนเนื่องจากเร็วกว่าในการพิมพ์และบรรลุสิ่งเดียวกัน แน่นอนนี่เป็นเพียงเมื่อฉันลืมใช้ sudoedit / sudo -e
jamessan

7

vim อนุญาตให้ผู้ใช้รันคำสั่งเชลล์โดยพลการดังนั้นผู้ดูแลระบบจำนวนมากไม่อนุญาตให้ใช้ vim กับ sudo

rvim รวมอยู่ในกลุ่ม มันเป็นกลุ่มที่ถูก จำกัด ที่ไม่อนุญาตให้ใช้คำสั่งเชลล์ (หรืออนุญาตให้คุณระงับเสียงเรียกเข้าด้วยเหตุผลเดียวกัน)

ไม่ว่าคุณจะต้องไปที่จุดสุดยอดเหล่านั้นในกล่องของคุณเองเป็นที่ถกเถียงกัน


1
+1 เห็นด้วยอย่างสมบูรณ์ sudo vimจากนั้นป้อน:!bashและคุณมีเชลล์เป็นรูท - ทำไมrvimมีอยู่จริง
dbr

3
จริง ๆ แล้วถ้าคุณสามารถ sudo เป็นกลุ่มคุณสามารถsudo bashหรือsudo su -ไม่
dlamblin

@diamblin Privileges สามารถรวบรวมรายละเอียดปลีกย่อยกว่านั้นได้ดังนั้นจึงไม่จำเป็น นั่นคือเหตุผลที่จำเป็นต้องใช้ rvim "sudo vim" เหมือนกับ "sudo su -" สำหรับทุกเจตนาและวัตถุประสงค์ บน Debian bitty-box ซึ่งผู้ใช้รายหนึ่งเป็นผู้ดูแลระบบ แต่นี่เป็นข้อมูลเชิงวิชาการทั้งหมด
Richard Hoskins

อูบุนตูจัดการกับปัญหานี้อย่างไร บน CentOS viเปิดตัวvimแต่เป็นรากเปิดตัวvi viใน Ubuntu vimนั้นใช้ทั้งสองกรณีและsudo viเปิดตัวvim...
cwd

6

เมื่อแก้ไขไฟล์การกำหนดค่าทั้งระบบมันก็โอเคเลย - แค่จำไว้เสมอว่าคุณรูทและมีพลังทั้งหมดและปล่อยสิทธิพิเศษเหล่านั้นทันทีที่คุณไม่ต้องการมันอีกต่อไป

ในกรณีพิเศษ/var/www/คือหน้าเว็บเซิร์ฟเวอร์คุณอาจต้องการเปลี่ยนความเป็นเจ้าของ / กลุ่ม / สิทธิ์ --- แต่ถ้าขึ้นอยู่กับการตั้งค่าเฉพาะของคุณ (และผู้ใช้คนเดียว / หลายคนเว็บเซิร์ฟเวอร์จริง / เพียงแค่ localhost แบบไดนามิก / คงที่ ฯลฯ )


6
+1 แน่นอน - นี่เป็นวิธีที่ดีที่สุดในการจัดการหน้าเว็บเซิร์ฟเวอร์ ตรวจสอบให้แน่ใจว่าคุณสามารถเข้าถึงได้แทนที่จะยกระดับสิทธิ์ของคุณ
bedwyr

1
-1 ไม่มีเหตุผลที่จะเรียกใช้ vim ด้วยสิทธิ์ยกระดับเมื่อ sudoedit จะทำงานเดียวกัน
sml

4

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

การป้องกันการใช้เสียงเรียกร้องของ sudo เป็นเพียงตัวช่วยวง ตามที่ระบุไว้ก่อนหน้าบางคนสามารถใช้:

sudo su -

หรือ

sudo /bin/bash

หรือ

sudo nano file

หรือ

sudo my_exectuable_text_editor file

ฯลฯ

หากคุณกังวลเกี่ยวกับคนที่ทำสิ่งที่เป็นอันตรายในกล่องอย่าให้สิทธิ์ sudo (หรือรหัสผ่าน root) อย่างชัดเจนในช่วงเวลา ไม่มีสัญลักษณ์แสดงหัวข้อย่อยเพื่อป้องกันกิจกรรมที่เป็นอันตรายโดยใช้ sudo และคุณจะทำให้คุณคลั่งโดยใช้ "การแก้ไข" ทั้งหมด "เพื่อให้แน่ใจว่าบุคคลไม่สามารถทำสิ่งที่เป็นอันตราย

มีคนพูดถึงการเปลี่ยนความเป็นเจ้าของ / กลุ่ม นี่เป็นปัญหาที่เกิดขึ้นราวกับว่าเว็บเซิร์ฟเวอร์ทำงานเป็นผู้ใช้รายอื่นและคุณเปลี่ยนการอนุญาตในไฟล์ตอนนี้เว็บไซต์ของคุณก็ไม่ทำงาน แน่นอนว่าไม่ช่วยคุณ คุณสามารถเพิ่มตัวคุณเองในกลุ่มที่เว็บเซิร์ฟเวอร์ทำงานได้อย่างไรก็ตามหากกลุ่มไม่มีสิทธิ์ในการเขียนไฟล์คุณจะต้องดำเนินการ chmod -R g + w * (หรือแต่ละไฟล์ chmod) ซึ่งอาจไม่ใช่ สิ่งที่คุณต้องการและสามารถสร้างความยุ่งยากหากคุณต้อง chmod ทุกไฟล์

บางคนแนะนำให้ใช้ rvim ด้วยซ้ำ แน่นอนว่าเราสามารถเพิ่มบรรทัดใน / etc / sudoers เพื่ออนุญาตให้ผู้ใช้บางรายเท่านั้นที่จะ sudo rvim อย่างไรก็ตามมันจะมีเหตุผลว่าถ้าคุณต้องไปเส้นทางนั้นมันอาจจะดีกว่าที่จะใช้ตัวจัดการไฟล์บนเว็บ วิธีนี้ทำงานในฐานะผู้ใช้ที่เว็บเซิร์ฟเวอร์กำลังทำงานอยู่ดังนั้นจึงไม่มีปัญหาการอนุญาตไฟล์และคุณยังสามารถควบคุมได้อย่างละเอียดว่าใครแก้ไขไฟล์ใดบ้าง

สองเซ็นต์ของฉันยังไงก็ตาม


2

การรันsudo vimจะไม่เปลี่ยน$HOMEไดเรกทอรีดังนั้นคุณจะใช้ Vim ที่มีสิทธิ์รูท แต่$HOMEยังคงชี้ไปที่ผู้ใช้ปกติของคุณ

หากนี่เป็นครั้งแรกที่คุณเรียกใช้ Vim มันอาจเกิดขึ้นได้ว่า~/.viminfoไฟล์นั้นถูกสร้างขึ้นภายในไดเรกทอรีผู้ใช้ปกติของคุณ แต่มีสิทธิ์รูท


1
ขึ้นอยู่กับ sudo แล็ปท็อปของฉันsudo vim -c '!echo $HOME' -c qจะให้โฟลเดอร์ที่บ้านของฉัน /rootแต่บนเซิร์ฟเวอร์ของฉันมันจะช่วยให้ ฉันอาจจะต้องดูว่าทำไมนั่นอาจเป็นเพราะ OS X ตัวใดตัวหนึ่งในขณะที่ Gentoo ของอีกคนหนึ่งหรืออาจเป็นสิ่งที่ต้องทำเกี่ยวกับวิธีการ/etc/sudoersตั้งค่า
Nemo157

AHA! คุณพูดถูก - ฉันสิ้นสุดที่นี่สงสัยว่าทำไมฉันถึงเข้าใช้.viminfoรูทได้เท่านั้น
Ayrat

1

หากนี่คือคอมพิวเตอร์ของคุณเอง ... ฉันไม่เห็นเหตุผลที่คุณไม่สามารถใช้ 'sudo vim' ได้นอกจากกรณีขอบที่ Denilson ตั้งข้อสังเกตว่าอาจสร้าง ~ / .viminfo ของคุณเป็นเจ้าของโดย root

ถ้าไม่ใช่ - หากผู้ดูแลระบบกำลัง จำกัด สิ่งที่คุณสามารถทำได้และไม่สามารถทำได้ - ต่อ "man sudo": "ในระบบส่วนใหญ่มันเป็นไปได้ที่จะป้องกันเชลล์หนีด้วยฟังก์ชัน noexec ของ sudo ดูคู่มือ sudoers (5) สำหรับรายละเอียด "

ดังนั้นในกรณีนี้ถ้าดูแลระบบของคุณมีความกังวลเกี่ยวกับศักยภาพของคุณที่ใช้ subshells เป็น root จากภายในกลุ่มพวกเขาสามารถใช้ความสามารถ noexec แต่ ... กลับไปที่กรณีเริ่มต้น - ถ้านี่คือคอมพิวเตอร์ของคุณฉันคิดว่าคุณน่าจะปลอดภัยที่จะใช้ 'sudo vim'


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