ฉันอ่านเอกสาร "RootSudo" ของชุมชนและสนใจในบรรทัดนี้:
คุณไม่ควรใช้ sudo ปกติเพื่อเริ่มโปรแกรมกราฟิกเป็นรูท
ทำไม? อะไรคือความแตกต่าง? โปรดให้คำอธิบายง่ายๆเพราะฉันเป็นแค่ผู้ใช้เดสก์ท็อปปกติ
ฉันอ่านเอกสาร "RootSudo" ของชุมชนและสนใจในบรรทัดนี้:
คุณไม่ควรใช้ sudo ปกติเพื่อเริ่มโปรแกรมกราฟิกเป็นรูท
ทำไม? อะไรคือความแตกต่าง? โปรดให้คำอธิบายง่ายๆเพราะฉันเป็นแค่ผู้ใช้เดสก์ท็อปปกติ
คำตอบ:
โปรแกรมกราฟิกมักจะเก็บการตั้งค่าและข้อมูลผู้ใช้เฉพาะอื่น ๆ ในแฟ้มการกำหนดค่าเป็นลายลักษณ์อักษรภายในของผู้ใช้โฟลเดอร์ภายในบ้าน โปรแกรมกลไกหลักในการใช้งานเพื่อตรวจสอบสิ่งที่พวกเขาควรจะใช้เป็นโฟลเดอร์บ้านของผู้ใช้เป็นตัวแปรสภาพแวดล้อม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ควรใช้(อย่างน้อยไม่มี) เพื่อเรียกใช้แอปพลิเคชั่นแบบกราฟิกเว้นแต่คุณจะคุ้นเคยกับการทำงานภายในของแอพอย่างมากและรู้ว่าไม่เคยพยายามเขียนไฟล์การกำหนดค่าใด ๆ
sudo chmod -R $USER:$USER ~โชคไม่ดีที่เกณฑ์เหล่านั้นไม่ได้นำมาใช้เสมอ หากคุณมีไฟล์ใด ๆ sudo chmod -R $USER ~ที่คุณต้องการที่จะรักษาความเป็นเจ้าของกลุ่มคุณสามารถเรียกใช้ ซึ่งมักจะเพียงพอ (หากคุณมีไฟล์ที่จำเป็นต้องเป็นเจ้าของโดยผู้ใช้รายอื่นในโฮมได
chmodจริงหรือ ฉันคิดเสมอว่ามันเป็นchownอย่างนั้น chmodไม่เคยทำเพื่อฉัน
chownแทนแน่นอนchmodในความคิดเห็นของฉันด้านบน ขออภัยที่ - และขอบคุณสำหรับการชี้ให้เห็น!
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)
ใส่เพียง:
สิ่งนี้ป้องกันไม่ให้ไฟล์ในโฮมไดเร็กทอรีของคุณเป็นเจ้าของโดยรูท
อ่านได้ที่นี่ นอกจากนี้อาจเป็นความซ้ำซ้อนของ"gksudo nautilus" และ "sudo nautilus" คืออะไร?
อีกทางเลือกหนึ่งgksu nautilusและgksu geditคือการใช้nautilus-adminAdd-on อนุญาตให้คุณเรียกดูไฟล์และไดเรกทอรีด้วยNautilusจากนั้นเปิดเป็น root (ผู้ดูแลระบบ)
การติดตั้งตรงไปตรงมา:
sudo apt install nautilus-admin
ตอนนี้เมื่อคุณอยู่ในหอยโข่งคุณจะมีตัวเลือกเพิ่มเติมสำหรับการแก้ไขในฐานะผู้ดูแลระบบ:
gedit เนื่องจาก root ไม่อนุญาตการกำหนดค่าเมื่อคุณเรียกใช้geditในฐานะรูทคุณจะไม่สามารถใช้การกำหนดค่าตามที่คุณตั้งค่าในฐานะผู้ใช้ทั่วไปสำหรับการหยุดแท็บแปลงแท็บเป็นช่องว่างชื่อแบบอักษรขนาดตัวอักษรการตัดบรรทัด ฯลฯ
เพื่อแก้ปัญหานี้ฉันได้เขียนสคริปต์sgeditเพื่อรับการตั้งค่าของผู้ใช้และนำไปใช้กับรูท: ฉันจะซิงค์รูท gedit ของฉันกับการตั้งค่าของผู้ใช้ gedit ได้อย่างไร
sgedit filename1 filename2 ...sudo -Hเพื่อรักษาความเป็นเจ้าของไฟล์ในขณะที่รับพลังของรูทsudoหมดเวลาใช้งานครั้งสุดท้ายgeditใช้เป็นงานพื้นหลังเพื่อให้เทอร์มินัลปรากฏขึ้นอีกครั้งทันที