Mengapa pengguna tidak boleh menggunakan sudo normal untuk memulai aplikasi grafis?

114

Saya telah membaca dokumentasi komunitas "RootSudo" dan saya tertarik dengan baris ini:

Anda tidak boleh menggunakan sudo normal untuk memulai aplikasi grafis sebagai Root.

Mengapa? Apa bedanya? Berikan penjelasan sederhana, karena saya hanya pengguna desktop biasa.

Nur
sumber
Sebenarnya, saya baru-baru ini mengalami kesulitan menginstal MATLAB ke / usr / local. Ini membutuhkan hak akses root untuk menulis ke / usr / local, tetapi menjalankan installer menggunakan gksu entah bagaimana membuatnya tidak mungkin untuk menjalankan program yang diinstal sebagai non-root. Menjalankan installer menggunakan sudo membuat semuanya berfungsi dengan baik.
Bib-hilang

Jawaban:

129

Aplikasi grafis sering menyimpan pengaturan dan data khusus pengguna lainnya dalam file konfigurasi yang ditulis di dalam folder rumah pengguna . Aplikasi mekanisme utama yang digunakan untuk menentukan apa yang harus mereka gunakan sebagai folder home pengguna adalah HOME variabel lingkungan . (Anda dapat memeriksanya sendiri dengan echo $HOME).

Misalkan Anda menjalankan gedit(editor teks grafis) sebagai root. Jika Anda menjalankan sudo gedit, HOMEakan terus menunjuk ke arah Anda direktori home, meskipun program ini berjalan sebagairoot . Akibatnya, geditakan menulis file konfigurasi sebagairoot ke direktori home Anda. Ini kadang-kadang akan menghasilkan file konfigurasi yang dimiliki olehroot dan dengan demikian tidak dapat diakses oleh Anda (ketika Anda kemudian menjalankan program seperti diri Anda sendiri dan bukan sebagai root). Ini terutama terjadi ketika aplikasi harus membuat file konfigurasi baru. File yang baru dibuat, secara default, dimiliki oleh pengguna yang membuatnya (yang dalam hal ini root, bukan Anda).

Itulah alasan utama mengapa Anda harus menjalankan aplikasi grafis dengan tampilan grafis sudodaripada dengan garis lurus sudo. Di Ubuntu dan sebagian besar turunannya (termasuk Xubuntu dan Lubuntu), antarmuka grafis standar adalah gksu/gksudo . Di Kubuntu begitu kdesudo. (Tergantung pada lingkungan desktop yang digunakan.)

Jika Anda ingin menggunakan sudosecara langsung untuk menjalankan aplikasi grafis seperti gedit, Anda dapat menjalankan:

sudo -H gedit

The -Hflag membuat sudoset HOMEuntuk menunjuk ke root's folder rumah (yang /root).

Itu masih tidak akan secara otomatis menangani kepemilikan .Xauthoritydengan menyalinnya ke folder temp (ini adalah hal lain yang ditangani oleh grafis sudofrontend untuk Anda). Tetapi dalam peristiwa yang jarang terjadi yang .Xauthoritytidak dapat diakses, Anda akan mendapatkan kesalahan dengan mengatakannya, dan kemudian Anda dapat memperbaiki masalah dengan menghapusnya ( sudo rm ~/.Xauthority), karena masalah itu secara otomatis dibuat ulang. Dengan demikian, melindungi .Xauthoritykepemilikan dan izin kurang penting daripada melindungi kepemilikan dan izin file konfigurasi.

Berbeda dengan yang rootdimiliki .Xauthority, ketika file konfigurasi menjadi milik root, tidak selalu sejelas apa masalahnya (karena program grafis akan sering berjalan, tetapi tidak berfungsi dengan baik, dan menampilkan kesalahan yang berguna ke konsol). Dan kadang-kadang kesulitan yang lebih besar untuk diperbaiki, terutama jika Anda berada dalam situasi di mana Anda ingin satu atau lebih file di direktori home Anda dimiliki oleh orang lain selain Anda (karena Anda tidak dapat memperbaikinya hanya dengan secara rekursif mengambil chownsemua file Anda. kembali ke dirimu sendiri).

