มีอะไรไม่ดีเกิดขึ้นเมื่อใช้ gedit กับ sudo


10

ฉันอ่านคำตอบนี้อธิบายว่ารูท "บางครั้ง" สามารถเป็นเจ้าของสิ่งที่/home/$USERไดเรกทอรี

ใครสามารถยกตัวอย่างวิธีการพิสูจน์ เพียงแค่ให้กรณีทดสอบเมื่อสิ่งเลวร้ายจริงๆเกิดขึ้นเมื่อฉันทำงาน

sudo gedit /etc/rc.local

แก้ไขไฟล์และบันทึก

ฉันมี downvotes มากมายที่พยายามช่วยเหลือ OPและความคิดเห็นที่ท่วมท้นในการบอกว่าเป็นอาชญากรรมที่ใช้ gedit ด้วย sudo

ใครสามารถยกตัวอย่างจริงได้บ้าง

ฉันอธิบายอย่างชัดเจนว่าทำไมคำถามนี้ไม่ซ้ำกัน ไม่มีคำตอบเฉพาะในการเข้าสู่คำถามที่เชื่อมโยง

และเป็นสิ่งสำคัญที่จะต้องอธิบายว่าทำไมการใช้งานอย่างกว้างขวางsudo geditจึงไม่ดีหรือไม่จริง ฯลฯ


2
ใช้กับ sudo เสมอไม่เคยมีปัญหา คำถามที่ดี.
Dario Salvati

1
@Wilf, nano ชอบเขียน ~ / .nano_history ซึ่งถ้าคุณรันด้วย sudo จะทำให้รูตเป็นเจ้าของโดย root ดังนั้นเมื่อคุณรัน nano โดยไม่ใช้ sudo จะบ่นว่าไม่สามารถเข้าถึงไฟล์ได้ sudo chownแก้ไขง่าย ๆ
psusi

1
ตราบใดที่ rc.local ดำเนินต่อไปนั่นคือสคริปต์ระดับการรันควรเป็นเจ้าของโดย root ดังนั้น sudo จะไม่มีผลกับมัน ลองด้วย ~ / .bashrc ฉันไม่คิดว่าเชลล์จะยอมรับไฟล์นั้นถ้าเป็นของ root และควรถอยกลับไปเป็นค่าเริ่มต้น แต่นั่นเป็นเพียงข้อเสนอแนะ ฉันจะกลับมาพรุ่งนี้ดูว่าคำถามนี้ทำอย่างไร
Sergiy Kolodyazhnyy

1
สำหรับบรรณาธิการส่วนใหญ่ไม่ใช่การเปิด แต่เป็น SAVE ที่เร่งด่วน mOst editros บันทึกการตั้งค่าไว้ที่อื่นเช่นกันดังนั้นหากคุณแก้ไขการตั้งค่า
วิลฟ์

2
สำหรับสิ่งที่คุ้มค่าฉันแค่แก้ไขมันในสถานที่ที่จะใช้-Hเมื่อฉันเห็นมัน
muru

คำตอบ:


11

เท่าที่sudo geditไม่มีอะไรน่ากลัวเพียงการปฏิบัติที่ดีโดยเฉพาะอย่างยิ่งในช่วงปลายปี จะแนะนำได้ยากเพียงsudo -H geditใด?

-H,--set-homeขอให้นโยบายความปลอดภัยตั้งค่าตัวแปรสภาวะแวดล้อม HOME เป็นโฮมไดเร็กทอรีที่ระบุโดยรายการฐานข้อมูลรหัสผ่านของผู้ใช้เป้าหมาย นี่อาจเป็นพฤติกรรมเริ่มต้นทั้งนี้ขึ้นอยู่กับนโยบาย

สิ่งที่ไม่เกิดขึ้น?

