จะมีปัญหาใด ๆ เมื่อใช้ gedit เพื่อแก้ไขไฟล์ระบบด้วย 'sudo -H gedit' หรือไม่?


10

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

sudo -H gedit

แทนและจนถึงตอนนี้มันทำงานได้ดีอย่างสมบูรณ์

จะมีปัญหาใด ๆ ในการใช้geditเพื่อแก้ไขไฟล์ระบบหรือตัวเลือกของโปรแกรมแก้ไขข้อความล้วนขึ้นอยู่กับความชอบของบุคคลนั้น ๆ หรือไม่? มีสิ่งใดบ้างที่ฉันควรจำไว้ (เช่นการเข้ารหัส) เมื่อแก้ไขไฟล์เหล่านี้?


3
-Hส่วนหนึ่งเป็นสิ่งสำคัญไม่ได้ใช้sudoเพื่อการใช้งานเปิดตัว GUI โดยไม่ได้
pomsky

คำตอบ:


10

ตราบใดที่คุณทำงานอย่างถูกต้องมันเป็นเรื่องของการตั้งค่าของคุณ

นอกเหนือจากคุณสมบัติที่แตกต่างแล้วตัวแก้ไขข้อความที่คุณใช้คือความพึงพอใจของคุณ นี้เป็นจริงแม้เมื่อแก้ไขข้อความของคุณเป็นโปรแกรมกราฟิกเช่นGedit นี่ไม่ได้เป็นการบอกว่าไม่มีเหตุผลที่ดีnanoและvimมักจะแนะนำ แก้ไขข้อความตามเทอร์มิชอบvim(หรืออย่างน้อยviคำสั่ง) และnanoมีอยู่แม้เมื่อไม่มี GUI และแม้กระทั่งในระบบมากที่สุดและน้อยที่สุดเสีย ; พวกเขามีประเพณีบางอย่างอยู่เบื้องหลังพวกเขา (ถ้าคุณเป็นส่วนหนึ่งของสิ่งนั้น); สามารถรันในเทอร์มินัลเดียวกันกับที่ดำเนินการงานอื่น พวกเขารวมเข้ากับเวิร์กโฟลว์ของผู้ใช้มัลติเทอร์มินัลโดยอัตโนมัติ และพวกเขามีแนวโน้มที่จะพร้อมใช้งานมากกว่าคนอื่น ๆตัวแก้ไขข้อความกราฟิกโดยเฉพาะแม้แต่ Gedit แม้แต่ใน Ubuntu (ซึ่งมีหลายรสชาติ )

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

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

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

sudoedit

วิธีการหนึ่งที่ใช้เวลานานพอสมควรในการทำเช่นนี้คือsudoedit(จัดทำเป็นเอกสารไว้ในหน้าคู่มือเดียวกันกับsudo ) โดยค่าเริ่มต้นsudoeditใช้ตัวแก้ไขข้อความเริ่มต้นซึ่งมักจะไม่ใช่ - และไม่ควรเป็น - โปรแกรมกราฟิก แต่คุณสามารถบอกให้ใช้โปรแกรมแก้ไขใด ๆ ผ่านทางSUDO_EDITOR, VISUALหรือEDITOR ตัวแปรสภาพแวดล้อมซึ่งให้คำปรึกษาในลำดับที่ ดังนั้นคุณสามารถเรียกใช้:

VISUAL=gedit sudoedit filename

แทนที่filenameด้วยพา ธ สัมพัทธ์หรือพา ธ สัมบูรณ์ไปยังไฟล์ของคุณ

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

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

คุณสามารถตั้งค่าหนึ่งในตัวแปรสภาพแวดล้อมเหล่านั้นอย่างต่อเนื่องหากคุณต้องการ SUDO_EDITORอาจจะดีที่สุดเพราะใช้สำหรับสิ่งอื่น ๆ น้อยลง แต่ถ้าคุณตั้งค่าให้geditเก็บไว้ในใจว่าคำสั่งเช่นจะไม่ทำงานเมื่อไม่มี GUI สามารถใช้ได้เป็นมักจะเป็น (แม้จะไม่ได้เสมอ ) ในกรณีที่คอนโซลเสมือนหรือผ่านทางSSHsudoedit filename

