Apakah Vim aman digunakan dalam kombinasi dengan sudo?

25

Tidak disarankan untuk menggunakan sudoaplikasi grafis seperti gedit, seperti dijelaskan di tautan ini . Dengan demikian, saya cenderung untuk menggunakan vimdengan sudo.

Baru-baru ini saya perhatikan bahwa saya ~/.viminfodimiliki oleh root pada instalasi Ubuntu 16.04 (Xenial Xerus) yang cukup baru, jadi saya bertanya-tanya apakah Vim dianggap grafis atau apakah ada masalah lain dengan pemanggilan sudo vim. Setelah mengubah kepemilikan untuk diri saya sendiri melalui:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

dan kemudian menjalankan sudo vimsaya tidak dapat ~/.viminfo dimiliki oleh root. Namun, saya yakin itu baru saja dimiliki oleh root.

Apakah tidak disarankan untuk memohon sudo vim?

H2ONaCl
sumber
1
Anda juga dapat menggunakan vim tanpa sudo dan ketika datang untuk menyimpan file, Anda dapat menggunakan:w !sudo tee %
ChatterOne

Jawaban:

22

Ya, aman.

Masalahnya sudo geditadalah karena aplikasi GUI menggunakan file tertentu, seperti ~/.cache/dconf, dan setelah ditinggikan gedit, file tersebut menjadi milik root. Nah, file tertentu itu berisi pengaturan khusus pengguna untuk aplikasi GUI, termasuk desktop, jadi jika sistem tidak dapat membaca pengaturan itu - itu buruk. IIRC pengguna tidak dapat memulai desktop tertentu. Data file terbaru pengguna recently-used.xbeljuga terpengaruh.

Di sisi lain, Vim tidak memiliki masalah itu. Tidak menggunakan database terkait GUI dan tidak memasukkan apa pun ke dalamnya recently-used.xbel. Itu dibuat untuk tujuan konsol saja, meskipun gVim juga ada. Bahkan, pada beberapa sistem, Vim adalah satu-satunya pilihan editor Anda. Jadi lebih aman daripada gedit karena tidak menyebabkan masalah yang sama. Anda masih menyunting sebagai root di kedua kasus, sehingga Anda dapat menyebabkan masalah dengan pengeditan yang tidak benar.

Menurut posting blog ini :

Pertama kali Anda menggunakan vim, file ~/.viminfodibuat, dan jika Anda menggunakan sudo vimpertama kali Anda menggunakan vim setelah menginstalnya pada sistem yang baru, izin pada ~/.viminfopemilik akan diatur untuk melakukan root bukannya pengguna default.

Sementara penulis menunjukkan itu dapat menyebabkan masalah, tidak ada yang kompleks - hanya chownfile kembali ke diri Anda sendiri.

Lihat juga:

Sergiy Kolodyazhnyy
sumber
6
Perhatikan bahwa vim tidak aman pada sistem multi-pengguna tempat Anda mencoba membatasi izin administratif pengguna lain. Seorang pengguna dapat menggunakan sudo vimuntuk mendapatkan salinan vim berjalan sebagai root, lalu :!/bin/shuntuk mendapatkan shell root.
Tandai
3
@ Mark dan apa yang mencegah pengguna dari hanya melakukan sudo /bin/sh? Secara praktis, jika pengguna sudah memiliki akses root, mereka tidak perlu menggunakan trik rumit.
Sergiy Kolodyazhnyy
7
The /etc/sudoersberkas. Anda tidak perlu melakukan %wheel ALL=(ALL) ALL- sudokonfigurasi memungkinkan nuansa yang jauh lebih dari itu.
Tandai
1
@ Mark OK, poin bagus - tidak semua sistem memiliki pengaturan yang sama.
Sergiy Kolodyazhnyy
Uhm ... Akankah izin berubah bahkan jika file itu ada? Misalkan saya meretas akun pengguna non-admin, tetapi saya tidak tahu kata sandinya (mungkin saya berhasil membuka shell). Apakah ini berarti bahwa saya dapat menyalin /bin/bashke ~/.viminfo, menempatkan setuid di atasnya dan menunggu user untuk menjalankan sudo vimuntuk memilikinya chowned ke akar?
ChatterOne
15

Ini juga mungkin digunakan sudoedituntuk mencapai ini; itu membuka salinan sementara file di editor Anda, dengan editor Anda berjalan seperti Anda. Dari halaman manual :

  1. Salinan sementara terbuat dari file yang akan diedit dengan pemiliknya diatur ke pengguna yang memohon.

  2. Editor yang ditentukan oleh kebijakan dijalankan untuk mengedit file sementara. Kebijakan sudoers menggunakan variabel SUDO_EDITOR, VISUALdan EDITORlingkungan (dalam urutan itu). Jika tidak ada SUDO_EDITOR, VISUALatau EDITORdisetel, program pertama yang tercantum dalam sudoers(5)opsi editor digunakan.

  3. Jika sudah dimodifikasi, file sementara disalin kembali ke lokasi aslinya dan versi sementara dihapus.

Ini berfungsi baik dengan vim (ini yang biasanya saya lakukan) dan saya membayangkan itu akan membiarkan Anda menggunakan gedit juga. Ada beberapa batasan keamanan .

