Mengurangi Resiko SQL Injection dengan Script Filter Parameter HTTP

Salah satu bug yang paling ditakuti di dunia pemrograman web adalah : SQL Injection Vulnerability. Dalam dunia hacking sering disebut dengan SQLiv. Bug ini termasuk paling banyak dijumpai publikasinya di situs-situs pempublish bug dan hacking. SQL Injection ini termasuk bug dengan jenis resiko tinggi. Injeksi SQL biasanya dilakukan dengan cara memasukkan perintah atau sintaks tambahan ke dalam FORM yang ada dalam web tersebut, baik FORM di address bar, maupun FORM yang ada pada content.

 

Dasar Teknis

1. Serangan GET Methode

Dalam membuat web, biasanya kita akan gunakan pemanggilan ID atau kode unik untuk mengundang suatu konten. Misal:

http://satuduatiga/index.php?mod=news&id=12

Kira-kira, proses SQL yang dibentuk adalah :

$id = $_GET['id'];

$query = "SELECT * FROM `news` WHERE `id`='$id'";

Apa yang terjadi apabila seseorang menambahkan perintah di belakangnya?

http://satuduatiga/index.php?mod=news&id=12 and 1=1

dan selanjutnya? Jika penambahan 1=1 dan 1=0 menghasilkan efek yang berbeda, dengan

1=1 posting/berita tetap muncul (tidak error)

1=0 berita tidak muncul (error)

Error message memang bisa saja ditutup dengan mengganti value PHP.INI dengan display_errors=’false’. Namun proses error tetap saja terjadi. Maka sebenarnya sintaks perintah di belakang parameter ID itu diproses oleh script. Berbahaya? Ya, sangat berbahaya. Biasanya penyusup akan menggunakan methoda UNION untuk melakukan serangan selanjutnya. Anggap dalam tabel berita bagian yang diambil adalah terdapat 4 kolom/field

SELECT `judul`,`isi`,`penulis`,`tanggal` FROM `news` WHERE `id`='$id'

 

Proses UNION adalah proses dua SELECT yang harus memiliki jumlah field terpanggil yang sama. Jika sampai proses UNION tidak sama jumlah fieldnya, maka akan terjadi error. Error adalah informasi berharga untuk seorang intruder. Misal si intruder mencoba melakukan pemanggilan sebagai berikut :

 

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1

maka halaman tersebut tidak akan muncul content. Maka dia bisa melanjutkan

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2

hingga

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,4

 

Pada saat itu, halaman selain menunjukkan posting content tersebut, juga akan menampilkan tulisan 1,2,3,4 sesuai dengan fieldnya. Saat itulah si intruder memanfaatkan seperti berikut:

Pencarian versi MySQL

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,@@version

 

Pencarian nama database yang aktif

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,database()

 

Pencarian nama user database aktif

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,user()

 

Pencarian nama database lain

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT DISTINCT TABLE_SCHEMA from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA not in('INFORMATION_SCHEMA','mysql','test') LIMIT 1)

 

Pencarian nama tabel untuk database ‘web’ misal

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='web' AND TABLE_NAME not in('coba','test','anu') LIMIT 1)

Pencarian nama kolom / field untuk tabel ‘user’ dalam database ‘web’ misal

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA ='web' AND TABLE_NAME ='user' AND COLUMN_NAME not in('test') LIMIT 1)

 

Pencarian data dalam kolom user atau password

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT username FROM user LIMIT 1)

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT password FROM user WHERE username='admin')

 

Setelah mendapatkan user dan password dari tabel user, maka dapat dieksekusi Login ke dalam form. Proses lain dapat juga dengan mencoba membaca file dalam sistem atau menulis file dalam sistem

 

SELECT load_file('/etc/passwd');

SELECT 'test' INTO OUTFILE('/var/www/hack.php');

atau bahkan

UPDATE news set judul='hacked';

 

Cerita mengenai hacking dengan sql injection akan dibahas dalam posting lain.

 

2. Serangan POST Method

Serangan ini biasanya dilakukan pada FORM login.

Serangan ini biasanya memanfaatkan logika pemrograman sebagai berikut :

$username = $_GET['username'];

$password = $_GET['password']

$query = "SELECT * FROM `user` WHERE `username`='$username' AND `password`='$password'";

 

Logika ini benar, memanfaatkan operator logika AND. Sehingga session baru terbuka jika PASANGAN username dan password itu terdapat dalam tabel user.

Apa yang terjadi apabila kita memasukkan pada kolom login tersebut adalah : admin’ OR”=’ ? Maka proses query yang terjadi menjadi seperti ini

SELECT * FROM `user` WHERE `username`=’admin’ OR ”=’‘ AND `password`=”;