แบ็กเอนด์ผู้ดูแลระบบ GVFS

อีกวิธีที่ใหม่กว่าในการทำเช่นนี้คือการเปิดไฟล์ผ่านadmin://เส้นทางGVFS แทนเส้นทางแบบ Unix ดั้งเดิม ขอบคุณ pomsky ที่สอนฉันเกี่ยวกับเรื่องนี้ เช่นเดียวกับที่มีเส้นทาง GVFS สำหรับแก้ไขไฟล์ที่อยู่ในสถานที่อื่น ๆ ไม่ได้อยู่ในสถานที่ที่สะดวกในการแก้ไข - ตัวอย่างเช่นเนื่องจากอยู่ในเครื่องระยะไกลที่คุณเชื่อมต่อผ่าน SSH - GVFS รองรับadmin://เส้นทางสำหรับแก้ไขไฟล์ คุณไม่ได้เป็นเจ้าของ

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

gedit admin:///path/to/filename

ที่นั่นจะต้องเป็นเส้นทางที่แน่นอนไปยังไฟล์ที่เริ่มต้นด้วย/path/to/filename /ดังนั้นมีสามตัวละครหลัง/admin:

การเข้ารหัสและสิ่งอื่น ๆได้รับผลกระทบทางทฤษฎีจากการกำหนดค่าของตัวแก้ไข

การเข้ารหัสไฟล์นั้นไม่ได้รับผลกระทบจริง ๆ ไม่ว่าตัวแก้ไขที่คุณใช้จะเป็นกราฟิกหรือไม่ บรรณาธิการบางคนvimอาจใช้งานแบบกราฟิก ( gvimคำสั่ง) หรือไม่ใช่แบบกราฟิก ( vimคำสั่ง) คำตอบที่ง่ายสำหรับคำถามของคุณเกี่ยวกับการเข้ารหัสคือคุณไม่ต้องกังวลเกี่ยวกับสิ่งนั้น ใกล้เคียงกับความจริงที่คุณไม่ต้องอ่านคำตอบที่เหลือ

ในปัจจุบัน (และที่ผ่านมา) รุ่นอูบุนตูคำสั่งเช่นsudo nanoและsudo vimทำงานบรรณาธิการผู้ที่เป็นราก แต่$HOMEยังคงตั้งค่าให้คุณไดเรกทอรีบ้าน ซึ่งหมายความว่าโดยค่าเริ่มต้นบรรณาธิการจะใช้การกำหนดค่าของคุณมากกว่าการกำหนดค่าของรูท หากมีบางสิ่งในการกำหนดค่าของผู้แก้ไขเหล่านั้น (หรือในโปรแกรมที่พวกเขาทำงานเพื่อทำงานบางอย่างเช่นgit) เกี่ยวกับการเข้ารหัสหรือการสิ้นสุดบรรทัดมันจะถูกติดตาม ด้วยที่จะไม่เกิดขึ้นsudo -H editor

