เป็นกลุ่มที่ปลอดภัยที่จะใช้ร่วมกับ sudo?


25

ไม่แนะนำให้ใช้sudoกับแอปพลิเคชันกราฟิกเช่นgeditที่อธิบายไว้ที่ลิงค์นี้ ดังนั้นข้าพเจ้าจึงมีแนวโน้มที่จะใช้กับvimsudo

เมื่อเร็ว ๆ นี้ผมสังเกตเห็นฉัน~/.viminfoเป็นเจ้าของโดย root บนค่อนข้างสดติดตั้งUbuntu 16.04 (Xenial Xerus) ดังนั้นจึงมีฉันสงสัยว่าถ้าเป็นกลุ่มแม้จะถือเป็นกราฟิกหรือถ้ามีบางปัญหาอื่น ๆ sudo vimที่มีกล่าวอ้าง หลังจากเปลี่ยนความเป็นเจ้าของให้กับตัวเองผ่าน:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

และหลังจากนั้นsudo vimฉันก็ไม่สามารถ~/.viminfo เป็นเจ้าของโดยรูทได้ อย่างไรก็ตามฉันมั่นใจว่าเมื่อเร็ว ๆ นี้มันเป็นของ root

มันไม่สมควรที่จะเรียกsudo vim?



1
นอกจากนี้คุณยังสามารถใช้เสียงเรียกเข้าแบบไม่มี sudo และเมื่อมันมาถึงการบันทึกไฟล์คุณสามารถใช้:w !sudo tee %
ChatterOne

คำตอบ:


22

ใช่มันปลอดภัย

ปัญหาsudo geditคือเนื่องจากแอปพลิเคชัน GUI ใช้ไฟล์บางไฟล์เช่น~/.cache/dconfและหลังจากยกระดับgeditไฟล์นั้นจะกลายเป็นเจ้าของรูท ไฟล์นั้นมีการตั้งค่าเฉพาะผู้ใช้สำหรับแอปพลิเคชัน GUI รวมถึงเดสก์ท็อปดังนั้นหากระบบไม่สามารถอ่านการตั้งค่าเหล่านั้นได้ - มันแย่ IIRC ผู้ใช้ไม่สามารถเริ่มเดสก์ท็อปที่เฉพาะเจาะจงได้ ข้อมูลไฟล์ล่าสุดของผู้ใช้recently-used.xbelยังได้รับผลกระทบ

ในอีกด้านหนึ่งกลุ่มไม่มีปัญหานั้น มันไม่ใช้ฐานข้อมูลที่เกี่ยวข้องกับ GUI recently-used.xbelและไม่ใส่อะไรลงไป มันถูกสร้างขึ้นเพื่อวัตถุประสงค์เฉพาะคอนโซลแม้ว่า gVim ยังมีอยู่ ในความเป็นจริงในบางระบบ Vim เป็นทางเลือกเดียวของคุณในการแก้ไข ดังนั้นจึงปลอดภัยกว่าgeditโดยอาศัยเหตุที่ไม่ก่อให้เกิดปัญหาเดียวกัน คุณยังคงแก้ไขในฐานะ root ในทั้งสองกรณีดังนั้นคุณอาจทำให้เกิดปัญหากับการแก้ไขที่ไม่เหมาะสม

ตามโพสต์บล็อกนี้ :

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

ในขณะที่ผู้เขียนชี้ให้เห็นว่ามันสามารถนำไปสู่ปัญหาไม่มีอะไรซับซ้อน - เพียงchownไฟล์กลับไปที่ตัวคุณเอง

ดูสิ่งนี้ด้วย:


6
โปรดทราบว่าเสียงเรียกเข้าไม่ปลอดภัยในระบบที่มีผู้ใช้หลายคนที่คุณพยายาม จำกัด สิทธิ์การดูแลระบบของผู้ใช้รายอื่น ผู้ใช้สามารถใช้sudo vimเพื่อรับสำเนาของกลุ่มเรียกใช้เป็น root จากนั้น:!/bin/shรับเปลือกเปลือก
ทำเครื่องหมาย

3
@ ทำเครื่องหมายอะไรและป้องกันไม่ให้ผู้ใช้ทำsudo /bin/shอะไร พูดจริงถ้าผู้ใช้มีการเข้าถึงรูทแล้วพวกเขาไม่จำเป็นต้องใช้เทคนิคที่ซับซ้อน
Sergiy Kolodyazhnyy

7
/etc/sudoersไฟล์ คุณไม่จำเป็นต้องทำ%wheel ALL=(ALL) ALL- sudoการกำหนดค่าอนุญาตให้มีความแตกต่างกันเล็กน้อยกว่านั้น
ทำเครื่องหมาย

1
@ ทำเครื่องหมายตกลงจุดดีที่นั่น - ไม่ใช่ทุกระบบมีการตั้งค่าเดียวกัน
Sergiy Kolodyazhnyy