Bagian tercetak kuning merupakan masukan yang berasal dari form. Sedangkan proses logika AND menjadi tercemar oleh OR, sehingga password salahpun akan dianggap benar. Padahal jika logika tersebut benar, sessi akan terbuka untuk si penyusup, tanpa perlu tahu passwordnya.

 

3. Blind SQL Injection

Blind SQL Injection adalah SQL Injection tanpa petunjuk error atau penampilan yang jelas. Tetap Blind SQLiv ini BERBAHAYA.

 

Gejala-gejala

Melihat gejala sebuah situs mengidap penyakit ini adalah dengan beberapa cara:

  1. Menambahkan tanda petik. Jika pada halaman muncul error maka ada kemungkinan potensi bahaya itu ada.
  2. Menambahkan logika 1=1 dan 1=0. Jika dengan 1=1 berita masih muncul tapi 1=0 tidak muncul maka potensi itu ada
  3. Mencoba form login dengan memasukkan admin’ or ”=’pada kolom user dan password. Apakah anda dapat masuk ke halaman admin
  4. Memanfaatkan pentester software, seperti SQLMap, Hexjector ataupun Havij dan lain sebagainya.

 

Penanggulangan

Beberapa cara pengurang resiko bug ini adalah:

  1. Melakukan filtering parameter yang perlu dimasukkan sebagai proses SQL
  2. Melakukan penutupan error dan pembatasan jumlah karakter parameter/post
  3. Menggunakan user database dan password yang bukan root, dan beda aplikasi web seharusnya berbeda pula user dan grant nya
  4. Menata permission struktur direktori secara benar sehingga web tetap bisa melakukan penulisan, juga mysql tidak dapat menulis ke dalam file.
  5. Penggunaaan mod_rewrite apache untuk me-rewrite URL sehingga selain SEO Friendly juga aman.
  6. Melakukan sanitasi file upload dengan benar. Jika hanya dibutuhkan file gambar, maka hanya bertipe gambar saja yang boleh masuk.
  7. Penggunaan program semacam antivirus seperti clamav dan lain sebagainya.
  8. Penutupan database information_schema.
  9. Untuk penggunaan CMS, rajin update juga menjadi faktor penting. Namun kadang pluggins merupakan faktor yang sering membawa bug.
  10. Memanfaatkan log error dan access secara benar. Pengecekan apakah terjadi injection dapat dimulai dari sini.

dan lain sebagainya.

 

Contoh Script Filter Parameter sederhana:

function filter_param($text,$html=true){
        $e_s=array('\\','\'','"');
		$d_s=array('','','');
		$text = preg_replace( "']*>.*?'si", '', $text );
        $text = preg_replace( '/]*>([^<]+)<\/a>/is', '\2 (\1)', $text );
        $text = preg_replace( '//', '', $text );
        $text = preg_replace( '/{.+?}/', '', $text );
        $text = preg_replace( '/ /', ' ', $text );
        $text = preg_replace( '/&/', '', $text );
		$text = str_replace( $e_s, $d_s, $text );
        $text = strip_tags( $text );
        $text = preg_replace("/\r\n\r\n\r\n+/", " ", $text);
        $text = $html ? htmlspecialchars( $text ) : $text;
        return $text;
}

$id = filter_param($_GET[‘id’]);
$username = filter_param($_POST[‘username’]);
$password = filter_param($_POST[‘password’]);
 

SQL Injection dapat terjadi pada semua jenis database. Oracle, SQLServer, Access dan lain-lain. Pada windows, SQL Server juga memiliki fungsi executable yang cukup berbahaya.

Tulisan ini sekedar sharing, tidak bermaksud menggurui, mengingat juga bahwa masih banyak bug yang terdapat pada produk yang dibuat oleh penulis. Semoga bermanfaat

Clear Memory Linux Tanpa Restart

Jika di sistem operasi Windows kita mengenal Task Manager untuk mengetahui seberapa dan apa saja load yang digunakan oleh Windows dalam processing data, maka di Linux dalam versi text kita akan mengenal perintah top. Perintah ini hanya dipanggil dengan melakukan pengetikan top. Untuk keluar tinggal mengetikkan tombol “q”. Sepintas isinya adalah sebagai berikut:

 