คุณได้รับไฟล์ที่เป็นเจ้าของรากสองไฟล์ในโฟลเดอร์บ้านของคุณ หนึ่ง ( recently-used.xbel) น่าจะกลับมาเป็นเจ้าของของผู้ใช้ สิ่งนี้สามารถเกิดขึ้นได้เมื่อไฟล์ถูกลบและสร้างขึ้นใหม่ หากต้องการดูสิ่งที่sudo geditเปลี่ยนแปลงให้เรียกใช้find ~ -user root -group rootและดูสิ่งที่ส่งคืน โดยค่าเริ่มต้นสิ่งนี้ไม่ควรเป็นอะไรเลย

ด้วยคำสั่งนั้นคุณอาจเห็นไฟล์สองไฟล์ที่ root เป็นเจ้าของ หนึ่งจะเป็นใหม่.file, .gvfsและไม่ช้าก็เร็วรากที่เป็นเจ้าของและดังกล่าวข้างต้น~/.cache/dconfrecently-used.xbel

ดังนั้นจึงไม่มี 'ท้องฟ้ากำลังล้มเหลว' แต่ก็ยังอยู่ ขณะนี้มีรายงานว่าการใช้งานอย่างต่อเนื่องทำให้เกิดปัญหาอื่น ๆ แต่จะไม่อ้างสิทธิ์ในสิ่งที่ฉันไม่เห็นที่นี่

นอกจากนี้โปรดทราบว่าตั้งแต่ 13.10 a sudo geditจะใช้การกำหนดค่า gedit ของผู้ใช้มากกว่าการกำหนดค่า gedit ของรูท อีกครั้งเพียงการปฏิบัติที่ไม่ดีดังนั้นทำไมยังคงทำเช่นนั้นหรือแนะนำให้คนอื่นทำเช่นนั้น?


