GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Berisiko Memberi Sudo Vim Akses ke Pengguna Biasa?

Saya ingin membuat pengguna baru dan memberinya akses sudo. Untuk lebih spesifik, saya ingin dia menggunakan sudo vim dan edit httpd.conf. Saya menulis ini di sudoers:

user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Saya, bagaimanapun, mendengar bahwa ini bisa berisiko. Mengapa ini bermasalah? Seberapa serius masalahnya?

Jawaban yang Diterima:

Meskipun Anda membatasi argumen baris perintah, tidak ada yang mencegah pengguna menggunakan vim untuk membuka, mengedit, dan menimpa file acak apa pun setelah dijalankan sebagai root.

Pengguna dapat menjalankan sudo vim /etc/httpd/conf/httpd.conf lalu

  • hapus semua teks itu dari buffer edit
  • maka untuk kemudahan mencari sumber file yang ada (walaupun itu bahkan tidak diperlukan):misalnya konfigurasi sudo
    :r /etc/sudoers CATATAN:Kecuali dibatasi oleh SELinux, pengguna dapat membaca apa saja arsipkan dengan cara ini!
  • memberikan dirinya lebih banyak hak sudo user ALL=(ALL) NOPASSWD: ALL
  • timpa konfigurasi lama :w /etc/sudoers

Saya dapat membayangkan lusinan cara serupa yang sekarang dapat diakses oleh pengguna Anda, memodifikasi, atau menghancurkan sistem Anda.

Anda bahkan tidak akan memiliki jejak audit file mana yang diubah dengan cara ini karena Anda hanya akan melihatnya mengedit konfigurasi Apache Anda di pesan log sudo. Ini adalah risiko keamanan dalam memberikan sudo hak istimewa untuk editor mana pun.

Ini kurang lebih alasan yang sama mengapa memberikan sudo hak tingkat root untuk perintah seperti tar dan unzip sering kali tidak aman, tidak ada yang menghalangi Anda untuk menyertakan pengganti biner sistem atau file konfigurasi sistem dalam arsip.

Risiko kedua, seperti yang ditunjukkan oleh banyak komentator lain, adalah vim memungkinkan shell lolos , tempat Anda dapat memulai sub-kulit dari dalam vim yang memungkinkan Anda mengeksekusi perintah sembarang . Dari dalam sesi sudo vim Anda, itu akan berjalan sebagai root, misalnya shell escape:

  • :!/bin/bash akan memberi Anda shell root interaktif
  • :!/bin/rm -rf / akan membuat cerita bagus di pub.

Apa yang harus dilakukan?

Anda masih dapat menggunakan sudo untuk memungkinkan pengguna mengedit file yang tidak mereka miliki dengan cara yang aman.

Dalam konfigurasi sudoers Anda, Anda dapat mengatur perintah khusus sudoedit diikuti dengan nama path lengkap (wildcard) ke file yang dapat diedit oleh pengguna:

user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

Pengguna kemudian dapat menggunakan -e beralih di baris perintah sudo mereka atau gunakan sudoedit perintah:

sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf

Seperti yang dijelaskan di halaman manual:

-e (edit) opsi menunjukkan bahwa, alih-alih menjalankan perintah, pengguna ingin mengedit satu atau lebih file. Sebagai pengganti perintah, string “sudoedit” digunakan saat berkonsultasi dengan kebijakan keamanan.
Jika pengguna diotorisasi oleh kebijakan, langkah-langkah berikut diambil:

  • Salinan sementara dibuat dari file yang akan diedit dengan pemilik yang disetel ke pengguna yang memanggil.
  • Editor yang ditentukan oleh kebijakan dijalankan untuk mengedit file-file sementara. Kebijakan sudoers menggunakan variabel lingkungan SUDO_EDITOR, VISUAL dan EDITOR (dalam urutan itu). Jika tidak ada SUDO_EDITOR, VISUAL atau EDITOR yang disetel, program pertama yang terdaftar di editor sudoers (5) opsi digunakan.
  • Jika telah dimodifikasi, file sementara akan disalin kembali ke lokasi aslinya dan versi sementara akan dihapus.
    Jika file yang ditentukan tidak ada, file tersebut akan dibuat.
    Perhatikan bahwa tidak seperti sebagian besar perintah dijalankan oleh sudo, editor dijalankan dengan lingkungan pengguna yang tidak dimodifikasi. Jika, karena alasan tertentu, sudo tidak dapat memperbarui file dengan versi yang telah diedit, pengguna akan menerima peringatan dan salinan yang telah diedit akan tetap berada dalam file sementara.

sudoers manual juga memiliki seluruh bagian bagaimana ia dapat menawarkan perlindungan terbatas terhadap pelarian shell dengan RESRICT dan NOEXEC pilihan.

restrict Hindari memberi pengguna akses ke perintah yang memungkinkan pengguna menjalankan perintah arbitrer. Banyak editor memiliki mode terbatas di mana shell escapes dinonaktifkan, meskipun sudoedit adalah solusi yang lebih baik untuk menjalankan editor melalui sudo. Karena banyaknya program yang menawarkan pelarian shell, membatasi pengguna pada kumpulan program yang tidak sering kali tidak dapat dijalankan.

dan

noexec
Banyak sistem yang mendukung pustaka bersama memiliki kemampuan untuk mengesampingkan fungsi pustaka default dengan mengarahkan variabel lingkungan (biasanya LD_PRELOAD) ke pustaka bersama alternatif. Pada sistem seperti itu, fungsionalitas noexec sudo dapat digunakan untuk mencegah program yang dijalankan oleh sudo mengeksekusi program lain. Catatan, ... ...
Untuk mengaktifkan noexec untuk sebuah perintah, gunakan NOEXEC tag seperti yang didokumentasikan di bagian Spesifikasi Pengguna di atas. Ini contoh lagi:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Ini memungkinkan pengguna aron untuk menjalankan /usr/bin/more dan /usr/bin/vi dengan noexec diaktifkan. Ini akan mencegah kedua perintah tersebut mengeksekusi perintah lain (seperti shell).


Linux
  1. Cara Menemukan Semua Pengguna Sudo Di Linux

  2. Mengapa Pengguna Root Membutuhkan Izin Sudo?

  3. Mengapa Pengguna Lain Tidak Dapat Mengakses Berbagi Samba Tanpa Paksa Pengguna =Saya?

  1. Buat pengguna sudo di CentOS

  2. Buat pengguna Sudo di Ubuntu

  3. Berikan Akses Sudo Pengguna (Tambahkan ke File Sudoers atau Grup Roda)

  1. Berikan Akses Virtualbox Hanya Untuk Pengguna Tertentu?

  2. Berikan akses sudo di Debian dan sistem operasi Ubuntu

  3. Bagaimana cara memberikan akses ssh ke pengguna di Ubuntu