top - 09:04:02 up 35 min,  5 users,  load average: 0.26, 0.31, 0.39
Tasks: 176 total,   2 running, 174 sleeping,   0 stopped,   0 zombie
Cpu(s):  9.2%us,  2.5%sy,  0.0%ni, 88.1%id,  0.0%wa,  0.2%hi,  0.0%si,  0.0%st
Mem:   1800496k total,   820180k used,   980316k free,    15120k buffers
Swap:   257032k total,        0k used,   257032k free,   214868k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                               
 6767 bimo      20   0  496m 158m  28m S   12  9.0   4:03.68 firefox-bin                                                                                                             987 root      20   0  332m  66m 9.8m S    4  3.8   2:27.83 Xorg                                                                                                                  
 6758 bimo      20   0  122m 9708 6288 R    3  0.5   1:02.65 xmms                                                                                                                  
 6621 bimo      20   0  117m  16m  10m S    2  0.9   0:09.92 gnome-terminal                                                                                                         2028 bimo      20   0  148m 5044 3744 S    1  0.3   0:24.31 pulseaudio                                                                                                            
   47 root      15  -5     0    0    0 S    0  0.0   0:00.91 scsi_eh_1                                                                                                                 1 root      20   0  2616 1516 1140 S    0  0.1   0:00.97 init                                                                                                                  
    2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd                                                                                                                  3 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/0                                                                                                           
    4 root      15  -5     0    0    0 S    0  0.0   0:00.04 ksoftirqd/0                                                                                                           
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0                                                                                                            
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/1                                                                                                           
    7 root      15  -5     0    0    0 S    0  0.0   0:00.01 ksoftirqd/1                                                                                                           
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1                                                                                                            
    9 root      15  -5     0    0    0 S    0  0.0   0:00.15 events/0                                                                                                              
   10 root      15  -5     0    0    0 S    0  0.0   0:00.18 events/1                                                                                                              
   11 root      15  -5     0    0    0 S    0  0.0   0:00.00 cpuset                                                                                                                
   12 root      15  -5     0    0    0 S    0  0.0   0:00.00 khelper

Baris pertama akan berisi informasi : waktu sekarang, durasi waktu hidup komputer, jumlah user yang berproses, termasuk mysql , nobody dan apache, dan rata-rata beban.

Baris kedua akan berisi task yang aktif, kemudian task yang saat itu sedang berjalan, task yang sedang idle, task berhenti dan task yang zombie alias task yang sebenarnya sudah mati namun masih dideteksi sebagai task aktif karena berbagai hal

Baris ketiga adalah notasi load CPU

Baris ke empat adalah Memory yang diload. Perhatikan pada kolom pertama, yaitu besarnya RAM kita yang tidak termasuk dishared dengan VGA, kolom ke dua adalah memori tergunakan yang akan selalu bertambah besar, kolom ketiga adalah memory sisa/kosong yang akan makin kecil, dan terakhir adalah buffer memory.

Memory kosong, ketika makin kecil, maka proses komputer akan semakin lambat. Kecenderungan proses, semakin lama komputer menyala, maka proses akan makin lambat karena memory terguna akan banyak digunakan oleh buffer. Jika di Windows, kita bisa klik kanan dan refresh untuk melakukan minor refresh, maka Linux dapat dilakukan dengan memberikan perintah :

sync

Minor refresh hanya akan memberikan efek sesaat komputer menjadi sedikit enteng dengan kerja beratnya. Jika di Windows, ketika komputer telah “mabuk” maka usaha lain adalah merestart, maka di Linux dapat dilakukan dengan cara lain selain merestart. Yaitu dengan melakukan clear memory. Hal ini tidak perlu merusak software dan tidak perlu restart. Caranya adalah dengan mengganti value pada :

/proc/sys/vm/drop_caches

menjadi 3.

Anda dapat melakukan checking lebih dulu dengan

cat /proc/sys/vm/drop_caches

Biasanya akan berisi nilai 1.

Gambar 1. Menengok isi file drop_caches

 

Selanjutnya lakukan sync lebih dulu, kemudian ubahlah file tersebut dengan cara

echo 3 > /proc/sys/vm/drop_caches

Gambar 2. Mengubah drop_caches

Lihatlah perubahanya pada top. Biasanya buffer dan memori terpakai akan menjadi lebih kecil.

 

Gambar 3. Sebelum di clear

 

Gambar 4. Setelah diclear.

 

File /proc/sys/vm/drop_caches ini tidak dapat ditulis dengan editor text lainnya. Hanya dapat dilakukan oleh root dengan mode echo dan diarahkan ke file tersebut.

Untuk notasi angka untuk diisikan ke drop_cache dapat dilihat di sini :

angka 1 untuk membebaskan pagecache

angka 2 untuk membebaskan dentries dan inodes

angka 3 untuk membebaskan semuanya

 

7 Fitur Command/Perintah Internal Linux yang Tidak Ada Persamaannya di Windows/DOS

Linux, secara dasar, memiliki keunggulan dalam mengolah string dan file dibanding dengan sistem operasi Windows. Beberapa command / perintah dasar linux, ternyata tidak dapat disaingi oleh windows, selain dengan installasi program external windows lagi. Beberapa command atau perintah dasar itu adalah :

 

grep

