Apache2 dengan kerberos

Ini catatan ringan pribadi bagaimana menggunakan kerberos untuk proses authentikasi di apache2 web server menggunakan modul untuk apache libapache2-mod-auth-kerb di sistem GNU/Debian Linux… tentunya ini hanya sebagai catatan kecil dan bukan dimaksudkan untuk “production system”. Untuk OS linux lain mungkin perlu penyesuaian..mudah-mudahan bermanfaat

Sebelum mengkonfig modul tersebut, pastikan kita sudah memiliki setup Kerberos yang berfungsi dengan baik ( KDC, /etc/krb5.conf, dll). Di Debian, bisa gunakan MIT Kerberos maupun Heimdal Kerberos. Sementara untuk directory yang dipakai contoh adalah alias doc/ di konfigurasi apache2 di Debian.
umumnya seperti ini kalau diakses lokal

Pastikan web server Apache2 sudah terinstall dan berfungsi dengan baik.. ! 🙂
Installasi Heimdal Kerberos
najwa@debian:~$ sudo aptitude install heimdal-kdc
The following NEW packages will be installed:
heimdal-clients{a} heimdal-kdc krb5-config{a} libasn1-8-heimdal{a} libgssapi2-heimdal{a} libhdb9-heimdal{a}
libheimntlm0-heimdal{a} libhx509-5-heimdal{a} libkadm5clnt7-heimdal{a} libkadm5srv8-heimdal{a} libkafs0-heimdal{a}
libkdc2-heimdal{a} libkrb5-26-heimdal{a} libotp0-heimdal{a} libroken18-heimdal{a} libsl0-heimdal{a} libwind0-heimdal{a}
0 packages upgraded, 17 newly installed, 0 to remove and 700 not upgraded.
Need to get 0 B/1,705 kB of archives. After unpacking 4,792 kB will be used.
Do you want to continue? [Y/n/?]
Preconfiguring packages …
Selecting previously deselected package krb5-config.
…….
Unpacking heimdal-kdc (from …/heimdal-kdc_1.4.0-2_i386.deb) …
Processing triggers for man-db …
Setting up krb5-config (2.2) …
……..
Starting Heimdal KDC: heimdal-kdc.
Starting Heimdal password server: kpasswdd.

Saat proses pengkonfigurasian dan setup Heimdal Kerberos, debconf akan meminta input dari kita, sesuaikan dengan kondisi masing-masing..
1. Isikan di Default Kerberos 5 Realm : EXAMPLE.COM (sesuaikan dengan punya kita, dan disarankan pakai huruf besar)

2. Pada Kerberos server for your realm : debian.example.com (ini adalah alamat server kerberos yang kita gunakan)

3. Isikan alamat pada Administrative server for your Kerberos realm : debian.example.com (kebetulan pada alamat yang sama)

4. Kalau debconf meminta untuk menambahkan informasi tersebut ke /etc/krb5.conf : Yes

5. Kemudian pada KDC password : 123456 (sesuaikan dan cari password yang lebih baik 🙂 )

Kerberos server bergantung dengan setingan jaringan kita, jadi pastikan name resolving bisa berfungsi dengan baik..
sangat disarankan memakai DNS server, tapi buat simpelnya saja kita pakai file /etc/hosts. sesuaikan dengan ip dan hostname kita 🙂 di file /etc/hosts-nya., ini di tempat saya
127.0.0.1 localhost.localdomain localhost
127.0.1.1 debian.example.com debian
192.168.253.1 debian.example.com debian

pastikan sudah berfungsi
najwa@debian:~$ ping debian.example.com
PING debian.example.com (127.0.1.1) 56(84) bytes of data.
64 bytes from debian.example.com (127.0.1.1): icmp_req=1 ttl=64 time=0.071 ms
64 bytes from debian.example.com (127.0.1.1): icmp_req=2 ttl=64 time=0.062 ms
64 bytes from debian.example.com (127.0.1.1): icmp_req=3 ttl=64 time=0.064 ms
….

Installasi modul kerberos untuk Apache
najwa@debian:~$ sudo aptitude install libapache2-mod-auth-kerb
The following NEW packages will be installed:
libapache2-mod-auth-kerb
0 packages upgraded, 1 newly installed, 0 to remove and 700 not upgraded.
Need to get 0 B/18.8 kB of archives. After unpacking 111 kB will be used.
Selecting previously deselected package libapache2-mod-auth-kerb.
(Reading database … 190150 files and directories currently installed.)
Unpacking libapache2-mod-auth-kerb (from …/libapache2-mod-auth-kerb_5.4-1+b1_i386.deb) …
Setting up libapache2-mod-auth-kerb (5.4-1+b1) …
Enabling module auth_kerb.
Run ‘/etc/init.d/apache2 restart’ to activate new configuration!

