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

Attachment: signature.asc
Description: OpenPGP digital signature

Kirim email ke