grep adalah suatu perintah yang digunakan untuk melakukan penyaringan suatu keluaran dari perintah lain berdasarkan kata/karakter. Contoh penggunaannya adalah , misal saya ingin mencari direktori yang mengandung kata foto dalam direktori /home/bimo/ pada komputer saya. Maka saya lakukan seperti ini:

ls -al /home/bimo/ | grep foto

hasilnya adalah :

drwxr-xr-x   8 bimo     bimo       832 2011-12-29 22:24 foto
-rw-r--r--   1 bimo     bimo   1857828 2012-03-18 18:02 foto_saya.png

 

Artinya bahwa dengan fasilitas pipa dengan tanda | yang artinya adalah dilanjutkan dengan perintah berikutnya, maka hasil dari ls -al /home/bimo akan dilanjutkan dengan persyaratan “yang memiliki kata foto”

 

Berarti dengan demikian grep dapat diintegrasikan dengan perintah lain seperti locate, cat, dan lain-lain yang menghasilkan keluaran

 

tail

Perintah tail ini berfungsi untuk menampilkan suatu file sejumlah 10 baris terakhir. Perintah tail ini dapat dilanjut dengan opsi tertentu seperti -n, -f dan lain-lainnya. Tail -n dapat digunakan untuk menentukan berapa baris terakhir yang akan ditampilkan. Misal:

tail -n 1000 /var/log/messages

Berarti kita akan menampilkan 1000 baris terakhir dari /var/log/messages. Tail -f lebih usefull lagi, yaitu untuk keperluan menampilkan secara realtime dari baris akhir sebuah file. Misal kita akan tampilkan /var/log/messages secara terus menerus, kita tinggal mengetik :

 

tail -f /var/log/messages

 

Untuk keluar dapat digunakan tombol q

 

Untuk linux jenis baru telah dibentuk juga tailf yang artinya tail -f. Tail dapat juga diperlakukan seperti demikian :

dmesg | tail

yang artinya keluaran dari sebuah perintah, akan difilter sebanyak 10 yang terakhir. Tail begitu sangat berguna terutama untuk membuka file-file log webserver atau sejenisnya yang selalu berjalan. Windows/DOS  akan memiliki kesulitan dalam memmbuka file-file besar berjalan seperti ini. Dan ketika terbuka pun, Windows tidak akan menampilkan pesan terakhir yang muncul. Untuk itu dapat anda cari juga program tail for windows http://tailforwin32.sourceforge.net/

 

 

more

More ini berfungsi untuk menampilkan file text perhalaman yang digabung dengan perintah yang lain misalnya adalah cat. Jika sebuah file text yang berukuran besar, seperti /var/log/messages dengan lebih dari 200 baris, maka dengan more dapat ditampilkan perhalaman. Dengan menekan spasi maka muncul perhalaman ke bawah. Contoh penggunaannya adalah :

more /var/log/messages

sama dengan

cat /var/log/messages|more

 

Untuk keluar sebelum file berakhir dapat digunakan tombol q

 

less

Less ini sama dengan more, hanya saja less dapat diperlakukan naik turun halaman dengan menggunakan tombol U (up) dan D (down). Misal

less /var/log/smsd.log

Untuk keluar dapat digunakan tombol q

 

last

Perintah last digunakan untuk mengetahui siapa yang terakhir login. Hal ini memang tidak bisa dicari persamaannya di windows.

 

top

Perintah top digunakan untuk mengetahui task yang paling besar menggunakan memori. Untuk keluar dari perintah ini dapat menggunakan tombol Q.

 

whoami dan who

who adalah perintah untuk mengetahui siapa saja yang sedang login di komputer tersebut. Biasanya perintah ini disingkat dengan w. Sedangkan whoami adalah perintah untuk mengetahui saat ini kita login sebagai apa.

Sebenarnya masih sangat banyak perintah dasar linux yang fiturnya tidak tertiru di Windows. Namun disini dijelaskan tujuh saja yang paling sering digunakan. Sedangkan beberapa perintah memang banyak yang memiliki kegunaan sama misal :

cat (Linux) vs type (Windows)
ls (Linux) vs dir (Windows)

dan lain sebagainya.

Semoga artikel ini bermanfaat

[Tips Trick] Mengatur BitRate/Bautrate Modem SMS dan Internet di Linux

Seiring dengan pesatnya teknologi yang berjalan di era ini, terutama teknologi mobile dan seluler, maka semakin meningkat juga kebutuhan akan modem mobile, baik modem GSM maupun CDMA berbagai jenis. Modem ini sesuai dengan namanya bertugas untuk memodulasi dan demodulasi frekuensi pembawa suatu data. Baik data itu adalah data internet ataupun data yang lain.Modem GSM/CDMA membawa data internet dan bertugas memisahkan data internet dari frekuensi pembawanya. Modem ini bekerja dengan frekuensi tertentu yang sering disebut dengan BITRATE atau BAUDRATE. Untuk di Windows, cara mengetahui frekuensi kerja dari sebuah modem ini tinggal dilakukan di Device Manager. Baudrate/bitrate dapat diatur sesuai dengan kebutuhan, yang nantinya mungkin akan digunakan untuk internet (jika di linux menggunakan wvdial), untuk SMS Gateway (baik menggunakan engine Gammu, SMSTools, Kannel, GNokii) untuk saling disesuaikan terhadap konfigurasi engine tersebut.