Sekarang buka dan edit file etc/apache2/sites-available/default
najwa@debian:~$ gksudo gedit /etc/apache2/sites-available/default
Defaultnya ada alias /doc untuk berbagai dokumentasi paket yang ada di sistem Gnu/Debian Linux. di tempat saya seperti ini :
...
Alias /doc/ "/usr/share/doc/"

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128

Untuk menggunakan authentikasi kerberos, tambahkan beberapa opsi seperti berikut ( untuk lengkapnya coba merujuk ke http://modauthkerb.sourceforge.net/configure.html ) tentang keterangan masing-masing opsi.
Alias /doc/ "/usr/share/doc/"

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
AuthType Kerberos
KrbMethodNegotiate On
KrbMethodK5Passwd On
AuthName "Kerberos Login"
KrbAuthRealms EXAMPLE.COM
Krb5KeyTab /etc/krb5.keytab
KrbServiceName HTTP/debian.example.com
require valid-user
<Directory
Tutup dan simpan, kemudian restart web server apache-nya 🙂
Kita sebelumnya belum menyetup user buat ngetest kdc-nya, tapi tidak ada salahnya di lihat dulu, apa betul sudah berfungsi

Kalau meminta username dan passwordnya, memang modul kerberosnya berfungsi dan jika kita coba masukan user sembarang tentunya kita tak dapat mengakses /doc, dan akibatnya
Kita perlu user yang bisa akses,
Konfigurasi test user di Server Kerberos
Gunakan kadmin untuk menambah, mengedit, maupun meremove principal di kerberos
najwa@debian:~$ sudo kadmin -l
Lihat principal bawaan yang secara default terinstall oleh proses konfigurasi awal
kadmin> list *
default
kadmin/admin
kadmin/hprop
kadmin/changepw
changepw/kerberos
krbtgt/EXAMPLE.COM
WELLKNOWN/ANONYMOUS
kadmin>
Tambahkan user testuser untuk percobaan, dengan password testuser juga (sesuaikan sendiri)
kadmin> add testuser
Max ticket life [1 day]:
Max renewable life [1 week]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
testuser@EXAMPLE.COM’s Password:
Verifying – testuser@EXAMPLE.COM’s Password:
kadmin> q

Dari keterangannya

Now you have to create an service key for the module, which is needed to perform client authentication. Verification of the kerberos password has two steps. In the first one the KDC is contacted using the password trying to receive a ticket for the client. After this ticket is sucessfuly acquired, the module must also verify that KDC hasn’t been deliberately faked and the ticket just received can be trusted. If this check would haven’t been done any attacker capable of spoofing the KDC could impersonate any principal registered with the KDC. In order to do this check the apache module must verify that the KDC knows its service key, which the apache shares with the KDC. This service key must be created during configuration the module. This service key is also needed when the Negotiate method is used. In this case the module acts as a standard kerberos service (similarly to e.g. kerberized ssh or ftp servers). Default name of the service key is HTTP/@REALM, another name of the first instance can be set using the KrbServiceName option. The key must be stored in a keytab on a local disk, the Krb5Keytab and Krb4Srvtab options are used to specify the filename with the keytab. This file should be only readable for the apache process and contain only the key used for www authentication.

Kita memerlukan sebuah service key untuk module authentikasi bisa bekerja untuk mengauthentikasi client. Kita akan buat service key tersebut dalam format HTTP/debian.example.com sesuai yang disarankan di atas. Kemudian key tersebut di simpan di dalam keytab di disk lokal..saya memakai default keytab file yang biasanya ada di /etc/krb5.keytab dan memberi akses kepada user yang menjalankan apache (biasanya www-data di debian / ubuntu)..

Sekarang kita lihat apakah betul keytab masih kosong
najwa@debian:~$ sudo ktutil list
FILE:/etc/krb5.keytab:
Vno Type Principal Aliases

dan memang masih kosong. Tambahkan testuser yang baru di buat
kadmin> ext testuser
kemudian lihat lagi apakah sudah ada
najwa@debian:~$ sudo ktutil list
FILE:/etc/krb5.keytab:
Vno Type Principal Aliases
1 aes256-cts-hmac-sha1-96 testuser@EXAMPLE.COM
1 des3-cbc-sha1 testuser@EXAMPLE.COM
1 arcfour-hmac-md5 testuser@EXAMPLE.COM
najwa@debian:~$

Tambahkan service key seperti yang disarankan di atas kemudian tambahkan ke keytab
kadmin> add -r HTTP/debian.example.com
Max ticket life [1 day]:
Max renewable life [1 week]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
kadmin> ext HTTP/debian.example.com
kadmin>

gunakan opsi -r (–random-key) untuk menggunakan opsi random password, kemudian lihat lagi dengan ktutil apakah sudah masuk
najwa@debian:~$ sudo ktutil list
FILE:/etc/krb5.keytab:
Vno Type Principal Aliases
1 aes256-cts-hmac-sha1-96 testuser@EXAMPLE.COM
1 des3-cbc-sha1 testuser@EXAMPLE.COM
1 arcfour-hmac-md5 testuser@EXAMPLE.COM
1 arcfour-hmac-md5 HTTP/debian.example.com@EXAMPLE.COM
1 des3-cbc-sha1 HTTP/debian.example.com@EXAMPLE.COM
1 aes256-cts-hmac-sha1-96 HTTP/debian.example.com@EXAMPLE.COM

Seperti yang kita lihat di atas,sudah ada di keytab-nya, jangan lupa beri akses Apache ke keytab tersebut ( di sarankan menggunakan keytab tersendiri untuk akses apachenya)
$sudo chown root.www-data /etc/krb5.keytab
Kemudian kita test

Kalau sukses seharusnya akan memperbolehkan akses dan membuka /doc alias di browsernya

Gitu deh 🙂 🙂

Advertisements
Comments
15 Responses to “Apache2 dengan kerberos”
  1. kris says:

    itu bisa dipakai di linux ya?
    trus misal waktu instal heimdal-kdc nya… ngubah password secara manual diamana?

    • blackshirt says:

      Itu memang di linux, ubuntu/debian, ataupun yang lain bisa, tentunya sesuaikan dengan distro-nya, prinsipnya sama.
      Maksudnya merubah password pas instalasi heimdal-kdc ? bisa dengan reconfigure ulang lewat dpkg-reconfigure 🙂

  2. kris says:

    maksudnya…ubuntu 😀

  3. kris says:

    ketika saya coab ketik “kadmin” –> ada keterangan nu such file or directory… apa ada yang kurang?

  4. blackshirt says:

    pakai sudo atau root user gak ??
    gunakan
    $sudo kadmin
    atau
    #kadmin

  5. kris says:

    om mau tanya?saya sudah lakukan seperti diatas tpi kok tidak bisa ya? sepertinya pada hak askes keytab… mohon saran

    • blackshirt says:

      bisa lebih diperinci errornya, screenshootnya, atau detailnya ??

      • kris says:

        jadi begini…
        1. saya sudh setting sama persis sesuai dengan langkah diatas…. namun saya hanya mengganti directory alias dari “/usr/share/doc?” menjadi lsg ke halaman web yaitu –> …
        2. Instal heimdal di ubuntu juga sudah berjalan dengan sukses + penambahan user baru juga sudah berjalan.
        3. tahap terakhir untuk memberi hak akses apache “$sudo chown root.www-data /etc/krb5.keytab” juga sudh saya lakukan.

        Pertanyaanya :
        1. waktu tes di web server, ketika dimasukkan username dan password tetap belum bisa mengakses halaman web? Padahal ketika saya cek username dan passwaord database kerberos menggunakan “kinit” sudah benar? saya cek dengan “klist” juga sudah ada tiket yg aktif, ada ide?
        2. masih ada hubunganya dengan no 1, apakah pengaruh krb5.keytab yang tidak bisa diakses? (prediksi saya, tapi bingung mengatasinya)
        3. cara menghapus record keytab? adakah perintah tertentu? atau tinggal diremove isi di file krb5.keytab?

      • kris says:

        saya memodifikasi directori dari “/usr/share/doc/” menjadi “/var/www”, karena “/usr/share/doc/” milik saya tidak bisa dibuka via web…… mungkin karena hak akses? apakah betul?

      • kris says:

        oya satu lagi…kalo di ubuntu saat menginstal heimdal-kdc kok tidak ditanyakan passwordnya ya?

  6. kris says:

    kang sudah berhasil… saya setting ulang pada konfigurasi apache… saya isikan lsg di /var/www di script atas sebelum /usr/doc –> so well done… terima kasih scriptnya kak….. GBU

  7. Iseng Dong says:

    Mau tanya lg. saya sdh coba solusi dari @kris. Tp, skrg setiap kali saya coba masukkan username dan password, alert box nya muncul lg dan trus menanyakan username dan password. Itu knp ya? Trus, saya coba command klist, dan disitu katanya gak ada ticket. Itu knp ya? Mohon solusinya. Trima kasih sebelumnya…..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: