GNU/Linux >> Belajar Linux >  >> Linux

Keamanan NFS Dasar – NFS, no_root_squash dan SUID

Saya telah menemukan banyak server NFS yang terbuka lebar, yang dapat dibuat sedikit lebih aman dan lebih aman dengan beberapa perubahan cepat. Ini adalah panduan cepat, membuat segalanya sedikit lebih aman. Ini sama sekali bukan panduan lengkap untuk mengamankan NFS, tetapi ini dapat membuat segalanya sedikit lebih aman tanpa banyak usaha. Untuk naik ke level lain, Anda ingin melihat penerapan NFSv4 dan Kerberos.

Opsi dasar untuk ekspor dapat mencakup:

  • no_all_squash :Opsi ini menonaktifkan semua pemampatan.
  • rw :Opsi ini memungkinkan server NFS menggunakan permintaan baca dan tulis pada volume NFS.
  • ro :Opsi ini memungkinkan server NFS menggunakan permintaan hanya-baca pada volume NFS.
  • sinkronisasi :Opsi ini memungkinkan server NFS untuk membalas permintaan hanya setelah perubahan dikomit ke penyimpanan stabil.
  • tidak sinkron :Opsi ini memungkinkan server NFS melanggar protokol NFS dan membalas permintaan sebelum perubahan apa pun dilakukan pada penyimpanan stabil.
  • aman :Opsi ini mengharuskan permintaan berasal dari port Internet.
  • tidak aman :Opsi ini menerima salah satu atau semua port.
  • penundaan :Opsi ini memungkinkan server NFS untuk menunda melakukan permintaan tulis ke disk jika mencurigai bahwa permintaan tulis terkait lainnya mungkin sedang berlangsung atau akan segera tiba.
  • no_wdelay :Opsi ini memungkinkan server NFS mengizinkan beberapa permintaan tulis untuk dikomit ke disk dalam satu operasi. Fitur ini dapat meningkatkan kinerja, tetapi jika server NFS menerima banyak permintaan kecil, perilaku ini dapat menurunkan kinerja. Anda harus menyadari bahwa opsi ini tidak berpengaruh jika async juga disetel.
  • subtree_check :Opsi ini mengaktifkan pemeriksaan subpohon.
  • no_subtree_check :Opsi ini menonaktifkan pemeriksaan subpohon, yang memiliki beberapa masalah keamanan tersirat, tetapi dapat meningkatkan keandalan.
  • anonuid=UID :Opsi ini secara eksplisit mengatur uid dan gid dari akun anonim; ini dapat berguna jika Anda ingin semua permintaan muncul seolah-olah berasal dari satu pengguna.
  • anongid=GID :Opsi ini akan menonaktifkan anonuid=UID.

Apa itu root_squash?

root_squash akan memungkinkan pengguna root pada klien untuk mengakses dan membuat file di server NFS sebagai root. Secara teknis, opsi ini akan memaksa NFS untuk mengubah root klien ke ID anonim dan, pada dasarnya, ini akan meningkatkan keamanan dengan mencegah kepemilikan akun root pada satu sistem yang bermigrasi ke sistem lain. Ini diperlukan jika Anda menghosting sistem file root di server NFS (khususnya untuk klien tanpa disk); dengan mengingat hal ini, ini dapat digunakan (dengan hemat) untuk host yang dipilih, tetapi Anda tidak boleh menggunakan no_root_squash kecuali Anda mengetahui konsekuensinya.

SUID dan NFS

suid adalah metode pengguna yang mengasumsikan hak pemilik file ketika dieksekusi oleh pengguna. Mengapa saya peduli tentang ini? Bayangkan jika pengguna dapat menyalin file ke volume NFS, mengaktifkan suid bit pada file, kemudian menjalankannya di server atau klien NFS secara efektif mengangkat diri mereka untuk melakukan root dalam proses?

Berikut adalah contoh yang menunjukkan risikonya.

Nama host NFS Server adalah server, nama host klien NFS adalah klien. Subnet pada jaringan contoh adalah 192.168.1.0/24. Contoh ini juga mengasumsikan bahwa kedua sistem menjalankan versi OS yang sama (yaitu keduanya RHEL 7, atau keduanya SLES 12), selama versi utama OS cocok.

1. Pada server NFS buat direktori sementara (/export/test) dan ekspor dengan opsi berikut (gantikan 192.168.1.0/255.255.255.0 dengan jaringan/netmask Anda sendiri):

server# vi /etc/exports
/export/test  192.168.1.0/255.255.255.0(no_root_squash,insecure,rw)

2. Mulai ulang server nfs. Ini bermacam-macam tergantung rasa linux..

RHEL:

server# systemctl restart nfs

SUSE:

server# systemctl restart nfsserver

3. Pada mesin klien, pasang ekspor:

client# mkdir /mnt/nfstest
client# mount -t nfs server:/export/test /mnt/nfstest

4. Pada klien, sebagai pengguna root, salin biner vi ke mount NFS.