Jika di windows sudah sangat mudah cara mengetahui dan mengatur bitrate, bagaimanakah di Linux? Sangat mudah. Kita tinggal memanfaatkan perintah stty.Namun sebelumnya memang harus dipastikan terlebih dahulu, modem terinsert / termount di bagian mana. Untuk linux, modem biasanya akan termount sebagai ttyUSB0 di direktori /dev/ . Jika biasanya kita menggunakan USB modem, maka kita tinggal mencari di :

ls /dev/ | grep ttyUSB

 

Jika modem USB telah plug / terpasang, maka akan muncul seperti ini :

crw--w----   1 root tty         4,  20 2012-05-15 07:14 ttyUSB0

 

Jika tidak muncul berarti modem USB belum terpasang. Bisa juga kita gunakan perintah dmesg seperti :

 

dmesg | grep ttyUSB | more

 

Jika telah terpasang, biasanya akan muncul seperti ini :

 

[   22.996872] usb 3-2: pl2303 converter now attached to ttyUSB0

 

selanjutnya dengan mode root, kita lakukan pengecekan Bitrate dengan cara :

 

stty -F [device]

 

Contoh

 

stty -F  /dev/ttyUSB0

 

perintah ini akan menghasilkan keluaran angka misal : 9600

 

Bagaimana untuk mengatur bitrate? Pengaturan bitrate masih sama, menggunakan stty. Hanya saja perlu ditambahkan angka bit yang bisa dimasukkan sebagai bitrate modem pada bagian setelah -F , seperti contoh berikut:

 

stty 115200 -F /dev/ttyUSB0

 

Selama modem tersebut kuat dan dapat menerima value tersebut, modem akan terset dengan angka tersebut. Angka yang bisa digunakan antara lain : 9600, 19200, 57600, 115200, 230400. Tergantung kekuatan modem. Setelah itu seharusnya anda check kembali apakah stty telah bisa dijalankan dengan angka tersebut. Nah setelah itu, anda test server SMS Gateway anda, atau Wvdial anda. Semoga artikel ini bermanfaat

 

 

Contoh konfigurasi yang biasa digunakan :

  • Gammu, konfigurasi pada gammurc dan smsdrc / gammu-smsdrc
    
    [gammu]
    .
    .
    device = com[sekian]
    connection = at115200
    .
    .
    
    
  • SMS Tools, konfigurasi ada pada /etc/smsd.conf atau custom
    .
    .
    [GSM1]
    device = /dev/ttyUSB0
    incoming = yes
    baudrate = 9600
    
    .
    .
    
    
  • WVDial, konfigurasi pada /etc/wvdial.conf
    .
    .
    Modem = /dev/ttyUSB0
    Baud = 9600
    New PPPD = yes
    
    .
    .
    

Table dan Command Permission Linux

Linux, memiliki sejumlah pengaturan hak akses terhadap file dan perintah serta administrasi sistem. Salah satu diantaranya adalah file permission mode. Jika anda lihat pada konsol anda, dan dilakukan listing direktori dengan perintah :

ls -al

maka akan muncul kira kira seperti demikian:

drwxr-xr-x 2 bimo     bimo      7112 2012-05-13 09:59 .
drwxr-xr-x   9 root     root       208 2012-03-27 20:43 ..
-rw-r--r--   1 bimo     bimo      4513 2010-10-18 23:17 satu.doc
-rw-r--r--   1 bimo     bimo     18883 2010-11-23 20:31 dua.doc

Perhatikan pada notasi urutan penulisannya. pada blok pertama menunjukkan permission dari file/folder tersebut. Blok kedua adalah jumlah item, blok ketiga adalah user, blok ke empat adalah group, blok kelima adalah ukuran dalam bytes, selanjutnya adalah timestamp dan nama file.

 

NOTASI PERMISSION

Notasi Permission file/directory linux memiliki urutan sebagai berikut

[d/s/-]      [rwx]      [rwx]      [rwx]
1              2            3            4

 

1 : Petunjuk bawah itu direktori/folder, atau file, atau symlinks ke file lain

2 : Hak akses user. R : Read, W: Write, X : Execute

3 : Hak akses group

4 : Hak akses Others

 

