badboy wrote: > > Dear all, > > saya mau buat authentifikasi squid tetapi username n password di ambil > dari /etc/shadow.plis help me. >
Mungkin garis besarnya seperti di bawah ini, detilnya silakan dikembangkan sendiri ya :) File /etc/shadow anda harus bisa dibaca oleh UID yang menjalankan squid. Referensi tentang segala macam resiko/kelemahan/dll yang berkaitan dengan ini tersebar luas di internet. Silakan dicari, dan dipikirkan lagi. Kalau resiko itu menurut anda "dapat diterima", silakan dilanjutkan :D Anda perlu bikin sesuatu (script boleh, program boleh) yang berfungsi sebagai basic authenticator untuk squid. Silakan mulai dari http://www.squid-cache.org/Doc/Prog-Guide/prog-guide.html#toc19.2 Kebetulan contoh pada halaman itu script sederhana menggunakan perl. Format entry pada file /etc/shadow seperti ini, yang anda butuhkan hanyalah kolom pertama dan kedua. Pemisah antar kolom adalah karakter ":". sokam:$1$L7YDVit5$QSQ5n9Z4LXO77YbWkqSfG/:13018:0:99999:7::: Pada baris di atas, usernamenya adalah sokam, kemudian passwordnya adalah $1$L7YDVit5$QSQ5n9Z4LXO77YbWkqSfG/ Bagian password di atas adalah hasil plain text menggunakan Crypt-MD5. Buang 3 karakter pertama ($1$). Yang anda dapatkan adalah 2 kolom teks, yaitu salt dan chiper textnya. Pemisah kedua komponen itu adalah karakter dollar ($). Kalau dipecah, saltnya adalah "L7YDVit5", kemudian passwordnya adalah "QSQ5n9Z4LXO77YbWkqSfG/". Yang harus anda lakukan adalah melakukan proses hash pada plain text password yang dimasukkan oleh user dengan menggunakan salt hasil pemisahan string di atas. Kalau teksnya benar, hasil hashnya adalah string pada kolom kedua. Jadi bandingkan data yang anda dapat dari file shadow dengan hasil hash anda. Kalau benar, ya OK. Kalau contoh itu mau anda teruskan (pake perl), anda butuh modul Crypt::PasswdMD5. Salah satu infonya ada di http://search.cpan.org/~luismunoz/Crypt-PasswdMD5-1.3/PasswdMD5.pm Contoh proses pemeriksaannya (semoga bisa jalan): sub cekuser { my( $un, $pw ) = @_; # baca file /etc/shadow, lakukan ekstraksi string di sini. # referensi tentang baca string di google banyak kok :) # kolom kedua (chiper text) disimpan pada variabel $pass $salt = $pass; # ini ngambil bagian saltnya $salt =~ s/^\$1\$//; $salt =~ s/^(.*)\$.*$/$1/; # Bagian ini mengubah karakter url-encoded menjadi karakter ascii. # Referensi tentang karakter URL ini bisa dilihat pada RFC 1738. # Squid menggunakan karakter jenis ini untuk semua karakter non # alphanumeric kecuali -_. $pw =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; # Proses hashing, diakhiri dengan pemeriksaan cocok/tidaknya # username/password yang dimasukkan. Saltnya jangan sampe salah, # karena kalau saltnya beda, hasil hash stringnya juga bisa beda # dengan yang ada di data anda. $encryptedpass = unix_md5_crypt( $pw, $salt ); if( $pass eq $encryptedpass ) { return 'OK'; } else { return 'ERR'; } } Bahasa yang digunakan tidak harus perl, apa saja bisa, selama berperilaku seperti yang dijelaskan pada dokumentasi squid di atas. Kalau sudah jadi, squidnya dikonfig di bagian "auth_param basic....". Keterangan di file squid.conf sudah menjelaskan cara penggunaannya dengan baik. Mungkin segini dulu, semoga bisa sedikit membantu. Maaf ndak bisa bantu bikin komplit, soalnya itu juga saya comot2 dari koleksi script-script bikinan saya yang sepertinya mirip dengan kasus anda. Mungkin kawan-kawan scripter yang lain bisa memberi solusi yang jauh lebih baik dari yang saya punya. Stay tune aja. Semangat! :) -- Kamas Muhammad
signature.asc
Description: OpenPGP digital signature