Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Otentikasi Apache menggunakan LDAP

Pada tulisan sebelumya, saya telah menceritakan cara instalasi dan konfigurasi Subversion. Juga telah diceritakan cara mengaktifkan mode akses HTTP melalui Apache 2 + WebDAV.

Setelah sistem berjalan, ternyata ada kekurangnyamanan dalam mengelola repository. Seperti kita ketahui, yang menggunakan repository adalah para programmer dan tim ofisialnya, semuanya terlibat dalam suatu project. Project datang dan pergi, demikian juga username bertambah dan berkurang.

Cara manajemen username melalui htpasswd tidak scalable. Tambah user harus lapor, ganti password harus dibantu, hapus user juga sama, semua tidak bisa diotomasi. Setidaknya saya belum tau cara mengelola file htpasswd yang lebih efisien. Keinginan saya adalah, untuk menambah dan menghapus username dilakukan administrator, tapi untuk urusan ganti password silahkan ganti sendiri melalui web.

Setelah google ke sana kemari, metode yang umum digunakan orang adalah otentikasi melalui LDAP server. Dan ternyata, memindahkan otentikasi dari file htpasswd ke LDAP tidak sulit, cukup ganti konfigurasi dav_svn.conf dalam folder /etc/apache2/mods-available ini :

AuthUserFile /etc/apache2/htpasswd

menjadi ini :

AuthBasicProvider ldap
AuthLDAPURL ldap://localhost/dc=artivisi,dc=com?uid?sub?
AuthLDAPBindDN uid=apache,dc=artivisi,dc=com
AuthLDAPBindPassword "passwd-user-apache-dalam-ldap"

Perhatian !!! Konfigurasi ini berjalan di Ubuntu 7.04 dengan Apache 2.2. Bila Anda menggunakan distro lain atau Apache 2.0, konfigurasi ini mungkin harus dimodifikasi agar bisa berjalan dengan baik.

Kita membutuhkan modul mod\_authnz\_ldap agar Apache bisa melakukan otentikasi ke LDAP.

Lebih lanjut tentang otentikasi LDAP ini bisa dilihat di manualnya Apache.

Untuk mengaktifkan modul ini, cukup gunakan perintah berikut:

a2enmod authnz\_ldap

Nah, di sisi Apache tidak sulit. Instalasi LDAP di Debian juga sama mudahnya, cukup :

# apt-get install slapd

untuk menginstal OpenLDAP, dan

# apt-get install phpldapadmin

untuk menginstal PHPLDAPAdmin. Ya benar … LDAP Admin, bukan phpmyadmin.

Ternyata merek phpXXadmin ini telah sangat kuat. Mungkin kalau Hermawan Kartajaya pernah menggunakan MySQL, PostgreSQL, dan OpenLDAP, dia juga akan membahas mengenai kekuatan merek phpXXadmin ini. Sejauh ini saya telah menggunakan phpmyadmin dan phppgadmin. Dan sekarang ada phpldapadmin. Luar biasa.

Instalasi OpenLDAP mudah sekali, kita hanya ditanya nama domain yang akan disimpan, saya jawab artivisi.com. Kemudian ditanya password untuk administrator dan metode enkripsinya. OpenLDAP menyediakan clear, crypt, dan md5. Setelah itu … selesai.

Instalasi phpldapadmin sedikit bermasalah. Masalah utama adalah permission. Entah kenapa, debian menginstalnya dengan permission yang tidak sesuai. Ini menyebabkan beberapa halaman tidak bisa diakses karena web server tidak diijinkan untuk membacanya. Untuk mudahnya, saya melakukan :

# chown -R www-data.www-data /etc/phpldapadmin
# chown -R www-data.www-data /usr/share/phpldapadmin

Ok, selesailah sudah. Sekarang untuk menambah user dapat dilakukan melalui web. Konfigurasi default OpenLDAP juga sangat bagus. Hanya admin yang dapat memanipulasi data. User biasa (uid) hanya bisa mengganti atributnya sendiri (termasuk password).

