Bisakah ada masalah saat menggunakan gedit untuk mengedit file sistem dengan 'sudo -H gedit'?

10

Saya relatif baru di Ubuntu, saya perhatikan bahwa dalam jawaban di situs ini, ketika orang menyarankan mengedit file sistem, perintah yang mereka berikan selalu sudo nanoatau sudo vi. Karena saya tidak suka menggunakan editor teks berbasis terminal, saya biasanya menggunakan

sudo -H gedit

sebaliknya, dan sejauh ini bekerja dengan sangat baik.

Apakah ada masalah dengan penggunaan gedituntuk mengedit file sistem atau apakah pilihan editor teks sepenuhnya sesuai dengan preferensi orang tersebut? Apakah ada sesuatu yang harus saya ingat (seperti penyandian) ketika mengedit file-file ini?

shinobody
sumber
3
Bagian -Hitu penting , jangan gunakan sudountuk meluncurkan aplikasi GUI tanpanya.
pomsky

Jawaban:

10

Selama Anda menjalankannya dengan benar, itu masalah preferensi Anda.

Selain perbedaan fitur , editor teks apa yang Anda gunakan memang cukup banyak pilihan Anda. Ini benar bahkan ketika editor teks Anda adalah program grafis seperti Gedit . Ini bukan untuk mengatakan tidak ada alasan yang bagus nanodan vimsering direkomendasikan. Editor teks berbasis terminal menyukai vim(atau setidaknya viperintah) dan nanotersedia bahkan ketika tidak ada GUI dan bahkan pada sistem yang sangat minim dan rusak ; mereka memiliki tradisi di belakang mereka (jika Anda tidak menyukai hal semacam itu); mereka dapat dijalankan di terminal yang sama di mana tugas-tugas lain dilakukan; mereka secara otomatis diintegrasikan ke dalam alur kerja pengguna terminal multiplexer ; dan mereka lebih mungkin tersedia daripada yang laineditor teks grafis tertentu , bahkan Gedit, bahkan di Ubuntu (yang memiliki beberapa rasa ).

Bukan itu saja. Jika Anda akan mengedit file sistem, satu pendekatan adalah menjalankan editor Anda sebagai root. Ini bukan satu-satunya pendekatan, dan ada beberapa argumen yang menentangnya (lihat di bawah), tetapi itu adalah yang umum. Jika Anda mengambil pendekatan itu dan menggunakan program grafis sebagai editor Anda, maka Anda perlu berhati-hati untuk menjalankannya sedemikian rupa sehingga $HOMEmenjadi direktori home root daripada milik Anda , dan ini menambahkan lapisan kerumitan dan kompleksitas. Tetapi Anda sudah melakukan itu; Anda berlari sudo -H gedit, yang merupakan salah satu cara yang masuk akal . Namun, kompleksitas itu adalah alasan lain mengapa orang cenderung menyarankan editor non-grafis.

Program grafis seringkali lebih rumit daripada program non-grafis. Memiliki lebih banyak hal berjalan sebagai root umumnya buruk, karena ada lebih banyak cara kesalahan bisa terjadi, termasuk karena kemungkinan bug, termasuk secara tidak sengaja. (Editor teks non-grafis seperti vimcukup canggih juga, dan sering dikonfigurasi untuk menjalankan banyak program eksternal untuk melakukan berbagai tugas.)

Selain menjalankan editor sebagai root, pendekatan umum lainnya adalah mengedit file yang editor dapat modifikasi bahkan ketika berjalan sebagai pengguna (non-root) Anda, sehingga perubahan pada file tersebut disebarkan ke file milik root yang Anda inginkan Untuk mengganti. Itu terdengar abstrak karena spesifiknya sangat bervariasi. Dua pendekatan konkret utama mengikuti.

sudoedit

Salah satu cara yang cukup lama untuk melakukan ini adalah sudoedit(didokumentasikan dalam halaman manual yang sama dengansudo ). Secara default, sudoeditgunakan editor teks default , yang biasanya bukan - dan tidak boleh - program grafis. Tapi Anda bisa kirim ke menggunakan editor apapun melalui SUDO_EDITOR, VISUALatau EDITOR variabel lingkungan , yang berkonsultasi dalam urutan itu. Dengan demikian Anda dapat menjalankan:

VISUAL=gedit sudoedit filename

Ganti filenamedengan jalur relatif atau absolut ke file Anda.