Untuk group, bisa jadi satu user dimasukkan ke dalam group user yang lain. Secara umum, seluruhnya masuk dalam group users. Dalam notasi tersebut, jika bagian r berisi r , berarti akses terhadap user/grup tersebut diijinkan. Namun berisi tanda – berarti tidak diijinkan. Begitu pula dengan w dan x.

 

NOTASI ANGKA UNTUK PERMISSION

Linux menggunakan notasi angka untuk mempermudah administrasi pengelolaan hak akses. Notasi tersebut akan berisi seperti demikian :

r : bernilai 4

w : bernilai 2

x : bernilai 1

 

Sehingga jika sebuah user memiliki semua akses akan bernilai 7. Jika user, group, dan others memiliki akses r,w,x akan bernilai 777

 

 

u g o
r 4 4 4
w 2 2 2
x 1 1 1
Value 7 7 7

PEMILIKAN / OWNERSHIP
Kepemilikan dikenal beberapa macam antara lain :
u : user, pemilik
g : group, group
o : others, siapapun juga
a : all

PERINTAH / COMMAND
Perintah administrasi kepemilikan adalah : chmod, artinya adalah change permission mode. Syntax umumnya adalah seperti berikut :

chmod user+permission file/folder = menambahkan hak akses user terhadap aktifitas tertentu. Contoh

chmod a+r /home/bimo/anu/ = mengijinkan pembacaan oleh seluruh user, terhadap direktori /home/bimo/anu

chmod user-permission file/folder = mengurangi hak akses user terhadap aktifitas tertentu. Contoh:

chmod og-w /home/bimo/anu/ = menghapus hak tulis group dan others terhadap direktori /home/bimo/anu

chmod -R user+permission = menambah hak akses user sampai ke dalam subdirektori dan file. Contoh:
chown -R ug+w /home/bimo/anu = menambah hak akses user dan group hingga ke dalam subdirectory (recursively) apapun yang ada di directory /home/bimo/anu

COMMAND chmod dengan NOTASI ANGKA
Untuk mengatur langsung seluruh direktori dengan lengkap hak aksesnya dapat digunakan seperti ini

chmod notasi file/folder

Contoh

chmod 755 /home/bimo/anu

artinya adalah melakukan pengaturan hak akses terhadap /home/bimo/anu dengan setting
user : read + write + execute
group: read + write
other: read + write

atau secara recursively dengan menambahkan -R,untuk akses ke dalam seluruh subdirektori adalah :

chmod -R 777 /home/bimo/anu

artinya adalah seluruh user, group dan others mendapatkan hak read, write, dan execute ke dalam seluruh direktori dan subdirektori dalam direktori /home/bimo/anu

Selamat membaca, semoga bermanfaat

[Tips Trick] Bisakah Aplikasi Web Menjalankan File yang Dimiliki root Linux?

Linux, dirancang sebagai sistem operasi yang aman. Keamanan Linux didukung dengan beberapa fitur dasarnya antara lain ketatnya pengaturan akses, ijin / permission dan kepemilikan / owner. User pemilik hak tertinggi adalah super-user yaitu root. User root memang dirancang untuk bertugas terhadap administrasi-admistrasi dan pengaturan-pengaturan dasar bagi lancarnya sistem. Sebuah pengaturan yang ketat biasanya akan berpengaruh terhadap operasional file di tingkat user biasa. Sedangkan biasanya kenyamanan penggunaan akan mengakibatkan celah keamanan. Sehingga dengan demikian seorang sistem administrator harus bijak dalam mengeluarkan keputusan pengaturan sistem.

Dalam sebuah sistem server, layanan web akan dilayani oleh web server. Pada umumnya dalam linux ditangani oleh Apache, LightHTTPD, atau juga Nginx ( n-gin-x / baca engine-x). Seluruh webserver ini akan dihidupkan oleh sistem atau oleh root. Namun demikian webserver ini akan berjalan dengan mode bukan root. Biasanya untuk Linux keturunan RedHat, webserver akan berjalan sesuai namanya yaitu sebagai user apache, atau user nginx atau kadang diset juga sebagai user nobody. Sedangkan berbasis Debian, seperti ubuntu, mint, akan berjalan dengan nama www-data. Dengan demikian, seluruh file yang akan dipublish ke web harus memiliki properti ijin yang boleh diakses oleh user webserver tersebut. Jika saya menggunakan ubuntu, maka biasanya dalam DocumentRoot sistem komputer saya akan memiliki hak akses seperti berikut :

bimo@bimo-laptop ~/www/ $ ls -al
total 499721
drwxr-xr-x 311 www-data www-data      15136 2012-05-11 13:12 .
drwxr-xr-x  23 www-data www-data        544 2012-03-29 13:48 ..
drwxr-xr-x   3 www-data www-data         88 2010-11-28 21:11 sistemdpr
drwxr-xr-x   3 www-data www-data         80 2010-11-28 21:12 hack
drwxr-xr-x   9 www-data www-data        672 2011-04-22 14:35 aplikasi
-rw-r--r--   1 www-data www-data     4571 2010-11-21 07:32 index.php

 