Jadi berikutnya, kalau ada user baru, tinggal tambahkan melalui web dengan password standar. Kemudian suruh user tersebut login dan ganti password. Beres …

Referensi :
Google

Scratchbox


Instalasi Subversion

Setelah pindah ke rumah baru, tugas pertama adalah instalasi Subversion lengkap dengan akses melalui http.

Subversion adalah aplikasi version control system. Cara instalasi detail dan tutorial penggunaan sedang saya susun dalam sebuah tutorial terpisah. Sementara ini, berikut cara cepat instalasi Subversion dan aktivasi akses melalui WebDAV.

Untuk mengaktifkan akses WebDAV, dibutuhkan webserver Apache 2. Apache 2 digunakan (bukan Apache 1) karena telah menyediakan dukungan terhadap WebDAV. WebDAV sendiri adalah tambahan pada protokol HTTP yang memungkinkan aplikasi client memodifikasi file di server. Tanpa WebDAV, aplikasi client (misalnya Internet Explorer atau Mozilla Firefox) hanya bisa membaca data dari webserver dan tidak bisa menyimpan data.

Berikut adalah langkah-langkahnya :

  1. Install Subversion, Apache2 dan WebDAV module :

    # apt-get install subversion apache2 libapache2-svn

  2. Khusus Linux, kita harus membuat wrapper script untuk :
    • svn
    • svnadmin
    • svnlook
    • svnserve

    Gunanya agar folder repository dibuat dengan permission yang benar, yaitu 664. Artinya, user/pembuat repository bisa baca-tulis(rw=6), groupnya bisa baca-tulis, dan orang lain bisa baca(r=4).

    Caranya adalah dengan mengganti script yang asli dengan wrappernya. Pertama, ganti dulu nama script yang asli sebagai berikut :

         # mv svn svn-original
         # mv svnadmin svnadmin-original
         # mv svnlook svnlook-original
         # mv svnserve svnserve-original        
    

    Kemudian buat file text baru untuk wrappernya, jangan lupa untuk membuat file tersebut executable.

         # touch svn svnadmin svnlook svnserve
         # chmod 755 svn svnadmin svnlook svnserve        
    

    Berikut adalah contoh wrapper script untuk svn. File svnadmin, svnlook, dan lainnya mirip, cuma berbeda di baris keempat saja.

    #!/bin/sh

    umask 002 /usr/bin/svn-original “$@”

  3. Buat repository, misalnya di folder /home/endy/svnrepo :

         $ svnadmin create --fs-type fsfs /home/endy/svnrepo
    
  4. Buat group untuk mengakses repository, misalnya group svnusers

         # groupadd repousers
    
  5. Ubah kepemilikan repository menjadi milik group

         $ chgrp -R repousers /home/endy/svnrepo
    
  6. Masukkan semua user yang akan mengakses repository ke dalam group repousers. Sekarang repository siap diakses secara ssh.

         $ svn list svn+ssh://localhost/home/endy/svnrepo
    
  7. Edit Apache 2 agar berjalan dengan group repousers. Instruksi dibawah berlaku untuk Debian. Untuk distro lain silahkan lihat manualnya masing-masing. Pengguna Windows tidak perlu pusing-pusing tentang group, di OS anda fitur ini diabaikan :P

         mc -e /etc/apache2/apache2.conf
    

    ganti baris

         Group www-data
    

    menjadi

         Group repousers
    
  8. Buat username dan password untuk mengakses repository melalui web. Debian menggunakan script htpasswd2. Distro Anda mungkin berbeda.

         # htpasswd2 -mc /etc/apache2/svnusers endy
    

    Lihat manual htpasswd untuk lebih jelasnya.

  9. Edit konfigurasi dav_svn. Intinya adalah, kita harus menambahkan Virtual Directory di Apache. Teknik konfigurasi yang ‘benar’ berbeda di masing-masing distro. Untuk cara paling mudah, tulis saja langsung di bagian paling bawah file httpd.conf. Di Debian, cara paling ‘bersih’ adalah membuat file konfigurasi sendiri di folder /etc/apache2/mods-available.

    Berikut adalah konfigurasi dav_svn. Pastikan file ini diload oleh Apache.

         <Location /svn>
         DAV svn
         SVNPath /home/endy/svnrepo
         AuthType Basic
         AuthName "Subversion Web Authentication"
         AuthUserFile /etc/apache2/svnusers
         AuthzSVNAccessFile /etc/apache2/dav_svn.authz
         Require valid-user
         </Location>
    
  10. Mengaktifkan koneksi https

    • Buat sertifikat, menghasilkan file svn.cert.pem dan svn.key.pem

    • Aktifkan mod_ssl pada Apache. Caranya berbeda sesuai distro. Di debian adalah dengan cara dengan cara membuat symlink mod_ssl.conf dan mod_ssl.load ke folder /etc/apache2/mods-enabled

    • Edit konfigurasi default website (/etc/apache2/sites-available/default).

      SSLEngine on SSLCertificateFile /etc/apache2/ssl/svn.cert.pem SSLCertificateKeyFile /etc/apache2/ssl/svn.key.pem SetEnvIf User-Agent “.MSIE.” nokeepalive ssl-unclean-shutdown

    • Buka koneksi di port 443 dengan cara mengedit konfigurasi Apache dan menambahkan baris berikut :

    Listen 443

    • Restart apache

    Seharusnya sekarang repository kita sudah bisa :

    • diakses melalui ssh
    • diakses melalui https dengan memasukkan username dan password yang benar