GKFX
sumber
4
Ini jauh lebih baik jika Anda lebih suka menggunakan konfigurasi vim Anda sendiri daripada root.
NieDzejkob
2
Ini juga lebih aman jika Anda tidak ingin menjalankan kode plugin acak sebagai root (namun, plugin berjalan karena Anda juga dapat melakukan banyak kerusakan jika mereka berbahaya, jadi jangan gunakan plugin yang tidak Anda percayai dalam tempat pertama).
Kevin
2

Tautan ini sangat lama (2013). Ini merekomendasikan menggunakan gksudoatau gksuuntuk aplikasi grafis tetapi keduanya menjadi usang. Namun kemudian jawaban yang diterima juga menyarankan sudo -H.

Konsensus umum dalam komunitas Ask Ubuntu baru-baru ini adalah menggunakan:

sudo -H gedit /path/to/filename

Satu-satunya masalah tetap yang sudotidak memiliki profil untuk pengaturan tab, ekstensi, bungkus kata, nama font, ukuran font, dll. Anda dapat mewarisi ini dari profil pengguna Anda meskipun dengan skrip pembungkus seperti ini: Bagaimana saya bisa menyinkronkan root saya gedit dengan preferensi pengguna gedit saya?

WinEunuuchs2Unix
sumber
2

Ya, aman digunakan sudo vim. Masalah yang saya temui adalah

  • Harus keluar dari file dan membuka kembali sudo vimuntuk dapat mengedit.

  • Memiliki root vimrcsebagai default, bukan hal berguna yang saya kustomisasi.

Berikut adalah fungsi yang dapat Anda masukkan bashrcke Anda untuk memungkinkan vim untuk secara otomatis sudo jika Anda tidak dapat mengedit file secara normal.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}
profil jeremys
sumber
Di Ubuntu sudosecara default mempertahankan $HOMEvariabel lingkungan, yang berarti yang sudo vim akan menggunakan .vimrc kustom Anda, dan itu juga berarti bahwa sudo vimakan mengubah kepemilikan ~/.viminfomenjadi root: root dan menyebabkan Anda merasa tidak nyaman.
Marius Gedminas
Jawaban yang diterima tidak setuju dengan Anda tentang viminfo.
jeremysprofile
1

Tidak apa-apa menggunakan vi sebagai root. Akan ada saat-saat ketika Anda perlu mengedit file yang memerlukan hak istimewa sudo atau root, seperti mengubah file antarmuka jaringan Anda, atau mungkin mengedit file konfigurasi sshd Anda. Menggunakan root untuk hal-hal grafis buruk karena orang akan terhubung ke IRC atau menelusuri web sebagai root. Jika mereka mendapatkan virus saat melakukannya, itu akan memiliki akses root penuh.

Surat M
sumber
2
Ada setidaknya satu pengecualian khusus untuk menggunakan vi sebagai root. File yang mengontrol jalur sudo (/ etc / sudoers) tidak boleh diedit dengan vi. Untuk file itu, perintah visudo harus digunakan. Anda bahkan tidak menentukan file apa yang sedang diedit, itu hanya kasus khusus.
user628388
1

Sesuatu yang belum disebutkan dalam jawaban lain adalah menjalankan vim dengan root akan memberikan hak akses root ke plugin apa pun yang telah Anda instal. Jadi, pertanyaan apakah aman untuk dijalankan sebagai root atau tidak tergantung pada apakah Anda memercayai pengembang plugin tersebut (atau kontributor proyek mereka) untuk tidak memiliki sistem Anda pada intinya.

Vim biasanya diperiksa oleh pengelola paket di semua distribusi linux, sehingga mudah dipercaya. Namun, vim plugins biasanya dipasang langsung dari repo GitHub dan biasanya memiliki lebih sedikit audit pengguna (mungkin nihil). Dengan kata lain, tidak ada proses pemeriksaan dengan mereka.

Jika Anda tidak memuat plugin saat di root, maka saya kira menjalankan sebagai root tergantung pada apakah Anda mempercayai pengembang vim. Anda dapat melewati keharusan mempercayai mereka, dengan menggunakan sudoedit yang dibuat oleh pengembang sudo yang sama, orang-orang yang sudah kami percayai dengan akses root. GKFX dan NieDzejkob telah menyebutkan mengapa sudoedit ideal. Selain itu Anda tidak perlu mempercayai akses root ke orang lain selain pengembang sudo, Anda dapat memuat semua plugin yang sudah Anda percayai dengan akun pengguna normal Anda.

JoL
sumber
Diskusi tentang tidak mempercayai berbagai pengembang ini tampaknya agak tidak lengkap; jika Anda sudoedit /etc/apt/sources.listdengan plugin yang terinstal terpasang, itu mungkin dapat menyisipkan repositori berbahaya dan mendapatkan akses root saat Anda menjalankan pembaruan lagi pula. Saya yakin ada daftar panjang file yang dilindungi root yang menerapkan sesuatu yang serupa. Dan tentu saja, tidak setiap virus membutuhkan root; orang dapat mengambil detail bank Anda dengan tidak lebih dari ekstensi browser.
GKFX