1
บางครั้งฉันก็มีโอกาสแสดงผู้ใช้ถึงวิธีการใช้นาโนเพราะมันง่าย & เวลาส่วนใหญ่สามารถทดแทน gedit ได้ มีบางกรณีแม้ว่าที่ gedit ยังดีกว่านาโนแม้สำหรับผู้ที่รู้วิธีการใช้ นอกจากนี้ sudo gedit ยังสามารถนำไปสู่ ​​sudo nautilus ซึ่งอาจเลวร้ายกว่า .. (ที่นี่ฉันมี pkexec ที่เปิดใช้งาน gedit แต่นั่นเกินขอบเขตของการสนทนานี้
doug

@wjandrea ฟังดูดีแก้ไขแล้ว
doug

12

บางทีมันอาจจะเป็นแฟนตาซี แต่มีคนพูดกันหลายเรื่อง:

  • เหตุใดฉันจึงควรใช้ gksudo สำหรับแอป Gtk แทน sudo

    อย่างไรก็ตามมีบางครั้งที่เมื่อผลข้างเคียงอาจไม่รุนแรงเท่ากับส่วนขยายของ Firefox ที่ไม่เกาะติดหรือรุนแรงจนไม่สามารถเข้าสู่ระบบได้อีกเนื่องจากสิทธิ์ของ.

  • ทำไมผู้ใช้ไม่ควรใช้ sudo ปกติเพื่อเริ่มโปรแกรมกราฟิก?

    สมมติว่าคุณใช้ gedit (โปรแกรมแก้ไขข้อความกราฟิก) เป็นรูท หากคุณเรียกใช้ sudo gedit หน้าแรกจะยังคงชี้ไปที่โฮมไดเร็กตอรี่ของคุณ, แม้ว่าโปรแกรมจะทำงานเหมือนรูท. ดังนั้น gedit จะเขียนไฟล์กำหนดค่าเป็นรูทในโฮมไดเร็กตอรี่ของคุณ บางครั้งสิ่งนี้จะส่งผลให้ไฟล์การกำหนดค่าที่ root เป็นเจ้าของและทำให้คุณไม่สามารถเข้าถึงได้ (เมื่อคุณรันโปรแกรมด้วยตัวคุณเองในภายหลังและไม่ใช่ root)

  • วิธีการเรียกใช้โปรแกรม GUI ในฐานะผู้ใช้อื่น (Debian)

    ก่อนอื่นอย่าใช้ sudo หรือ su เพื่อเปลี่ยนผู้ใช้เพื่อเรียกใช้กระบวนการแบบกราฟิกหรือคุณอาจมีปัญหาในการแก้ไขปัญหา (~ / .ICEauthority การเปลี่ยนเจ้าของเป็นปัญหาที่น่าทึ่ง) สร้างทางลัดที่ใช้คำสั่งต่อไปนี้แทน

  • เล่น Sudo แบบกราฟิก

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

    ...

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

    ที่เก็บจดหมายนี้อาจเป็นที่สนใจของคุณ

ดังนั้นลองทดสอบกัน

2 กล่องเสมือนใหม่เอี่ยม Ubuntu 14.04 ไม่เคยใช้ Firefox กับพวกเขา จะเกิดอะไรขึ้นเมื่อฉันเรียกใช้คำสั่งsudo firefox?

tim@Hairy14CVB:~$ sudo firefox    
(process:4857): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed

...

shutdownObserver@XPIProvider.jsm:2192:13

นี่คือเหมือนกัน (หรืออย่างน้อยคล้ายกันมาก) สำหรับกล่องเสมือนทั้งสอง ในขณะที่ Firefox ทำงานอยู่ฉันติดตั้งส่วนขยายของ YouTube - ส่วนที่แนะนำ จากนั้นฉันปิด Firefox และตรวจสอบผลลัพธ์

tim@Hairy14CVB:~$ ls -la .ICEauthority 
-rw------- 1 tim tim 1336 Jun  4 21:31 .ICEauthority

ดี.ICEauthorityดี! อย่างไรก็ตาม ...

tim@Hairy14CVB:~$ ls -la | grep root
drwxr-xr-x  3 root root 4096 Jun  1 20:49 ..
drwx------  3 root root 4096 Jun  5 22:41 .dbus
drwx------  4 root root 4096 Jun  5 22:41 .mozilla

3 สิ่งที่อยู่ในโฟลเดอร์ที่บ้านของฉัน ( /home/tim/) เป็นเจ้าของโดย root ( .., .dbusและ.mozilla) นี่คือเหมือนกัน (หรืออย่างน้อยคล้ายกันมาก) สำหรับกล่องเสมือนทั้งสอง

ดังนั้นเรื่องนี้ไม่ ฉันไม่แน่ใจดังนั้นฉันจึงเรียกใช้ firefox เช่นนี้:

tim@Hairy14CVB:~$ firefox

(process:4959): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
Error: Access was denied while trying to open files in your profile directory.

และข้อผิดพลาดน่าเกลียดนี้:

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับการส่งออกที่ขั้วเต็ม (รวมทั้ง Firefox จ้อ) ดูทั้งสอง pastebins, ที่นี่และที่นี่

ฉันยังคงสามารถเรียกใช้ firefox ได้ตามรูท แต่ตอนนี้มีการเปลี่ยนแปลงไฟล์เพิ่มเติม:

tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x  4 root root  4096 Jun  3 19:46 ..
drwx------  3 root root  4096 Jun  5 22:55 .adobe
drwx------  3 root root  4096 Jun  5 22:40 .dbus
drwx------  3 root root  4096 Jun  5 22:55 .macromedia
drwx------  4 root root  4096 Jun  5 22:40 .mozilla

เป็นเพราะฉันอัพโหลดภาพไปที่ imgur.com หรือไม่ ไม่แน่ใจ.

ฉันจะแก้ไขได้อย่างไร chown. ฉันไม่เข้าใจ แต่อินเทอร์เน็ตบอกว่าจะทำและเป็นกล่องเสมือนจริงดังนั้น yolo

sudo chown -R tim:tim /home/tim/

และนั่นก็แก้ไขมัน ตอนนี้เอาต์พุตเป็นเพียง..ไฟล์:

tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x  4 root root  4096 Jun  3 19:46 ..

และนั่นก็เหมือนกันในคอมพิวเตอร์จริงของฉัน โอ้และในกล่องเสมือน Kubuntu ของฉัน:

tim@Hairy14VB:~$ ls -la | grep root
drwxr-xr-x  3 root root  4096 May 16 14:10 ..

ซึ่งฉันไม่เคยแม้แต่เรียกใช้คำสั่ง sudo บน ดังนั้นทั้งหมดเป็นอย่างดี อย่าเพิ่งรันsudoกับแอพพลิเคชั่น GUI

การทดสอบขั้นสุดท้าย: เรียกใช้ด้วย-Hและ-iธง:

sudo -H firefox

และ

sudo -i firefox

และข่าวดี! ยังคงมีเพียงราก "สิ่งที่" ..เป็น และฉันสามารถวิ่งได้firefoxโดยไม่ต้องรูท


OP ต้องการให้ฉันพูดเกี่ยวกับ Gedit

ฉันวิ่ง

sudo gedit

จากนั้นติดตั้งปลั๊กอินแบบสุ่มบางส่วน นี่คือผลลัพธ์:

tim@Hairy14VB:~$ ls -la | grep root
ls: cannot access .gvfs: Permission denied
drwxr-xr-x  4 root root   4096 Jun  3 19:46 ..

โปรดทราบว่าฉันไม่สามารถดูความเป็นเจ้าของได้.gvfsดังนั้นฉันจึงทำสิ่งนี้:

tim@Hairy14VB:~$ sudo ls -la | grep root
drwxr-xr-x  4 root root   4096 Jun  3 19:46 ..
dr-x------  2 root root      0 Jun  6 10:05 .gvfs

ดังนั้นการรันsudo geditจะเปลี่ยนไฟล์ในโฮมไดเร็กตอรี่ของฉันเป็นรูท.

ฉันยังสามารถเปิด gedit ได้ แต่คราวนี้ฉันเอาขยะออก:

(gedit:7422): Gtk-WARNING **: Attempting to read the recently used resources file at `/home/tim/.local/share/recently-used.xbel', but the parser failed: Failed to open file '/home/tim/.local/share/recently-used.xbel': Permission denied.

และนั่นแสดงว่ามีไฟล์อื่น ( ~.local/share/recently-used.xbel) ที่ถูกเปลี่ยนแปลง ฉันคิดว่านี่เป็นรายการไฟล์ที่ใช้ล่าสุดและ (เดาว่าโชคดี) ตอนนี้ฉันไม่มีรายการไฟล์ที่ใช้ล่าสุด:

output2.txt.save2ควรจะมีไฟล์ที่มีชื่อว่า สรรพนามของฉันคือเขา / เขา


1
คุณเขียนทุกอย่างยกเว้นคำตอบของคำถาม เพียงแค่ให้กรณีทดสอบกับ gedit ฉันควรตั้งค่าสถานะเป็น "ไม่ใช่คำตอบ" หรือไม่ หรือ "คุณภาพแย่มาก" แม้ว่าจะใช้เวลานานหรือไม่)))
Pilot6

5
@ Pilot6 - ในคำถามCan anyone give an example how to prove it ..... Can anyone give a real example?- และลิงก์นี้ไปยังสิ่งที่ผ่านมาและเป็นตัวอย่างของสิ่งที่สามารถเกิดขึ้นกับ firefox ในฐานะที่เป็น root - ฉันควรทำเครื่องหมายความคิดเห็นของคุณว่า 'ไม่สร้างสรรค์' เพราะฉันไม่สามารถหาคำว่า เป็นคนดี cmon :)
วิลฟ์

1
โอ้โปรดอย่าใช้ls -la|grep rootแต่อย่างใดอย่างหนึ่งfind . -uid 0หรือfind . -user root
solsTiCe

1
@ Pilot6 โอเคฉันได้แก้ไขเพื่อรวมบางสิ่งเกี่ยวกับ gedit ฉันไม่คิดว่ามันจะเพิ่มอะไรให้คำตอบของฉัน แต่คุณดูเหมือนจะต้องการมันเพื่อ ...
ทิม

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