Selamat mencoba.

Referensi :


Rumah baru II

Hari ini saya dapat komputer baru. Spesifikasinya lumayan banget, Prosesor P-IV 3 GHz, memori 1GB, dan harddisk SATA 80GB, plus DVD-ROM. Rencananya, mesin ini selain untuk office work, juga akan jadi server sementara.

Kegiatan pertama, bagi sebagian besar orang adalah instal sistem operasi. Buat saya, ada satu kegiatan lagi sebelum instal, yaitu pilih sistem operasi.

Sudah jelas, yang akan saya instal adalah Linux. Sejak meninggalkan Windows tahun 2002 yang lalu, saya merasa seperti naik baswei (baca: busway) jam 5 sore. Melihat ke kiri jalan, kemacetan panjang sekali seperti ular naga, tetapi saya tetap bisa melaju kencang menuju Blok M dalam waktu 30 menit saja. Di dalam busway Linux, saya tetap bisa produktif bekerja pada saat orang lain repot mengupdate antivirus (instal saja tidak cukup, harus up to date juga dong :P), membuang spyware, melakukan defrag, bersih-bersih registry, dan kegiatan non-produktif lainnya.

Nah, pertanyaannya, Linux yang mana? Saya adalah fans berat Debian. Fedora terlalu sulit buat saya. Mandriva, mudah bagi pemula, tapi justru menyulitkan bagi pengguna veteran. Tapi di debian sendiri juga banyak variannya, misalnya Knoppix, Mepis, Ubuntu, dan lainnya.

Knoppix, bagus untuk LiveCD, tapi jelek sekali kalau diinstal di harddisk. Struktur foldernya jelek dan sudah tidak standar lagi. Mungkin karena memang dioptimasi untuk kemudahan remastering.

Mepis bagus, tapi repositorynya tidak kompatibel dengan debian. Untuk pengguna desktop sangat bagus, tapi karena saya mau instal buat macam2 server, di belakang hari menyulitkan.

Ubuntu, sangat bagus … untuk end user. Buat saya, masalah sudo sangat merepotkan. Default instalasinya juga Gnome, sedangkan saya pengguna KDE. Saya sudah berusaha membiasakan diri dengan Gnome, tapi aplikasi-aplikasi Gnome masih kalah (menurut saya) dengan KDE. Saya lebih suka pakai KMail, Akregator, Konqueror daripada Evolution dan Nautilus.

Akhirnya, saya back to basic. Pakai debian murni saja. Toh di sini koneksi IIX laksana LAN. Jadi bisa ambil ke servernya Komo dengan cepat.