อืม ... สิทธิ์จะเปลี่ยนแม้ว่าไฟล์จะมีอยู่หรือไม่ สมมติว่าฉันแฮ็คเข้าบัญชีผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ แต่ฉันไม่รู้รหัสผ่าน (บางทีฉันอาจเปิดเปลือก) นี่หมายความว่าฉันสามารถคัดลอก/bin/bashไปที่~/.viminfoวาง setuid ไว้และรอให้ผู้ใช้รันsudo vimเพื่อให้รูตมันเป็นรูทหรือไม่
ChatterOne

15

เป็นไปได้ที่จะใช้sudoeditเพื่อให้บรรลุสิ่งนี้; มันเปิดสำเนาชั่วคราวของไฟล์ในตัวแก้ไขของคุณโดยที่ตัวแก้ไขของคุณจะทำงานเหมือนคุณ จากหน้าคน :

  1. สำเนาชั่วคราวทำจากไฟล์ที่จะแก้ไขโดยเจ้าของถูกตั้งค่าเป็นผู้ใช้ที่เรียกใช้

  2. ตัวแก้ไขที่ระบุโดยนโยบายจะถูกเรียกใช้เพื่อแก้ไขไฟล์ชั่วคราว นโยบาย sudoers ใช้และSUDO_EDITOR, VISUALและEDITORตัวแปรสภาพแวดล้อม (ตามลำดับ) ถ้าไม่มีSUDO_EDITOR, VISUALหรือEDITORมีการตั้งค่าโปรแกรมแรกที่ระบุไว้ในการแก้ไขsudoers(5)ตัวเลือกที่ถูกนำมาใช้

  3. หากมีการแก้ไขไฟล์ชั่วคราวจะถูกคัดลอกกลับไปยังตำแหน่งเดิมและเวอร์ชันชั่วคราวจะถูกลบออก

มันใช้งานได้ดีกับเสียงเรียกเข้า (เป็นสิ่งที่ฉันทำโดยทั่วไป) และฉันคิดว่ามันจะให้คุณใช้ gedit ด้วย มีบางข้อ จำกัด การรักษาความปลอดภัย


4
สิ่งนี้จะดีกว่ามากหากคุณต้องการใช้การกำหนดค่า vim ของคุณเองแทนที่จะเป็นรูท
NieDzejkob

2
สิ่งนี้จะปลอดภัยยิ่งขึ้นถ้าคุณไม่ต้องการเรียกใช้รหัสปลั๊กอินแบบสุ่มในฐานะที่เป็นรูท (อย่างไรก็ตามปลั๊กอินที่ทำงานในขณะที่คุณสามารถทำความเสียหายได้มากมายหากพวกเขาเป็นอันตรายดังนั้นอย่าใช้ปลั๊กอินที่คุณไม่ไว้ใจ ที่แรก).
เควิน

2

ลิงก์นี้เก่ามาก (2013) แนะนำให้ใช้gksudoหรือgksuสำหรับแอพพลิเคชั่นกราฟิก แต่ทั้งสองอย่างนั้นล้าสมัยแล้ว ต่อมาคำตอบที่ได้รับการยอมรับก็แสดงให้เห็นsudo -Hว่า

ฉันทามติทั่วไปในชุมชนAsk Ubuntuเมื่อเร็ว ๆ นี้คือการใช้:

sudo -H gedit /path/to/filename

ปัญหาเดียวที่ยังคงอยู่ที่sudoไม่มีโปรไฟล์สำหรับการตั้งค่าแท็บส่วนขยายการตัดคำชื่อแบบอักษรขนาดแบบอักษร ฯลฯ คุณสามารถรับสิ่งเหล่านี้จากโปรไฟล์ผู้ใช้ของคุณแม้ว่าจะมีสคริปต์ตัวตัดคำเช่นนี้: ฉันจะซิงค์รากของฉันได้อย่างไร gedit กับการตั้งค่าของผู้ใช้ gedit ของฉัน?


2

sudo vimใช่มันเป็นความปลอดภัยในการใช้งาน ปัญหาที่ฉันเจอคือ

  • ต้องออกจากไฟล์และเปิดใหม่ด้วยsudo vimเพื่อให้สามารถแก้ไขได้

  • มีรากvimrcเป็นค่าเริ่มต้นไม่ใช่สิ่งที่มีประโยชน์ที่กำหนดเองของฉัน

นี่คือฟังก์ชั่นที่คุณสามารถใส่bashrcเพื่ออนุญาตให้ vim sudo โดยอัตโนมัติหากคุณไม่สามารถแก้ไขไฟล์ได้ตามปกติ

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}