client# which vi
—— output ———
/usr/bin/vi
client# cp /usr/bin/vi /mnt/nfstest

5. Atur bit suid pada biner yang disalin.

client# chmod u+s /mnt/nfstest/vi

6. SSH ke server nfs sebagai pengguna yang tidak memiliki hak istimewa. Karena tidak ada pengguna yang memiliki hak istimewa menjalankan vi yang terletak di mount yang diekspor di server:

server$ /export/test/vi /etc/passwd

7. Temukan akun yang tidak memiliki hak istimewa di file kata sandi dan ubah UID menjadi 0, simpan, keluar, lalu masuk kembali sebagai pengguna yang tidak memiliki hak istimewa. Pengguna sekarang sudah root.

Hal yang sama akan bekerja pada klien, jika Anda menjalankan vi dari mount NFS sebagai pengguna biasa, Anda dapat mengarahkannya ke file apa pun di host dan akan dapat mengedit sebagai root. Ini akan bekerja dengan biner apa pun yang dapat Anda pikirkan.

Bagaimana Cara Menghindarinya?

1. Pertama-tama hapus file vi dari direktori ekspor :), lalu aktifkan root_squash pada ekspor nfs. Di server edit /etc/exports ubah lagi no_root_squash menjadi root_squash:

server# vi /etc/exports
/export/test  192.168.1.0/255.255.255.0(root_squash,insecure,rw)

2. Restart server nfs, remount filesystem pada klien:

server# systemctl restart nfs
client# umount /mnt/test
client# mount -t nfs server:/export/test /mnt/nfstest

3. Dari klien, sebagai root buat beberapa file di NFS mount, periksa izinnya:

client# touch /mnt/nfstest/{test1,test2,test3}

Bergantung pada izin yang ditetapkan pada /export/test, Anda akan mendapatkan izin ditolak atau jika direktori dapat ditulisi dunia, izin pada file akan terlihat seperti:

-rw-r--r--  1 65534  65534     0 Nov  6  2015 test1
-rw-r--r--  1 65534  65534     0 Nov  6  2015 test2
-rw-r--r--  1 65534  65534     0 Nov  6  2015 test3

Root_squash memetakan ulang UID root menjadi uid dari pengguna anonim. Uid ini dapat dikonfigurasi dalam file ekspor, man /etc/exports untuk informasi lebih lanjut. Salin lagi perintah vi (jika diizinkan) sebagai root pada klien ke volume nfs dan ulangi langkah-langkah di atas (ssh ke server jalankan vi di /etc/passwd). Kali ini Anda tidak akan memiliki izin untuk menyimpan file, izinnya dinaikkan ke akun yang tidak memiliki hak istimewa.

Itu sedikit lebih aman, namun kami belum selesai. Langkah lain yang dapat Anda ambil adalah memasang sistem file yang diekspor di server NFS dengan opsi nosuid.

server# vi /etc/fstab

4. Temukan titik pemasangan untuk /export/, ubah default kolom opsi menjadi.

/dev/mapper/sys_vg-export_lv     /export    ext3    defaults      0       0
/dev/mapper/sys_vg-export_lv     /export    ext3    nosuid        0       0

5. Pasang kembali mount:

server# mount -o remount /export

6. Buang file vi di mount, atur bit suid, alihkan ke akun yang tidak memiliki hak istimewa dan coba lagi:

server# cp /usr/bin/vi /export/test; chmod u+s /export/test/vi
server# su - someuser
server$ /export/test/vi /etc/passwd

Setelah melakukan perubahan pada file yang diteruskan, Anda tidak akan diizinkan untuk menyimpan perubahan.

7. Langsung pada klien sebagai pengguna yang tidak memiliki hak istimewa dan coba hal yang sama:

client$ /export/test/vi /etc/passwd

Masih berfungsi, klien juga perlu di-remount dengan opsi nosuid:

client# mount -t nfs -o nosuid server:/export/test /mnt/nfstest

Uji lagi dengan akun yang tidak memiliki hak istimewa, seharusnya gagal.

Ada beberapa opsi lain yang dapat ditentukan pada titik mount untuk lebih membatasi apa yang dapat dijalankan darinya, periksa noexec (tidak ada file yang dapat dieksekusi), nodev (tidak ada file perangkat). Jika keamanan lebih lanjut diperlukan, lihat Kerberos dan NFSv4.


Linux
  1. Menyiapkan Server dan Klien NFS di Debian 9 (Peregangan)

  2. Menyiapkan Server NFS Dan Klien Pada CentOS 6.3

  3. Mempelajari NFS melalui konfigurasi server dan klien

  1. Menyiapkan Server NFS Dan Klien Di Scientific Linux 6.3

  2. 7 tips dasar untuk meningkatkan keamanan Apache

  3. Konfigurasikan keamanan dasar

  1. Menyiapkan Server dan Klien NFS di CentOS 7.2

  2. Instalasi NFS Server dan Klien pada CentOS 7

  3. Menyiapkan Server NFS Dan Klien Pada OpenSUSE 12.2