Nah, sekarang instalasi. Saya tidak punya CD Writer, jadi walaupun bisa donlod ISO dengan cepat, tetap tidak bisa instal. Akhirnya pakai cara curang sbb :

  1. Download image instalasi jaringan dari Debian (ingat, gunakan kernel 2.6)

  2. Instal Ubuntu

  3. Kopikan image instalasi ke Ubuntu

  4. Konfigurasi GRUB untuk menambahkan image instalasi

  5. Restart, dan mulai instalasi.

Cara ini diinspirasi dari teknik menginstal Linux tanpa CDROM, Floppy, USB, atau media lainnya.

Setelah itu, berikut beberapa aplikasi wajib yang akan diinstal :

  1. Midnight Commander
  2. SSH
  3. MySQL
  4. PostgreSQL
  5. Apache 2
  6. PHP 4
  7. Postfix Mail Server
  8. Subversion Version Control
  9. CVS Version Control
  10. Firestarter (Firewall Front End)
  11. KDE

Selanjutnya, tinggal mengkonfigurasi.

Satu lagi, dengan menggunakan Linux, tidak perlu cari satu-satu, download, klik next beberapa kali, dan restart komputer. Untuk menginstal semua di atas, cukup ketik saja :

apt-get install mc kde mysql-server postgresql apache2 php4 postfix firestarter subversion cvs kde -y

sebagai root. Lalu … sit back and relax …. literally.


Mencoba Wordpress

Kalau kemarin pakai mambo, sekarang coba pakai Wordpress. Kata orang sih, ini adalah aplikasi yang terhebat di kelasnya (kelas weblog maksudnya). Buat saya, aplikasi weblog yang hebat haruslah bisa menampilkan kode program dengan bagus. Soalnya, saya sering menjadikan blog sebagai website tutorial. Menampilkan dengan bagus artinya adalah :

  • Mengkonversi huruf menjadi fixed-width, misalnya Courier

  • Dapat menampilkan screenshots

  • Dapat menampilkan baris yang panjang

  • Tidak memakan tag XML atau HTML

Kode program yang akan ditampilkan tidak jauh dari Java, XML, dan PHP. Ok, mari kita coba saja.

Berikut kode program Java :

package com.artivisi;

public class HelloWorld {
    public static void main(String[] args) {
        try {
            System.out.println("This is a very long string, let's see whether Wordpress able to render well");
        } catch (IllegalArgumentException err) {
           System.out.println("Error ... ");
        }
    }
}

Kemudian build.xml

<project default="compile" name="test-wordpress">
    <target name="compile">
        <javac srcdir="src" destdir="bin"></javac>
    </target>
</project>

Dan, terakhir PHP :

<code>



</code>

Semua dibuat hanya dengan membungkus kode program seperti ini :



 .. tulis kode di sini ... 

Let’s see … Ternyata :

  1. Baris panjang ditampilkan seadanya, ini bisa bagus, bisa juga jelek. Kadangkala kita memang tidak mau memotong baris, karena takut disalah-artikan. Dilain pihak, kalau tidak dipotong, akan merusak tampilan.

  2. String langsung diescape dengan backslash. “ ditampilkan menjadi " Very bad. Saya mengerti ini adalah tindakan pencegahan untuk SQL Injection. Tapi seharusnya string dikembalikan seperti semula waktu ditampilkan kembali.

Mas Priyadi pernah membahas tentang plugin untuk mengatasi masalah ini.

Setelah dipasangi plugin, string kembali seperti semula. Great work mas Priyadi.


Mail server up and running

Postfix akhirnya berhasil dikonfigurasi dengan benar. Sekarang endy at artivisi dot com sudah bisa digunakan lagi. Tapi sepertinya perlu pasang spam filter, soalnya alamat email endy at artivisi dot com terlanjur tersebar ke para spammer. Firewall juga sudah aktif. Bagi para pengguna Linux, gunakan Firestarter. Mudah dan cepat.