Dalam desain ini dua izin berbeda tercampur: siapa yang boleh memakai direktori, dan alamat mana yang boleh terhubung sama sekali. Menulis daftar akun di samping daftar sumber terasa seperti pemasangan, tetapi Samba menilai kedua daftar sebagai predikat yang saling bebas. Siapa pun yang memenuhi keduanya diterima, dan itu aturan yang lebih luas daripada yang dimaksud sebagian besar administrator. Perbaikannya adalah tata letak berbagi yang berbeda atau lapisan kebijakan yang dapat menyatakan pasangan.

Mitos: dua daftar membuat satu aturan

referensi smb.conf mendefinisikan valid users dan hosts allow sebagai dua parameter yang tidak berkaitan, dan menetapkan keduanya pada satu berbagi adalah tempat kebingungan dimulai. Tetapkan valid users = mira, tomas dan hosts allow = 10.77.0.21, 10.77.0.22 dan empat kombinasi diterima: Mira dari salah satu alamat, Tomas dari salah satu alamat. Tidak ada yang mengikat nama pertama ke alamat pertama dalam konfigurasi, dan urutan kemunculan nama tidak bermakna. Menyusunnya ulang, menambah baris hosts allow kedua, atau menaruh satu nama per baris tidak mengubah apa pun. Hasilnya adalah perkalian dua daftar, bukan pemetaan di antaranya.

Yang sebenarnya diinginkan sebagian besar orang lebih sempit: Mira hanya dari satu alamat, Tomas hanya dari alamat lain. Satu definisi berbagi tidak memiliki sintaks untuk ikatan itu, dan tidak ada penyusunan cerdas yang menciptakannya. Itu bentuk kebijakan yang tidak dinyatakan Samba di dalam satu berbagi, dan di situlah mitos bertahan.

Apa yang dinilai Samba, dan dalam urutan apa

Tahapannya berjalan dalam urutan tetap, dan urutan yang salah menghasilkan diagnosis yang salah. Klien membuka koneksi; pemeriksaan host global dijalankan jika ada yang dikonfigurasi; penyiapan sesi mengautentikasi akun; lalu klien terhubung ke berbagi, tempat daftar host milik berbagi itu, valid users dan pengaturan hanya-baca diterapkan; dan hanya ketika file dibuka, izin sistem file dari identitas yang terautentikasi yang memutuskan. Setiap tahap dapat menolak permintaan sendiri, dan lolos dari satu tidak mengatakan apa pun tentang tahap berikutnya. Konsekuensi pentingnya adalah akun sudah diketahui saat daftar host berbagi dinilai, dan daftar host tetap tidak punya cara untuk menyebut akun itu.

Karena itu sebuah berbagi tidak dapat mengikat satu pengguna ke satu alamat: hosts allow dan valid users adalah predikat terpisah yang diterapkan pada tahap sambung-pohon yang sama, dan masing-masing menjawab pertanyaannya sendiri. Predikat host tidak pernah mengambil nama akun sebagai masukan, sehingga tidak dapat ditulis per pengguna. Hanya berbagi kedua, atau lapisan kebijakan di luar Samba, yang dapat menyatakan pasangan itu.

Nilai global penting karena cara pewarisannya. Berbagi yang menghilangkan hosts allow mewarisi nilai global, dan berbagi yang menetapkan nilainya sendiri memakai nilai itu sebagai ganti nilai global, bukan sebagai tambahan. Jadi daftar global yang lebar memperluas berbagi yang tidak pernah menetapkan parameter itu, dan tidak melakukan apa pun pada berbagi yang menetapkan nilainya sendiri. Jalankan testparm -s dan baca nilai per berbagi yang dicetaknya, karena keluaran itulah kebijakan efektif, bukan berkas di disk.

Mempersempit satu berbagi juga tidak melakukan apa pun untuk sisa server. Berbagi lain, antrean pencetak, dan koneksi IPC mempertahankan aturannya sendiri, sehingga desain yang bergantung pada daftar alamat satu berbagi melindungi satu jalur, bukan host.

Dua nama berbagi pada satu direktori