บางคนใช้ตัวเปล่าsudo(เช่นไม่มี-iหรือ-H) ให้กับบรรณาธิการเพราะพวกเขาต้องการสิ่งนั้น แต่จริงๆคุณควรคิดสองครั้งเกี่ยวกับเรื่องนี้ ไม่เพียง แต่คุณจะสามารถบรรลุเป้าหมายนั้นได้อย่างชัดเจนยิ่งขึ้นด้วยวิธีการเช่นเดียวกับsudoeditข้อเสียอื่น ๆ ของคำสั่งเช่นsudo nanoและsudo vim:

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

    หากvimการกำหนดค่าต่าง ๆ นานามีปลั๊กอิน - ตัวอย่างเช่นการดำเนินการวิเคราะห์แบบคงที่ในรหัสที่มาขณะที่คุณพิมพ์มัน - และรากไม่น้อยกว่าสิ่งที่วิ่งเป็นรากที่มีมากกว่า (แม้จะทำงานน้อยลงตามรูท แต่ปลั๊กอินของคุณยังคงใช้งานได้!) สิ่งนี้แยกจากว่าตัวแก้ไขของคุณเป็นแบบกราฟิกหรือไม่sudo -H vim filenamesudo vim filenameVISUAL=vim sudoedit filename

  • หากการกำหนดค่าตัวแก้ไขของคุณใช้งานไม่ได้และป้องกันไม่ให้คุณแก้ไขไฟล์ได้อย่างง่ายดายการแก้ไขที่อาจทำให้เกิดความยุ่งยากมากขึ้น นี่เป็นเพียงความยุ่งยากไม่ใช่ปัญหายากที่จะแก้ไข

  • คำสั่งเช่นsudo vimมีบิตของปัญหาเช่นเดียวกับ (ทะลึ่ง!) sudo geditคำสั่ง หากคุณเรียกใช้โปรแกรมแก้ไขเช่นเดียวvimกับรูท แต่ไม่มีการรีเซ็ต$HOME( sudo -Hและsudo -iจะทำ) และมันจะสร้างไฟล์การกำหนดค่าสำหรับตัวเองไฟล์การกำหนดค่าเหล่านั้นจะอยู่ในโฮมไดเร็กตอรี่ของคุณ แต่พวกเขาจะเป็นเจ้าของโดยรูท เมื่อคุณเรียกใช้ตัวแก้ไขในภายหลังด้วยตนเอง

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

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

สุดท้ายทราบว่าพฤติกรรมดังกล่าวข้างต้นsudoเมื่อ-Hหรือ-iถูกส่งผ่านไปมีการวางแผนที่จริงการเปลี่ยนแปลงในรุ่นอนาคตของอูบุนตู (มันมีอยู่แล้วปีที่ผ่านมาใน Unix เหมือนระบบปฏิบัติการการใช้งานมากที่สุดที่sudo) พฤติกรรมดังกล่าวได้เปลี่ยนไปแล้วใน Ubuntu 19.10ซึ่งเป็นรุ่นที่มีการพัฒนาในขณะที่เขียนนี้


2
ปัญหาอีกข้อหนึ่งsudo -Hคือ 100 หรือ 1,000 ครั้งที่คุณจะลืม-Hและความเป็นเจ้าของไฟล์อาจถ่ายโอนจากผู้ใช้ไปยังรูทภายใน$HOMEบางแห่ง
WinEunuuchs2Unix

3

ในการตอบคำถามของคุณ: โดยทั่วไปการใช้ตัวแก้ไข GUI จะไม่เป็นปัญหาในการอัปโหลดgeditไฟล์ขนาดใหญ่ช้ามาก

แต่สำหรับโปรแกรม GUI ที่คุณจะใช้pkexecหรือแทนgksu sudoคุณอาจต้องกำหนดค่าpkexecก่อนที่จะใช้งานได้

pkexec gedit

หรือสำหรับ Ubuntu รุ่นเก่า (เช่น 16.04) คุณสามารถใช้:

gksu gedit

(แม้ว่าคุณอาจลองใช้เครื่องมือแก้ไข GUI ที่ดีกว่าเช่นgeany;-))


gksuถูกทิ้งสวยมาก
pomsky

pkexec......
Rinzwind

จริงจริงจริง ....
pLumo

3
สิ่งนี้จะช่วยได้ (@eliah)
pomsky

1
เพื่ออธิบายรายละเอียดเกี่ยวกับความคิดเห็นของ pomsky ถ้าคุณได้รับการเชื่อมต่อปฏิเสธแสดงข้อผิดพลาดคุณจะต้องตั้งชื่อแทนไปนี้แทน:pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
mchid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.