Dalam contoh diatas, terdapat beberapa notasi atau urutan properti dari sebuah direktori/folder atau file. Tentang hal ini akan dibahas di lain posting.

Sebuah file yang dimiliki oleh root, jika user lain tidak diberi akses baik eksekusi, baca maupun modifikasi, maka user sistem tersebut akan gagal melakukan pembacaan file. Begitu juga dengan user apache/web. Ketika user web gagal, maka file tersebut tidak akan tampil di browser karena apache gagal melakukan pembacaan user. Dengan demikian sangat disarankan kepemilikan web adalah milik webserver user.

 

Mengapa webserver tidak boleh berjalan sebagai root?

Dengan alasan keamanan, webserver memang tidak boleh berjalan sebagai root. Sebuah aplikasi web dinamis kadang tanpa disadari, mengandung bug atau kesalahan pemrograman yang berbahaya. Sehingga ketika sebuah intrusi hacker masuk ke dalam web, hacker tersebut dapat melakukan apa saja setingkat dengan root. Hal ini sangat berbahaya. Misalkan adalah jika terdapat script yang mengijinkan user melakukan upload file, dan ternyata file tersebut adalah suatu tools yang memungkinkan adanya operasional sistem, maka jika user web adalah root, sangat mungkin sang hacker dapat membuat operasional penuh terhadap sistem, seperti menghapus seluruhnya, mematikan komputer, mengganti konfigurasi.

 

Dapatkah webserver dipaksa untuk berjalan sebagai root?

Secara teknis bisa saja. Namun sangat beresiko. Proses penggantian user yang akan dijalankan oleh webserver ada dalam konfigurasi webserver. Untuk apache terdapat pada apache.conf (debian) atau httpd.conf, untuk Redhat, Slackware, CentOS dll, yaitu pada bagian ini :

User apache
Group apache

namun sekali lagi tidak disarankan untuk mengganti menjadi user pelaku administrasi, terutama root.

 

Apakah berarti aplikasi web tidak dapat menjalankan pekerjaan-pekerjaan sistem?

Dalam kenyataannya, aplikasi web sering harus menjalankan : SMS Gateway, Menghidupkan dan mematikan webserver secara webbase, dan lain sebagainya. Kadang juga harus melakukan penggantian password user untuk satu alasan. Dapatkah? Ya, dapat. Yaitu dengan menyiasati dengan memanfaatkan file konfigurasi root /etc/sudoers/. Sudo adalah sebuah perintah yang artinya superuser do, atau dikerjakan dengan mode superuser. User yang dapat melakukan sudo adalah user yang terdaftar dalam /etc/sudoers ini. Dengan beberapa configuration maka sudoers dapat juga dilakukan tanpa password atau dengan password. Kira-kira isi sudoers adalah seperti berikut:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL
bimo    ALL=(ALL) NOPASSWD: ALL
# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)

%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

 

 

BERDEAL ANTARA APLIKASI DENGAN SUDOERS

Misal saya memerlukan akses root untuk menghidupkan sebuah server sms gateway. Sedangkan server tersebut akan dihidupkan dengan mode root dengan perintah :

/etc/init.d/sms start

Maka saya akan membuat script bernama sms.php yang kira-kira sebagai berikut:

 

$cmd  = "/etc/init.d/sms start";

exec($cmd,$ret);

 

Dengan perkiraan operasional adalah jika saya akan menghidupkan server sms adalah

http://namaserver/sms.php

 

 

Script itu hampir akan susah dijalankan oleh webserver. Maka saya akan mengganti script tersebut sebagai berikut :

  1. Membuat sebuah script shell yang berfungsi menghidupkan sms
  2. Membuat permission executable terhadap shell dan dapat diakses dan dieksekusi oleh webserver
  3. Mengganti konfigurasi sudoers
  4. Membuat script php yang akan menjalankan bash shell administrator sms.

 

SCRIPT SHELL

#/bin/bash

#file /opt/smsstart.sh

/etc/init.d/sms start

 

PERMISSION

chown root:root /opt/smsstart.sh

chmod a+x /opt/smsstart.sh

 

KONFIGURASI SUDOERS

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL
bimo    ALL=(ALL) NOPASSWD: ALL


#perhatikan bagian ini
www-data ALL=NOPASSWD: /opt/smsstart.sh

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)

%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.

 

 

 

SCRIPT PHP

 

$cmd  = "/opt/smsstart.sh";

exec($cmd,$ret);

 

 