Ketika direktori yang sama harus dapat dijangkau dua orang dari dua alamat, tayangkan dua kali dengan nama berbeda. Setiap blok membawa satu akun dan satu sumber, yang mengubah pasangan menjadi sesuatu yang dapat dipaksakan konfigurasi. Biayanya adalah setiap orang memakai nama berbagi berbeda untuk mencapai berkas yang sama, dan itu harus menjadi perubahan yang disengaja di sisi klien.

[shared-mira]
    path = /srv/shared
    guest ok = no
    read only = yes
    valid users = mira
    hosts allow = 10.77.0.21
    hosts deny = ALL

[shared-tomas]
    path = /srv/shared
    guest ok = no
    read only = yes
    valid users = tomas
    hosts allow = 10.77.0.22
    hosts deny = ALL

Gerbang berbagi bukan izin sistem file. Kedua identitas tetap memerlukan akses ke direktori melalui ACL yang mendasarinya, dan pengaturan hanya-baca adalah lapisan kedua, bukan satu-satunya. Berikan izin tulis hanya jika alur kerja menuntutnya, lalu periksa bahwa berkas yang dibuat satu identitas tetap dapat dipakai yang lain.

Kedua blok menunjuk ke satu jalur, jadi perubahan pada direktori memengaruhi kedua berbagi. Biasanya itulah tujuannya, tetapi itu juga berarti kesalahan izin terlihat oleh kedua pengguna sekaligus.

Apa yang dapat dibuktikan alamat sumber

Alamat yang dilihat Samba adalah alamat yang mencapai server, bukan alamat yang dianggap dimiliki klien. Gateway VPN yang menerjemahkan setiap klien ke satu alamat sumber menghapus perbedaan itu: semua klien datang sebagai host yang sama dan daftar sumber tidak lagi dapat membedakan mereka. Alokasi stabil per klien dan gateway yang mempertahankan sumber adalah prasyarat untuk memakai alamat sebagai kebijakan sama sekali. Tanpa keduanya, pembatasan mengukur gateway, bukan pengguna.

Bahkan begitu, alamat bukan perangkat. Dua laptop di belakang satu alamat terowongan, sewa yang dialokasikan ulang, dan stasiun kerja bersama semuanya membantah anggapan bahwa sumber mengidentifikasi orang. Perlakukan pembatasan sebagai cakupan jaringan dan pertahankan akun SMB terautentikasi sebagai lapisan identitas, dengan kredensial perangkat seperti sertifikat jika Anda memerlukan otorisasi perangkat.

Itu juga sebabnya desain ini menyekat berbagi dan bukan server. Pasangan yang ditolak masih dapat membuka sesi, mencapai berbagi lain, atau mendaftar server, yang merupakan hasil berbeda dari kegagalan autentikasi saat terhubung. Jika syaratnya penolakan sebelum autentikasi, parameter berbagi Samba adalah alat yang salah.

Buktikan dengan pasangan silang

Validasi konfigurasi, lalu uji keempat kombinasi dengan koneksi baru, bukan sesi yang dipakai ulang. Pasangan yang dimaksud seharusnya mencapai direktori, dan kedua pasangan silang seharusnya gagal. Sesi yang di-cache dari uji sebelumnya akan dengan senang hati menjawab kombinasi yang salah dan membuat aturan yang rusak tampak benar.

testparm -s
smbclient //fileserver/shared-mira -U mira -c 'ls'
smbclient //fileserver/shared-tomas -U tomas -c 'ls'
smbstatus --shares

Pemeriksaan sintaks hanya membuktikan bahwa berkas dapat diurai. Kredensial, ACL, dan keputusan host diuji dengan koneksi nyata, jadi jalankan perintah klien dari alamat yang ingin Anda uji dan perhatikan tahap mana yang menolaknya. Jika pasangan silang berhasil, daftar host efektif lebih lebar daripada yang disiratkan blok, dan testparm -s adalah hal pertama yang harus dibaca. Jika pasangan silang gagal karena alasan yang salah, akun atau ACL-lah yang dicurigai.

Memantau sesi dengan smbstatus dan mematikannya adalah tindakan respons setelah akses dimulai, bukan kendali penerimaan. Memblokir seluruh alamat yang teramati juga dapat memutus pengguna yang tidak berkaitan di belakang NAT yang sama, karena itu keputusan berada pada definisi berbagi dan pemantauan berada pada proses respons. Jaga keduanya terpisah dan desain tetap jujur tentang apa yang ditegakkannya.

Artikel terkait