Oleh karena itu, sudo(setidaknya tanpa -H) tidak boleh digunakan untuk menjalankan aplikasi grafis kecuali jika Anda sangat terbiasa dengan cara kerja aplikasi dan tahu pasti bahwa itu tidak pernah mencoba untuk menulis file konfigurasi.

Eliah Kagan
sumber
Bisakah saya menjadi pemilik semua file konfigurasi (atau file apa pun) di direktori Beranda saya lagi, jika file ini telah dimiliki oleh root?
Nur
@Nur Dengan asumsi tidak ada file di direktori home Anda yang ingin Anda miliki oleh pengguna lain atau bahwa Anda ingin memiliki keanggotaan grup lain (untuk dibagikan) , Anda dapat menjalankan: sudo chmod -R $USER:$USER ~Sayangnya, kriteria tersebut tidak selalu berlaku. Jika Anda memiliki file di mana Anda perlu mempertahankan pemilik grup, Anda dapat menjalankannya sudo chmod -R $USER ~. Ini biasanya cukup. (Jika Anda memiliki file perlu dimiliki oleh pengguna lain di direktori home Anda, bahkan itu akan menjadi masalah.)
Eliah Kagan
1
@ ElliKagan Apakah chmodbenar-benar melakukannya? Saya selalu berpikir itu chownyang melakukannya. chmodtidak pernah melakukannya untukku.
Wyatt8740
2
@ Wyatt8740 Saya seharusnya menulis chowndaripada chmoddi komentar saya di atas. Maaf tentang itu - dan terima kasih telah menunjukkan ini!
Eliah Kagan
2
@TheQuark In sudo -H echo $HOME, shell Anda - berjalan seperti Anda, bukan sebagai root - melakukan ekspansi parameter aktif $HOME, mendapatkan path direktori home Anda , lalu meneruskannya ke sudo, yang pada gilirannya melewati nilai yang sudah diperluas untuk echo, yang mencetaknya. sudo -H printenv HOME,, sudo -H bash -c 'echo $HOME'dan sudo -H sh -c 'echo $HOME'semua cetak /root. Secara konseptual ini mirip - meskipun dengan mekanisme yang berbeda - dengan cara x=a echo "$x"tidak mencetak a(kecuali xsudah ada nilainya a).
Eliah Kagan
5

Alternatif untuk gksu nautilusdan gksu geditadalah menggunakan nautilus-adminadd-on. Ini memungkinkan Anda untuk menelusuri file dan direktori dengan Nautilus dan kemudian membukanya sebagai root (Administrator).

Instalasi lurus ke depan:

sudo apt install nautilus-admin

Sekarang ketika Anda berada di nautilus Anda akan memiliki opsi tambahan untuk Edit sebagai administrator:

nautilus admin.gif


gedit sebagai root tidak mengizinkan preferensi

Saat dijalankan geditsebagai root, Anda tidak dapat menggunakan preferensi yang telah Anda siapkan sebagai pengguna biasa untuk penghentian tab, mengonversi tab menjadi spasi, nama font, ukuran font, pembungkus baris, dll.

Untuk mengatasi ini, saya telah menulis skrip sgedituntuk mewarisi preferensi pengguna dan menerapkannya ke root: Bagaimana saya bisa menyinkronkan root gedit saya dengan preferensi pengguna gedit saya?

  • Panggilan menggunakan sgedit filename1 filename2 ...
  • Mendapat pengaturan gedit pengguna untuk penghentian tab, font, pembungkus baris, dll.
  • Tinggikan ke sudo -Huntuk mempertahankan kepemilikan file sementara mendapatkan kekuatan root.
  • Meminta kata sandi jika sudobatas waktu terakhir habis.
  • Mendapat pengaturan gedit sudo
  • Membandingkan perbedaan antara pengaturan pengguna dan sudo gedit
  • Menjalankan pengaturan gs set hanya pada perbedaan (mengurangi 174 mengatur perintah menjadi selusin atau kurang. Lain kali dijalankan mungkin hanya satu atau dua perubahan tetapi sering kali tidak ada perubahan.
  • Panggilan geditsebagai tugas latar belakang sehingga terminal prompt muncul kembali dengan segera.
WinEunuuchs2Unix
sumber