Saya memiliki pengaturan jaringan yang sangat sensitif dan saya benar-benar tidak ingin mengacaukannya. Jaringan saya terdiri dari sekelompok pengguna yang memiliki hak istimewa sudo.
Saya ingin menghentikan mereka dari berlari
service NetworkManager restart
service network restart
perintah.
Apakah ada cara saya bisa mencapai ini?
networking
dannetwork-manager
? Juga, mengapa pengguna Anda memilikisudo
akses? Mereka seharusnya tidak kecuali Anda ingin mereka memiliki hak root penuh.Jawaban:
Menggunakan CmndAlias
ALL
tidak akan pernah amanAda 1000 cara untuk berlari
service network restart
tanpa melakukansudo service network restart
. Berikut adalah contoh yang mungkin dicoba oleh pengguna yang nakal:Jika Anda memberi pengguna
ALL
alias perintah, dan kemudian mencoba membuat daftar hitam, mereka akan selalu dapat menemukan jalan keluarnya. Bash daftar hitam, dan mereka akan menggunakan python. Blacklist python, dan mereka akan menggunakan Perl. Perl Daftar Hitam, dan mereka akan menggunakan PHP. Tidak ada yang menginginkan itu!Jika Anda benar-benar tidak ingin seseorang melakukan sesuatu, Anda harus melakukan seperti yang dikatakan Thomas, dan membuat daftar putih hal-hal yang boleh mereka lakukan.
Menyiapkan daftar putih dengan pengecualian
Contoh daftar putih kecil dengan pengecualian dapat ditemukan di dekat bagian bawah
man sudoers
:(Sebenarnya contoh dari halaman manual ini tidak aman dan dapat dieksploitasi untuk mengubah kata sandi root! Lihat komentar di bawah ini untuk caranya.)
Kita dapat mencoba untuk beradaptasi bahwa untuk kasus Anda, untuk menawarkan semua
service
perintah ke kelompok staf, tapi mengecualikan paraservice network
perintah yang perhatian Anda:(
ALL
Posisi itu mengacu pada Host_Alias, bukan Cmnd_Alias - membingungkan bukan?)Pengguna tidak akan dapat menjalankan
sudo bash
atausudo tee
atausudo wget
atausudo /path/to/malicious_script
. Anda dapat membuat daftar putih lebih banyak perintah admin untuk pengguna Anda jika Anda berhati-hati. Lebih spesifik!Catatan: Saya menambahkan
*
sebelum kata dinetwork
atas, kalau-kalau bendera yang tidak berbahaya pernah ditambahkan keservice
alat di masa depan. Mari kita bayangkan sebuah--verbose
bendera ditambahkan di masa depan, maka pengguna akan dapat menjalankan yang berikut:Jadi kita perlu
*
mengkonsumsi setiap flag sebelum nama layanan. Satu-satunya kelemahan adalah bahwa hal ini dapat memblokir layanan lain yang sebenarnya Anda tidak keberatan dijalankan oleh pengguna, misalnya layanan yang dipanggilsafe-network
ataunetwork-monitor
juga akan ditolak.Bolehkan pengguna mengedit file menggunakan izin grup
Di bawah ini Anda dapat menemukan berbagai upaya menggunakan
rnano
melaluisudo
untuk membiarkan pengguna mengedit file atau file. Tapi sebenarnya mereka lebih kompleks dan lebih berbahaya dari yang seharusnya.Solusi yang jauh lebih sederhana dan aman adalah mengubah izin grup pada file tertentu yang ingin Anda buka hak suntingnya. Berikut adalah beberapa contoh:
Jika Anda membutuhkan lebih banyak kontrol berbutir halus (misalnya: akses hanya untuk 3 pengguna, tetapi tidak semua anggota staf) Anda dapat membuat grup baru menggunakan
addgroup
perintah, dan menambahkan hanya beberapa pengguna ke dalamnya.Biarkan pengguna mengedit file melalui
sudo
Sisa dari jawaban ini menjadi penyelidikan tentang betapa mudahnya meninggalkan lubang di
sudo
konfigurasi Anda ketika mencoba menawarkan fleksibilitas kepada pengguna Anda. Saya tidak akan merekomendasikan melakukan hal-hal berikut!Jika Anda ingin memberi pengguna Anda akses untuk mengedit file tertentu, Anda dapat mencoba menggunakan
rnano
:rnano
hanya akan membiarkan mereka mengedit file yang ditentukan. Itu penting untuk mencegah pengguna jahat mengedit layanan pemula yang berbeda (misalnya/etc/init.d/urandom
), dan menambahkan baris yang akan dijalankanservice network restart
.Sayangnya saya tidak menemukan cara untuk membatasi secara
rvim
memadai (pengguna masih dapat membuka file apa pun menggunakan:e
), jadi kami terjebak dengannano
.Sayangnya memungkinkan pengguna untuk mengedit banyak file jauh lebih sulit ...
Biarkan pengguna mengedit banyak file (jauh lebih sulit dari yang seharusnya)
1. Pendekatan yang tidak aman
Hati-hati dengan wildcard! Jika Anda menawarkan terlalu banyak fleksibilitas (atau fleksibilitas apa pun), itu dapat dieksploitasi:
Dalam hal ini, pengguna jahat akan dapat mengedit skrip layanan pemula lainnya, dan kemudian menjalankannya:
(Sudo sebenarnya mencegah
.
dan..
memperluas perintah, tapi sayangnya tidak pada argumen.)Saya berharap sesuatu seperti ini bisa berhasil, tetapi masih tidak aman:
Karena
sudo
saat ini hanya menawarkan pola gumpal , itu*
akan cocok dengan apa pun - itu bukan regexp!(Sunting: Saya memang mempertimbangkan jika Anda mungkin lolos dengan hal di atas dalam situasi Anda, karena tidak ada sub-folder di bawah
sites-available
. Kami memang meminta satu char dicocokkan setelah folder, dan/..
akan gagal setelah nama file. Namun ini bukan solusi yang bisa diterapkan, karenarnano
menerima beberapa argumen. Lagi pula secara umum ini masih tidak aman pada folder yang memiliki subfolder!)Bahkan jika kita tidak memiliki subfolder, dan kita mengecualikan setiap baris yang mengandung
/../
, aturan yang menawarkan*
bola dunia masih bisa dieksploitasi, karenarnano
menerima banyak argumen (beralih melalui mereka<C-X>
, dan ruang diterima dengan senang hati oleh*
bola.2. Mendorong amplop (juga akhirnya tidak aman)
Jadi bagaimana jika kita menolak garis yang berisi spasi, atau berusaha menjangkau
/..
? Maka solusi akhir yang bisa diterapkan adalah:Kami menerima apa pun "di bawah" folder tetapi kami juga menolak panggilan apa pun
rnano
jika/..
atau/.
atauditeruskan, atau jika folder ditargetkan secara langsung. (Secara teknis
/.
eksklusi membuat eksklusi menjadi/..
berlebihan, tetapi saya telah meninggalkan keduanya untuk kejelasan.)Saya menemukan folder dan
/.
pengecualian diperlukan karena jika tidak pengguna dapat menargetkan folder itu sendiri. Sekarang Anda mungkin berpikirrnano
akan memblokir jika menunjuk ke folder, tetapi Anda akan salah. Sebenarnya versi saya (2.2.6-1ubuntu1) dimulai dengan peringatan ringan dan file kosong, lalu<C-X>
meminta saya untuk memasukkan nama file yang ingin saya simpan, membuka vektor serangan baru! Yah setidaknya itu menolak untuk menimpa file yang sudah ada (dalam satu tes yang saya lakukan). Bagaimanapun, karena tidak ada cara untuk memasukkan subfolder dengan sudo ke daftar hitam, kita harus menyimpulkan bahwa pendekatan ini sekali lagi tidak aman. Pengguna maaf!Penemuan ini membuat saya meragukan ketelitian
nano
mode "terbatas". Mereka mengatakan rantai hanya sekuat tautan terlemahnya. Saya mulai merasakan kombinasisudo
black-magic hitam danrnano
mungkin tidak lebih aman dari rantai aster.3. Pendekatan yang aman tetapi terbatas
Glob sangat terbatas - mereka tidak membiarkan kami mencocokkan kelas karakter beberapa kali. Anda dapat menawarkan beberapa pengeditan file, jika semua nama file Anda memiliki panjang yang sama (dalam hal ini
host
diikuti oleh satu digit):Tetapi jika Anda ingin memberikan akses kepada pengguna untuk mengedit berbagai file, Anda mungkin perlu menentukan setiap file secara eksplisit:
Jangan tergoda untuk menggunakan suatu
*
titik. Lihat bagian 1. dan 2. di atas untuk alasannya! Ingat: satu slip kecil dapat membahayakan seluruh akun pengguna super, dan seluruh sistem.4. Tulis pemeriksa argumen Anda sendiri (keselamatan menjadi tanggung jawab Anda)
Saya berharap mereka akan menambahkan dukungan regexp
sudo
di masa depan; itu bisa menyelesaikan banyak masalah jika digunakan dengan benar. Tetapi kita mungkin juga perlu kemampuan untuk memeriksa properti argumen (untuk mengizinkan hanya file, hanya folder, atau hanya flag tertentu).Tetapi ada satu alternatif untuk menciptakan fleksibilitas dalam sudo. Lewati tanggung jawab:
Kemudian tulis
staffedit
skrip Anda sendiri atau dapat dieksekusi untuk memeriksa apakah argumen yang diberikan oleh pengguna adalah sah, dan hanya menjalankan permintaan mereka jika ada.sumber
ALL=(ALL:ALL) ALL
terlalu kurang dalam semantik, tetapi saya selalu berasumsi di suatu tempat itu akan memiliki pemeriksa argumen yang layak ... Saya salah. Ini benar-benar sangat terbatas. Bahkan pengecualian root passwd yang ditawarkan di halaman manual dapat dipecah dengan argumen baris perintah sederhanasudo passwd -q root
,. Ya penulis sudo mendaftar [beberapa alternatif] (sudo.ws/sudo/other.html) di situs web mereka. Saya berharap mereka akan menambah dukungan regexp di masa depan.rnano
deskripsi Anda di sini karena ini adalah versi nano yang tidak memiliki fungsi 'save as'? Saya tidak terbiasa dengan program ini.$ man nano
lalu/-R<Enter>
-q
harus datang sesudahnya:sudo passwd root -q
. Contoh pete dapat dikeraskan dengan mengecualikan*root*
.sudoedit
untuk mengaktifkan modifikasi file dengan amansudo
.Pertama, buka file sudoers dengan
sudo visudo
. Menambahkanuser ALL=!/usr/sbin/service
will, IIRC, melarangservice
perintah untuk penggunauser
.Sumber: http://nixcraft.com/showthread.php/15132-Sudo-Exclude-Commands-And-Disable-sudo-su-Bash-Shell
sumber
Saya telah menemukan solusinya.
Saya telah membuka terminal dan berubah menjadi pengguna root dengan
su -
kemudian saya mengetikvisudo
untuk mengedit.maka pada akhirnya saya telah menulis baris seperti
Kemudian saya telah menyimpan & menutup dan memulai kembali juga.
Sekarang Jika saya mengetik sebagai
service network restart
atauservice NetworkManager restart
maka itu tidak mengizinkan saya dan memberikan kesalahan sepertidan juga untuk
service network restart
perintah.sumber
sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudo
, lalusudo /etc/init.d/network-not-in-sudo restart
). Itulah sebabnya jauh lebih aman untuk membuat inklusi daripada pengecualian dalam file sudoers, mis. Menyatakan layanan apa yang diizinkan untuk berinteraksi dengan mereka.Jawaban sebenarnya untuk ini adalah Anda tidak dapat benar-benar mencegahnya. Anda mungkin mencegah seseorang yang tidak berbahaya menjalankan perintah itu secara tidak sengaja melalui metode yang dijelaskan dalam jawaban lain, tetapi jika seseorang benar-benar ingin menjalankannya dan ada di daftar sudoers, mereka dapat menjalankannya. Misalnya, mereka dapat melakukan hal berikut:
joe@box:~$ sudo bash root@box:~# service network restart
Atau perintah menyenangkan lain yang bisa mereka gunakan untuk menghindari batasan Anda dalam file sudoers:
sudo visudo
Singkatnya, jika Anda bisa menggunakan sudo dan tidak terbatas untuk menjalankan perintah tertentu, Anda dapat melakukan hampir semua yang Anda inginkan. Bahkan jika Anda membatasi mereka untuk serangkaian perintah tertentu, Anda harus memastikan bahwa tidak mungkin bagi pengguna untuk menyalin beberapa perintah lain yang ingin mereka jalankan dengan nama yang sama dengan perintah yang mereka jalankan ( seperti dengan menimpa perintah yang mereka miliki izin untuk dijalankan.)
sumber
Gunakan firejail untuk membatasi pengguna dengan kotak pasir.
https://github.com/netblue30/firejail/
Tetapkan firejail sebagai shell daripada bash di / etc / passwd, untuk setiap pengguna yang ingin Anda batasi. Sangat mudah digunakan dan memiliki dokumentasi yang baik.
Contoh:
sumber