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


114

ฉันอ่านเอกสาร "RootSudo" ของชุมชนและสนใจในบรรทัดนี้:

คุณไม่ควรใช้ sudo ปกติเพื่อเริ่มโปรแกรมกราฟิกเป็นรูท

ทำไม? อะไรคือความแตกต่าง? โปรดให้คำอธิบายง่ายๆเพราะฉันเป็นแค่ผู้ใช้เดสก์ท็อปปกติ



ที่จริงแล้วฉันเพิ่งมีปัญหาในการติดตั้ง MATLAB ไปยัง / usr / local จำเป็นต้องใช้สิทธิ์รูทเพื่อเขียนถึง / usr / local แต่การรันโปรแกรมติดตั้งโดยใช้ gksu ทำให้ไม่สามารถรันโปรแกรมที่ติดตั้งเป็น non-root ได้ การรันโปรแกรมติดตั้งโดยใช้ sudo ทำให้ทุกอย่างทำงานได้ดี
Bib-lost ที่หายไป

คำตอบ:


129

โปรแกรมกราฟิกมักจะเก็บการตั้งค่าและข้อมูลผู้ใช้เฉพาะอื่น ๆ ในแฟ้มการกำหนดค่าเป็นลายลักษณ์อักษรภายในของผู้ใช้โฟลเดอร์ภายในบ้าน โปรแกรมกลไกหลักในการใช้งานเพื่อตรวจสอบสิ่งที่พวกเขาควรจะใช้เป็นโฟลเดอร์บ้านของผู้ใช้เป็นตัวแปรสภาพแวดล้อมHOME (คุณสามารถตรวจสอบด้วยตัวคุณเองด้วยecho $HOME)

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

นั่นเป็นเหตุผลหลักว่าทำไมคุณควรใช้โปรแกรมกราฟิกกับกราฟิกหน้ามากกว่ากับตรงsudo sudoใน Ubuntu และส่วนใหญ่ของสัญญาซื้อขายล่วงหน้า (รวม Xubuntu และ Lubuntu) ส่วนหน้าของกราฟิกมาตรฐานคือ/gksu gksudoใน Kubuntu kdesudoมันเป็น (ขึ้นอยู่กับสภาพแวดล้อมเดสก์ทอปที่ใช้)

หากคุณต้องการใช้sudoโดยตรงเพื่อเรียกใช้โปรแกรมกราฟิกเช่นgeditคุณสามารถเรียกใช้:

sudo -H gedit

-Hธงทำให้การsudoตั้งค่าHOMEให้ชี้ไปที่rootโฟลเดอร์ที่บ้าน 's (ซึ่งเป็น/root)

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

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

ดังนั้นจึงsudoไม่-Hควรใช้(อย่างน้อยไม่มี) เพื่อเรียกใช้แอปพลิเคชั่นแบบกราฟิกเว้นแต่คุณจะคุ้นเคยกับการทำงานภายในของแอพอย่างมากและรู้ว่าไม่เคยพยายามเขียนไฟล์การกำหนดค่าใด ๆ


ฉันสามารถเป็นเจ้าของไฟล์การกำหนดค่าทั้งหมด (หรือไฟล์ใด ๆ ) ในโฮมไดเร็กตอรี่ของฉันอีกครั้งได้หรือไม่หากไฟล์เหล่านี้เป็นของรูท
Nur

