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 dari buffer edit
- kemudian untuk sumber kenyamanan file yang ada (walaupun itu bahkan tidak diperlukan): misalnya konfigurasi sudo
:r /etc/sudoers
CATATAN: Kecuali dibatasi oleh SELinux pengguna dapat membaca file apa pun dengan cara ini!
- beri dia lebih banyak hak istimewa sudo
user ALL=(ALL) NOPASSWD: ALL
- menimpa 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 dalam pesan sudo log. Ini adalah risiko keamanan dalam memberikan sudo
hak istimewa kepada editor mana pun.
Ini kurang lebih alasan yang sama mengapa memberikan hak tingkat akar sudo untuk perintah seperti tar
dan unzip
sering tidak aman, tidak ada yang mencegah Anda dari memasukkan penggantian untuk binari sistem atau file konfigurasi sistem dalam arsip.
Risiko kedua, seperti yang ditunjukkan oleh banyak komentator lain, adalah vim
memungkinkan shell lolos , di mana Anda dapat memulai sub-shell dari dalam vim yang memungkinkan Anda menjalankan perintah sewenang-wenang . 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-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 yang disediakan sudoedit
diikuti dengan pathname (wildcard) lengkap ke file yang dapat diedit pengguna:
user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
Pengguna kemudian dapat menggunakan -e
switch di baris perintah sudo mereka atau menggunakan sudoedit
perintah:
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
Seperti yang dijelaskan di halaman manual :
The -e (edit)
pilihan menunjukkan bahwa, alih-alih menjalankan perintah, pengguna ingin mengedit satu atau lebih file. Sebagai pengganti perintah, string "sudoedit" digunakan ketika berkonsultasi dengan kebijakan keamanan.
Jika pengguna diotorisasi oleh kebijakan, langkah-langkah berikut diambil:
- Salinan sementara terbuat dari file yang akan diedit dengan pemiliknya diatur ke pengguna yang memohon.
- Editor yang ditentukan oleh kebijakan dijalankan untuk mengedit file sementara. Kebijakan sudoers menggunakan variabel lingkungan SUDO_EDITOR, VISUAL dan EDITOR (dalam urutan itu). Jika tidak ada SUDO_EDITOR, VISUAL atau EDITOR yang ditetapkan, program pertama yang tercantum dalam opsi editor
sudoers
(5) digunakan.
- Jika sudah dimodifikasi, file sementara disalin kembali ke lokasi aslinya dan versi sementara dihapus.
Jika file yang ditentukan tidak ada, itu akan dibuat.
Perhatikan bahwa tidak seperti kebanyakan perintah yang dijalankan oleh sudo, editor dijalankan dengan lingkungan pengguna yang memohon tidak dimodifikasi. Jika, karena suatu alasan, sudo tidak dapat memperbarui file dengan versi yang diedit, pengguna akan menerima peringatan dan salinan yang diedit akan tetap dalam file sementara.
The sudoers
pengguna juga memiliki seluruh bagian bagaimana dapat menawarkan terbatas perlindungan terhadap lolos shell dengan RESRICT
dan NOEXEC
pilihan.
restrict
Hindari memberi pengguna akses ke perintah yang memungkinkan pengguna menjalankan perintah sewenang-wenang. Banyak editor memiliki mode terbatas di mana shell lolos dinonaktifkan, meskipun sudoedit adalah solusi yang lebih baik untuk menjalankan editor melalui sudo. Karena sejumlah besar program yang menawarkan pelarian shell, membatasi pengguna ke set program yang tidak sering tidak dapat dikerjakan.
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 dari menjalankan program lain. Catatan, ... ...
Untuk mengaktifkan noexec untuk suatu perintah, gunakan NOEXEC
tag seperti yang didokumentasikan di bagian Spesifikasi Pengguna di atas. Ini adalah contohnya lagi:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Ini memungkinkan pengguna aaron untuk menjalankan /usr/bin/more
dan /usr/bin/vi
dengan noexec diaktifkan. Ini akan mencegah dua perintah dari mengeksekusi perintah lain (seperti shell).
vim
, pengguna bebas untuk membuka dan menulis ke file apa pun yang diinginkannya.