Ini membuat salinan sementara dari file yang ingin Anda edit. Salinan dimiliki oleh Anda, bukan oleh root (atau siapa pun pemilik aslinya). Ini membuka editor teks, dan Anda dapat mengedit salinan sementara. Saat Anda menutup editor teks, sudoeditperiksa apakah Anda benar-benar membuat perubahan. Jika Anda melakukannya, itu menyalin salinan sementara yang dimodifikasi kembali ke aslinya.

Sementara sudoeditbekerja dengan editor grafis, ini juga berguna untuk editor berbasis terminal. Dalam kedua kasus, editor teks berjalan seperti Anda, sehingga memiliki konfigurasi Anda, dan tindakan lain yang Anda lakukan di dalamnya lainnya dari modifikasi yang dilakukan ke file yang dilakukan oleh Anda, yang memberikan sedikit perlindungan terhadap beberapa jenis kesalahan.

Anda dapat mengatur salah satu variabel lingkungan tersebut secara terus-menerus jika Anda mau. SUDO_EDITORmungkin yang terbaik karena digunakan untuk hal-hal lain yang lebih sedikit. Namun, jika Anda mengaturnya gedit, perlu diingat bahwa perintah seperti tidak akan berfungsi ketika tidak ada GUI yang tersedia, seperti yang sering (meskipun tidak selalu ) kasing di konsol virtual atau melalui SSH .sudoedit filename

Backend admin GVFS

Cara lain yang lebih baru untuk melakukan ini, adalah membuka file melalui admin://jalur GVFS daripada jalur gaya Unix tradisional. Terima kasih pergi ke pomsky untuk mengajari saya tentang ini. Seperti halnya ada jalur GVFS untuk mengedit file yang, dalam hal lain, tidak di tempat yang nyaman untuk diedit - misalnya karena mereka berada di mesin jarak jauh yang terhubung dengan Anda melalui SSH - GVFS mendukung admin://jalur untuk mengedit file kamu tidak memiliki.

Secara konseptual ini mirip dengan sudoeditdi mana Anda menjalankan editor seperti diri Anda sendiri dan file yang dilihat editor adalah sesuatu yang diizinkan untuk diedit. Mencoba membuka file mengharuskan Anda untuk mengautentikasi; ini bukan cara ajaib untuk menghindari pembatasan keamanan yang biasa.

gedit admin:///path/to/filename

Di sana, /path/to/filenameharus ada jalur absolut ke file, dimulai dengan /. Jadi ada tiga /karakter setelahnya admin:.

Pengkodean dan hal-hal lain secara teoritis dipengaruhi oleh konfigurasi editor

Pengkodean file tidak benar-benar dipengaruhi oleh apakah editor yang Anda gunakan adalah grafis atau tidak. Beberapa editor, seperti vim, bahkan dapat beroperasi baik secara grafis ( gvimperintah) atau non-grafis ( vimperintah). Jawaban sederhana untuk pertanyaan Anda tentang penyandian adalah bahwa Anda tidak perlu khawatir tentang itu. Itu cukup dekat dengan kebenaran sehingga Anda benar-benar tidak perlu membaca sisa dari jawaban ini.

Dalam rilis Ubuntu saat ini (dan yang lalu), perintah menyukai sudo nanodan sudo vimmenjalankan editor tersebut sebagai root tetapi $HOMEmasih diatur ke direktori home Anda . Ini berarti editor secara default akan menggunakan konfigurasi Anda daripada konfigurasi root. Jika ada sesuatu dalam konfigurasi Anda dari editor tersebut (atau dalam program yang mereka jalankan untuk melakukan beberapa pekerjaan mereka, seperti git) tentang penyandian atau akhir baris , itu akan diikuti. Dengan , itu tidak akan terjadi.sudo -H editor