@Nur สมมติว่าไม่มีไฟล์ในโฮมไดเร็กตอรี่ของคุณที่คุณต้องการเป็นเจ้าของโดยผู้ใช้รายอื่นหรือคุณต้องการมีสมาชิกกลุ่มอื่น ๆ (สำหรับการแชร์) , คุณสามารถเรียกใช้: sudo chmod -R $USER:$USER ~โชคไม่ดีที่เกณฑ์เหล่านั้นไม่ได้นำมาใช้เสมอ หากคุณมีไฟล์ใด ๆ sudo chmod -R $USER ~ที่คุณต้องการที่จะรักษาความเป็นเจ้าของกลุ่มคุณสามารถเรียกใช้ ซึ่งมักจะเพียงพอ (หากคุณมีไฟล์ที่จำเป็นต้องเป็นเจ้าของโดยผู้ใช้รายอื่นในโฮมได
เร็กตอรี่

1
@EliahKagan ทำchmodจริงหรือ ฉันคิดเสมอว่ามันเป็นchownอย่างนั้น chmodไม่เคยทำเพื่อฉัน
Wyatt8740

2
@ Wyatt8740 ฉันควรจะเขียนchownแทนแน่นอนchmodในความคิดเห็นของฉันด้านบน ขออภัยที่ - และขอบคุณสำหรับการชี้ให้เห็น!
Eliah Kagan

2
@TheQuark ในsudo -H echo $HOMEเชลล์ของคุณ - ทำงานในฐานะคุณไม่ใช่ในฐานะ root - ทำการขยายพารามิเตอร์เปิด$HOMEรับพา ธ ของโฮมไดเร็กตอรี่ของคุณจากนั้นส่งผ่านไปยังsudo, ซึ่งจะส่งผ่านค่าที่ขยายไปechoแล้วซึ่งพิมพ์ sudo -H printenv HOME, sudo -H bash -c 'echo $HOME'และการพิมพ์ทั้งหมดsudo -H sh -c 'echo $HOME' /rootสิ่งนี้คล้ายกับแนวคิด - โดยกลไกที่แตกต่าง - กับวิธีที่x=a echo "$x"ไม่พิมพ์a(ยกเว้นว่าxมีค่าอยู่แล้วa)
Eliah Kagan

25

ใส่เพียง:

สิ่งนี้ป้องกันไม่ให้ไฟล์ในโฮมไดเร็กทอรีของคุณเป็นเจ้าของโดยรูท

อ่านได้ที่นี่ นอกจากนี้อาจเป็นความซ้ำซ้อนของ"gksudo nautilus" และ "sudo nautilus" คืออะไร?


gksudo ไม่รวมอยู่ในการติดตั้ง Ubuntu และ Debian อีกต่อไป ดูitsfoss.com/gksu-replacement-ubuntuสำหรับรายละเอียด askubuntu.com/a/1047413/197910เป็นโซลูชั่นที่เหนือกว่า
K7AAY

5

อีกทางเลือกหนึ่งgksu nautilusและgksu geditคือการใช้nautilus-adminAdd-on อนุญาตให้คุณเรียกดูไฟล์และไดเรกทอรีด้วยNautilusจากนั้นเปิดเป็น root (ผู้ดูแลระบบ)

การติดตั้งตรงไปตรงมา:

sudo apt install nautilus-admin

ตอนนี้เมื่อคุณอยู่ในหอยโข่งคุณจะมีตัวเลือกเพิ่มเติมสำหรับการแก้ไขในฐานะผู้ดูแลระบบ:

nautilus admin.gif


gedit เนื่องจาก root ไม่อนุญาตการกำหนดค่า

เมื่อคุณเรียกใช้geditในฐานะรูทคุณจะไม่สามารถใช้การกำหนดค่าตามที่คุณตั้งค่าในฐานะผู้ใช้ทั่วไปสำหรับการหยุดแท็บแปลงแท็บเป็นช่องว่างชื่อแบบอักษรขนาดตัวอักษรการตัดบรรทัด ฯลฯ

เพื่อแก้ปัญหานี้ฉันได้เขียนสคริปต์sgeditเพื่อรับการตั้งค่าของผู้ใช้และนำไปใช้กับรูท: ฉันจะซิงค์รูท gedit ของฉันกับการตั้งค่าของผู้ใช้ gedit ได้อย่างไร

  • โทรโดยใช้ sgedit filename1 filename2 ...
  • รับการตั้งค่า gedit ของผู้ใช้สำหรับการหยุดแท็บฟอนต์บรรทัดการตัด ฯลฯ
  • เลื่อนไปที่sudo -Hเพื่อรักษาความเป็นเจ้าของไฟล์ในขณะที่รับพลังของรูท
  • ขอรหัสผ่านหากsudoหมดเวลาใช้งานครั้งสุดท้าย
  • รับการตั้งค่า gedit ของ sudo
  • เปรียบเทียบความแตกต่างระหว่างการตั้งค่าผู้ใช้กับการตั้งค่า sudo gedit
  • รันการตั้งค่า gsettings ตามความแตกต่างเท่านั้น (ลด 174 ชุดคำสั่งเป็นโหลหรือน้อยกว่า) ครั้งต่อไปอาจเรียกใช้การเปลี่ยนแปลงเพียงหนึ่งหรือสองครั้ง แต่บ่อยครั้งที่ไม่มีการเปลี่ยนแปลง
  • เรียกgeditใช้เป็นงานพื้นหลังเพื่อให้เทอร์มินัลปรากฏขึ้นอีกครั้งทันที
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.