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