บน Ubuntu sudoโดยค่าเริ่มต้นจะรักษา$HOMEตัวแปรสภาพแวดล้อมซึ่งหมายความว่าsudo vim จะใช้. vimrc ที่กำหนดเองของคุณและก็หมายความว่าsudo vimจะเปลี่ยนความเป็นเจ้าของของ~/.viminfoเป็นรูท: รูทและทำให้คุณไม่สะดวก
Marius Gedminas

viminfoไม่เห็นคำตอบที่ได้รับการยอมรับกับคุณเกี่ยวกับ
jeremysprofile

1

ไม่เป็นไรใช้ vi เป็น root อาจมีบางครั้งที่คุณต้องแก้ไขไฟล์ที่ต้องใช้สิทธิ์ sudo หรือรูทเช่นเปลี่ยนไฟล์เน็ตเวิร์กอินเตอร์เฟสของคุณหรืออาจแก้ไขไฟล์ sshd config ของคุณ การใช้รูทสำหรับเนื้อหากราฟิกนั้นไม่ดีเพราะคนจะเชื่อมต่อกับ IRC หรือท่องเว็บเป็นรูท หากพวกเขามีไวรัสในขณะที่ทำเช่นนั้นมันจะมีสิทธิ์เข้าถึงแบบเต็ม


2
มีข้อยกเว้นเฉพาะอย่างน้อยหนึ่งข้อสำหรับการใช้ vi เป็น root ไฟล์ที่ควบคุมพา ธ sudo (/ etc / sudoers) ไม่ควรถูกแก้ไขด้วย vi สำหรับไฟล์นั้นควรใช้คำสั่ง visudo คุณไม่ได้ระบุว่าจะแก้ไขไฟล์ใดเป็นเพียงกรณีพิเศษ
user628388

1

สิ่งที่ไม่ได้กล่าวถึงในคำตอบอื่น ๆ คือการใช้ vim พร้อมรูทจะให้สิทธิพิเศษรูทแก่ปลั๊กอินที่คุณติดตั้ง ดังนั้นคำถามที่ว่าจะปลอดภัยหรือไม่ที่จะรันในฐานะรูทขึ้นอยู่กับว่าคุณเชื่อถือนักพัฒนาปลั๊กอินเหล่านั้น (หรือผู้สนับสนุนโครงการ) หรือไม่ที่จะเป็นเจ้าของระบบของคุณเอง

โดยทั่วไปจะตรวจสอบโดยผู้ดูแลแพคเกจในการแจกแจงลินุกซ์ทั้งหมดดังนั้นจึงง่ายที่จะเชื่อถือ อย่างไรก็ตามโดยทั่วไปแล้วปลั๊กอิน vim จะถูกติดตั้งโดยตรงจาก GitHub repos และมักจะมีการตรวจสอบผู้ใช้น้อยกว่า (อาจไม่มี) กล่าวอีกนัยหนึ่งไม่มีกระบวนการในการตรวจสอบกับพวกเขา

หากคุณไม่ได้โหลดปลั๊กอินในขณะที่อยู่ในรูทฉันคิดว่าการรันในฐานะรูทขึ้นอยู่กับว่าคุณไว้วางใจนักพัฒนาที่เป็นกลุ่มหรือไม่ คุณสามารถข้ามไปต้องเชื่อถือพวกเขาอย่างไรก็ตามด้วยการใช้ sudoedit ซึ่งสร้างโดยนักพัฒนาของ sudo คนเดียวกันซึ่งคนที่เราไว้วางใจแล้วด้วยการเข้าถึงรูทอย่างไรก็ตาม GKFX และ NieDzejkob ได้พูดถึงแล้วว่าทำไม sudoedit จึงเป็นอุดมคติ นอกเหนือจากจุดที่คุณไม่ต้องไว้ใจการเข้าถึงรูทของผู้อื่นนอกเหนือจากนักพัฒนาของ sudo คุณสามารถโหลดปลั๊กอินทั้งหมดที่คุณไว้วางใจได้ด้วยบัญชีผู้ใช้ปกติของคุณ


การสนทนาที่ไม่ไว้วางใจนักพัฒนาที่แตกต่างกันดูเหมือนไม่สมบูรณ์ หากคุณsudoedit /etc/apt/sources.listติดตั้งปลั๊กอินที่ถูกบุกรุกมันอาจจะสามารถแทรกที่เก็บที่เป็นอันตรายและเข้าถึงรากได้ในครั้งต่อไปที่คุณเรียกใช้การอัปเดต ฉันแน่ใจว่ามีรายการไฟล์ที่ป้องกันไว้ด้วยรากที่มีความคล้ายคลึงกัน และแน่นอนว่าไม่ใช่ว่าทุกไวรัสต้องการราก สามารถดึงรายละเอียดธนาคารของคุณได้ไม่เกินส่วนขยายเบราว์เซอร์
GKFX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.