Dengan trik seperti ini, maka kita tetap dapat membuat aplikasi web yang bertujuan untuk melakukan operasional / administrasi yang dapat dilakukan oleh root secara terbatas dan ketat. Yaitu dengan membuat apache/webserver memiliki hak akses setara root untuk menghidupkan sms melalui file /opt/smsstart.sh Namun, untuk hal ini tetap membutuhkan kehati-hatian dalam berprogramming.

Sekian, sekedar tulisan dan sekedar berbagi, semoga bermanfaat.

[Contoh] Operasional Sharing Directory Linux Mode Console Client Mode

Dalam sebuah jaringan LAN atau WAN, sudah wajar jika digunakan sharing directory / folder untuk dapat diakses oleh komputer lain dalam jaringan tersebut. Dalam sistem struktur directory Windows terdapat dua model perlakuan, yaitu mode GUI dan mode COMMAND LINE. Mode GUI sangatlah mudah, tinggal pilih foldernya, klik kanan, share. Namun memang ada pilihan juga yaitu apakah akan menggunakan Just Enable Simple File Sharing atau tidak. Jika tidak, maka kita harus menentukan akun user yang dapat mengakses folder tersebut. Mode command line, dapat dilakukan dengan mudah juga, tinggal menggunakan opsi dalam command NET SHARE.

Demikian juga proses melakukan akses ke komputer lain, untuk Windows tinggal melakukan pembukaan Windows explorer, dan ketik \\namakomputer atau \\ipaddress. Mode Command Prompt juga akan mudah dilakukan dengan menggunakan opsi NET SHARE. Untuk lebih jelas tentang sharing directory windows, akan dijelaskan lebih lanjut dalam posting tersendiri.

 

Untuk linux, sharing directory dapat dilakukan dengan menggunakan SAMBA. Sharing ini baik di Windows maupun Linux bersifat Client – Server, dimana folder ter-share akan diletakkan pada posisi server. Samba ini memanfaatkan port sharing Windows yaitu 135, 139 (netbios-ssn) dan 445 (microsoft-ds). Mode yang bisa digunakan ada dua juga, yaitu mode GUI dan mode Command Line.

 

CLIENT MODE

Client adalah pengakses layanan dari server samba. Proses melakukan akses dengan mode GUI, dapat dilakukan dengan sangat mudah, buka File Manager anda, entah dengan nautilus atau konqueror, atau yang lain, ketikkan smb://namakomputer atau smb://ipaddress

Kira-kira hasilnya akan seperti ini

 

Jika berpassword, tentu akan diminta username dan password dari shared folder tersebut. Server dapat juga dari direktori yang berasal dari windows, linux ataupun yang lain.

 

Untuk COMMAND LINE mode, ini juga dibutuhkan karena kadang server yang kita gunakan sengaja tidak mendukung tampilan grafis. Maka dapat kita gunakan langkah berikut ini:

  1. Melihat direktori tershare dengan perintah :
    smbclient -L ipaddress
  2. Melakukan pembuatan direktori di komputer lokal untuk menampung shared directory. Contoh :
    mkdir tempshare
  3. Melakukan mounting tipe samba dari shared komputer yang terlihat ke dalam direktori lokal yang dibuat:
    sudo mount -t smbfs //192.168.1.100/share tempshare/

 

Contoh :

smbclient -L 192.168.1.100

 

hasil:

Unknown parameter encountered: "netbios"
Ignoring unknown parameter "netbios"
Enter bimo's password:
Domain=[NOGROUP] OS=[Unix] Server=[Samba 3.4.0]

Sharename       Type      Comment
---------       ----      -------
IPC$            IPC       IPC Service (wedhus-laptop server (Samba, CentOS))
print$          Disk      Printer Drivers
Print_to_PDF    Printer   Print to a PDF File
MP140-series    Printer   Canon MP140 series
Canon-iP2700-series Printer   Canon iP2700 series
Canon-iP1800-series Printer   Canon iP1800 series
share           Disk
Domain=[NOGROUP] OS=[Unix] Server=[Samba 3.4.0]

Server               Comment
---------            -------
WEDHUS-LAPTOP          wedhus-laptop server (Samba, CentOS)

Workgroup            Master
---------            -------
NOGROUP              WEDHUS-LAPTOP

Di situ terlihat sebuah folder share bernama SHARE

mkdir tempshare

sudo mount -t smbfs //192.168.1.100/share tempshare/

ls tempshare

hasilnya adalah

imagessky  nasadump2409.sql  rumcug.exe  tgbop  tinymce.zip  usb-driver-c2000.zip  vnc-4_1_3-x86_win32.exe  vnc-4_1_3-x86_win32.zip

 

Untuk melepas sharing, dapat dilakukan dengan :

umount tempshare

 

 

Untuk mode setting server sharing, akan dapat dibahas di lain posting. 🙂 Semoga bermanfaat.