Saya ingin membuat pengguna baru dan memberinya akses sudo. Untuk lebih spesifik, saya ingin dia menggunakan sudo vim
dan mengedit httpd.conf. Saya menulis ini di sudoers:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
Namun, saya mendengar bahwa ini bisa berisiko. Mengapa ini bermasalah? Seberapa serius masalahnya?
vim
, pengguna bebas untuk membuka dan menulis ke file apa pun yang diinginkannya./etc/httpd/confs/httpd.conf
. Kemudian gunakanchgrp [OPTION] GROUPNAME FILE
untuk mengubah kepemilikan grup/etc/httpd/confs/httpd.conf
. Sesuatu sepertigroupadd vimportant
membuat grup baru danchgrp -v vimportant /etc/httpd/confs/httpd.conf
mengubah kepemilikan grup. yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.htmlsudoers
halaman manual.sudo
akses ke vim, pengguna akan dapat menggunakan vim sebagai root. Dalam vim Anda dapat menjalankan perintah UNIX ( Bagaimana menjalankan perintah Unix dari dalam Vim? ) Sehingga pengguna dapat melakukan hal-hal sepertiuseradd <myuser>
,rm -rf /
atau banyak hal lainnya.Jawaban:
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:r /etc/sudoers
CATATAN: Kecuali dibatasi oleh SELinux pengguna dapat membaca file apa pun dengan cara ini!user ALL=(ALL) NOPASSWD: ALL
: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
danunzip
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:Pengguna kemudian dapat menggunakan
-e
switch di baris perintah sudo mereka atau menggunakansudoedit
perintah:Seperti yang dijelaskan di halaman manual :
The
sudoers
pengguna juga memiliki seluruh bagian bagaimana dapat menawarkan terbatas perlindungan terhadap lolos shell denganRESRICT
danNOEXEC
pilihan.dan
sumber
sudo tar
dansudo unzip
juga menyebabkan masalah. Terima kasih.:!rm -rf /
, wah!echo "user ALL=(ALL) NOPASSWD: ALL" > ~/sudoers; tar cv ~/sudoers | sudo tar xv -C /etc
Dan booming. Akses root ke tar adalah kerentanan.:sh
, kemudian boom, root shellKonfigurasi ini memungkinkan pengguna untuk mengedit file itu. Untuk melakukannya, ia memulai
vim
editor dengan hak root.Setelah
vim
perintah dimulai, pengguna dapat melakukan apapun yang dia suka dengan editor itu. - Dia dapat membuka file yang berbeda atau bahkan memulai shell dari vim.Karena itu, pengguna kini dapat melihat dan mengedit file arbitrer dan menjalankan perintah arbitrer pada sistem Anda.
sumber
Kunci keamanan
Beberapa program, seperti misalnya
less
,vi
,vim
danmore
, memungkinkan program lain untuk menjalankan dari perintah-apa shell yang dikenal sebagai Shell Escape atau melarikan diri ke command interpreter. Dalam kasus ini Anda dapat menggunakanNOEXEC
untuk mencegah beberapa program mengizinkan eksekusi hak istimewa program lain. Contoh:Ini akan memungkinkan pengguna untuk mengedit atau lebih dan melihat hak istimewa file pada sistem yang menjalankan vim dan banyak lagi, tetapi menonaktifkan kemungkinan untuk menjalankan program lain dengan hak istimewa dari penerjemah perintah escape
vim
.Yang penting
sudo
termasuk beberapa kunci keamanan (default) yang dapat mencegah tugas-tugas berbahaya, seperti mengarahkan output standar dari pelaksanaan suatu program (STDOUT
) ke file di luar direktori home pengguna.Jika didefinisikan dalam file
/etc/sudoers
yang dapat dijalankan oleh pengguna dengan hak istimewa/usr/bin/vim
, yaitu sesuatu seperti berikut ini:sudo
memungkinkan pengguna reguler yang ditentukan dapat berjalan/usr/bin/vim
dengan cara berikut:Tetapi dicegah menjalankan vim sebagai berikut:
sumber
Jawaban sederhana:
Berikut ini adalah perintah Vim:
Mereka sekarang memiliki shell root.
sumber
Salah satu kemungkinan peningkatan keamanan tambahan adalah mengganti:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
dengan
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
dan kemudian minta pengguna menjalankannya
sudo rvim /etc/httpd/confs/httpd.conf
.Vim mendukung mode terbatas yang dipicu dengan opsi -Z command line atau dengan memulai program sebagai rvim. Ketika mode terbatas diaktifkan "semua perintah yang menggunakan shell eksternal dinonaktifkan". Pendekatan ini tidak akan mencegah pengguna menggunakan
:split file
perintah ex untuk membuka file lain, tetapi setidaknya harus mencegah perintah shell yang sengaja berbahaya seperti:!rm -rf /
.sumber
Saya setuju dengan jawaban HBruijn bahwa menjalankan vim sebagai root memang membuka sistem yang sangat luas, dan sudoedit akan menjadi solusi yang lebih aman.
Tetapi meskipun begitu, sistem Anda kemungkinan masih agak terbuka. Setidaknya dengan asumsi bahwa beberapa proses apache dengan hak akses root akan diluncurkan berdasarkan konfigurasi itu. Ada sejuta cara untuk mengkonfigurasi apache sedemikian rupa sehingga akan menjalankan program eksternal. Sebagai salah satu contoh, pertimbangkan argumen pipa ke arahan CustomLog . Manual ini secara eksplisit menyatakan:
Jelas, jika pengguna Anda dapat menulis konfigurasi, mereka dapat mengubah program itu menjadi apa pun yang mereka suka, misalnya sesuatu yang menjalankan skrip shell untuk memberi mereka izin lebih lanjut.
Untuk alasan ini, saya baru-baru ini meretas bersama-sama cara untuk menggunakan kemampuan sedemikian rupa sehingga apache dapat memperoleh kemampuan khusus untuk mengikat ke port yang diistimewakan meskipun itu dieksekusi sebagai pengguna normal. Dengan begitu, pengguna dapat mengedit konfigurasi dan bahkan meluncurkan server, dan sebagian besar masih aman. Satu-satunya masalah adalah mereka dapat mengikat proses apa pun pada IP apa pun. Tingkat kepercayaan tertentu tetap ada, karena mereka mungkin menemukan cara untuk crash sistem sshd, dan kemudian meluncurkan versi mereka sendiri dalam upaya untuk mendapatkan kata sandi root.
sumber
Perlu dicatat bahwa bahkan
sudoedit {.../whatever.conf}
dapat menjadi risiko keamanan.Buat skrip shell
/tmp/make_me_root.sh
dan panggil skrip ini di file konfigurasi Anda. Saya tahu beberapa contoh di mana pendekatan ini bekerja:
samba -> log nt token command
syslog-ng -> program: Mengirim pesan ke aplikasi eksternal
Apache -> CustomLog
Saya berasumsi seseorang dapat memperpanjang daftar ini tanpa akhir.
Yang harus Anda lakukan adalah memulai kembali layanan. Tentu saja, setelah Anda root, Anda akan mengembalikan garis konfigurasi tersebut untuk mengaburkan jejak Anda.
sumber
Tentu saja, itu sama sekali tidak aman. Seperti yang dikatakan sebelumnya sudoedit itu cara paling mudah dan cocok untuk melakukannya.
Yang ingin saya tambahkan adalah bahwa vim memungkinkan peluncuran shell, jadi, tidak hanya dapat mengedit file sistem apa pun, itu juga memungkinkan untuk meluncurkan shell dan melakukan di mana pun dia mau.
Coba luncurkan vim dan ketik: sh
sumber