Beberapa orang menggunakan telanjang sudo(yaitu, tanpa -iatau -H) untuk editor karena mereka menginginkannya. Tapi sungguh, Anda harus berpikir dua kali tentang ini. Anda tidak hanya dapat mencapai tujuan itu dengan lebih bersih dengan metode seperti sudoedit, ada juga kelemahan lain dari perintah seperti sudo nanodan sudo vim:

  • Jika konfigurasi editor Anda menyebabkan sesuatu untuk dijalankan, itu dijalankan sebagai root. Untuk editor canggih seperti vim, ini dapat menyebabkan sedikit kode nontrivial untuk dijalankan sebagai root. Seperti disebutkan di atas, memiliki sedikit kode yang dijalankan sebagai root umumnya baik dan ini adalah salah satu argumen terhadap menjalankan editor grafis sebagai root.

    Jika vimkonfigurasi Anda memiliki banyak plugin - misalnya, untuk melakukan analisis statis pada kode sumber saat Anda mengetiknya - dan root tidak, lebih sedikit barang berjalan sebagai root daripada . (Bahkan lebih sedikit berjalan sebagai root , tetapi plugin Anda masih berfungsi!) Ini terpisah dari apakah editor Anda grafis atau tidak.sudo -H vim filenamesudo vim filenameVISUAL=vim sudoedit filename

  • Jika konfigurasi editor Anda rusak dan membuat Anda tidak dapat mengedit file dengan mudah, maka memperbaikinya bahkan mungkin lebih merepotkan, karena itu berlaku juga untuk root. Ini hanyalah masalah, bukan masalah yang sulit untuk dipecahkan.

  • Perintah seperti sudo vimmemiliki sedikit masalah yang sama dengan perintah (keliru!) sudo gedit. Jika Anda menjalankan editor seperti vimsebagai root tetapi tanpa mengatur ulang $HOME(seperti sudo -Hdan sudo -iakan dilakukan), dan itu menciptakan file konfigurasi untuk dirinya sendiri , file-file konfigurasi tersebut akan berada di direktori home Anda tetapi mereka akan dimiliki oleh root, dan konfigurasi Anda mungkin agak rusak ketika nanti Anda menjalankan editor seperti diri Anda sendiri.

    Baiklah, ini terdengar sangat mirip dengan masalah itu! Alasannya kurang penting dibandingkan dengan aplikasi grafis adalah bahwa editor biasanya masih dimulai, pesan kesalahan biasanya lebih mudah dipahami, Anda biasanya dapat mencari tahu apa file tertentu yang terpengaruh jauh lebih mudah, dan kerusakan biasanya terbatas pada program yang satu itu. (Program grafis menggunakan file-file konfigurasi di lebih banyak tempat.) Selain itu, tidak seperti dengan editor grafis, pengguna yang hanya santai menggunakan editor teks dan tidak sengaja mengubah konfigurasi cukup mungkin untuk mengalami masalah ini.

Sekali lagi, Anda dapat menggunakan konfigurasi editor akun pengguna Anda sendiri sambil menghindari masalah izin dengan menggunakan sudoeditatau, dari desktop, memulai editor secara normal tetapi mengakses file melalui admin://jalur.

Akhirnya, perhatikan bahwa perilaku yang disebutkan di atas tentang sudokapan -Hatau -idilewati sebenarnya direncanakan untuk berubah dalam rilis Ubuntu yang akan datang (seperti yang sudah, bertahun-tahun lalu, di sebagian besar sistem operasi mirip Unix yang menggunakan sudo). Perilaku sudah berubah di Ubuntu 19.10 , yang merupakan rilis pengembangan pada tulisan ini.

Eliah Kagan
sumber
2
Masalah lainnya sudo -Hadalah 1 kali dari 100 atau 1000 Anda akan lupa -Hdan kepemilikan file mungkin ditransfer dari pengguna ke root di $HOMEsuatu tempat.
WinEunuuchs2Unix
3

Untuk menjawab pertanyaan Anda: Secara umum, menggunakan editor GUI tidak akan menjadi masalah karena geditmenjadi sangat lambat untuk file besar.

Tetapi untuk program GUI yang akan Anda gunakan pkexecatau gksubukan sudo. Anda mungkin perlu mengonfigurasipkexec sebelum berfungsi.

pkexec gedit

atau untuk versi Ubuntu yang lebih lama (mis. 16.04) Anda dapat menggunakan:

gksu gedit

(Meskipun Anda mungkin mencoba editor GUI yang lebih baik, misalnya geany;-))

pLumo
sumber
gksucukup banyak dibuang.
pomsky
pkexec......
Rinzwind
true true true ....
pLumo
3
Ini seharusnya membantu (@eliah)
pomsky
1
Untuk menguraikan komentar pomsky. Jika koneksi Anda ditolak, kesalahan tampilan, Anda harus menetapkan alias untuk ini sebagai gantinya:pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
mchid