Anda di halaman 1dari 26

TUTORIAL ABSENSI

Membuat Sendiri Aplikasi Absensi


Bagian 2 dari 2 Tulisan

agi yang belum memiliki fasilitas absensi yang terkomputerisasi, mari membuat
absensi sederhana dengan memanfaatkan shell script, PHP, dan database PostgreSQL.
Di bagian pertama, kita sudah membuat absensi dengan front end berbasis text (shell
script). Pada bagian terakhir ini, kita akan membahas front end berbasis web (PHP).

Melanjutkan bagian sebelumnya, kita akan


segera membangun front end berbasis web.
Diharapkan, struktur dan isi tabel telah disiapkan dengan baik.

Front end berbasis web


Front end ini akan kita beri nama absen.
php dan harus dapat diakses dari web
server. Cara kerja dan flow program dibuat
semirip mungkin dengan front end berbasis
text (untuk penjelasan, dapat merujuk pada
penjelasan alur program front end berbasis
text bagian sebelumnya). Sementara untuk
isi source code-nya, karena perbedaan cara
kerja aplikasi web dan aplikasi desktop, kita
harus melakukan penyesuaian.
Berikut ini adalah isi dari absen.php:
<?
// (c) Noprianto, Feb 2006
// v0.1 BSD
$conn = pg_connect(dbname=absen
user=nop);
echo
<HTML>
<HEAD>
<TITLE>Absen</TITLE>
</HEAD>
<BODY>
<CENTER>
<BR><BR><BR><BR><BR>
;

52

06/2006  INFOLINUX

if (!$_REQUEST[task])
{
echo
<FORM ACTION=absen.php?
task=check METHOD=post>
<TABLE BORDER=1>
<TR>
<TD COLSPAN=3 ALIGN=
center><B>ABSEN</TD>
</TR>
<TR>
<TD>User id</TD><TD><INPUT
TYPE=text NAME=
user_id SIZE=4></TD><TD>
<INPUT TYPE=submit
VALUE=OK></TD>
</TR>
</TABLE>
</FORM>
;
}
else
if ($_REQUEST[task] ==
check)
{
$user_id = strtoupper(trim(
$_POST[user_id]));
$q = select id_user from
ms_user where iduser=upper
($user_id);
$r = pg_query($conn, $q);
if (!pg_num_rows($r))
{
echo
User not found

&nbsp;&nbsp;&nbsp
<INPUT TYPE=button
VALUE=OK onclick=
location.href=\
absen.php\>
;
}
else
{
$q = select remark
from tr_absen where
date (time_in)=
current_date and
id_user=upper
($user_id);
$r = pg_query($conn, $q);
if (!pg_num_rows($r))
{
$c_act = true;
}
else
{
$l = pg_fetch_array($r,
0, PGSQL_ASSOC);
if ($l[remark] == )
$c_act = true;
}
if ($c_act == true)
{
echo
<FORM ACTION=absen.
php?task=process
METHOD=post>
<INPUT TYPE=hidden

www.infolinux.web.id

TUTORIAL ABSENSI
NAME=user_id VALUE=
$user_id>
<TABLE BORDER=1>
<TR>
<TD COLSPAN=3 ALIGN=
center>Action</TD>
</TR>
<TR>
<TD><INPUT TYPE=submit
NAME=action VALUE=
IN></TD>
<TD><INPUT TYPE=submit
NAME=action VALUE=
BREAK></TD>
<TD><INPUT TYPE=submit
NAME=action VALUE=
OUT></TD>
<TR>
</TABLE>
</FORM>
;
}
else
{
echo
<FORM ACTION=absen.
php?task=process
METHOD=post>
<INPUT TYPE=hidden
NAME=user_id VALUE=
$user_id>
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>
Action</TD>
</TR>
<TR>
<TD><INPUT TYPE=submit
NAME=action VALUE=
BACK></TD>
<TR>
</TABLE>
</FORM>
;
}
}
}
else
if ($_REQUEST[task] ==
process)
{
$user_id = $_POST[user_id];

www.infolinux.web.id

$q = select time_in from


tr_absen where date(time_in)=
current_date and id_user=
upper($user_id) ;
$r = pg_query($conn, $q);
$in_before = true;
if (!pg_num_rows($r))
{
$in_before = false;
}
else
{
$l = pg_fetch_array($r, 0,
PGSQL_ASSOC);
if ($l[time_in] == )
$in_before = false;
}
switch ($_POST[action])
{
case IN:
if ($in_before == false)
{
$q = insert into
tr_absen(id_user,
time_out) values
(upper($user_id),
null) ;
$r = pg_query($conn,
$q);

echo
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>
Welcome to Office<BR>
Have a nice day</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=button
VALUE=OK onclick=
location.href=\
absen.php\></TD>
<TR>
</TABLE>
;
break;
case OUT:

if ($in_before == false)
{
echo
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>
ERROR: Please select
IN first</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=
button VALUE=OK
onclick=location.
href=\absen.php\
></TD>
<TR>
</TABLE>
;
}
else
{
$q = update tr_
absen set time_out=
now() where id_user=
upper($user_id) and
date(time_in)=
current_date ;
$r = pg_query($conn,
$q);
echo
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>
See you later<BR>Have
a nice day</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=
button VALUE=OK
onclick=location.
href=\absen.php\
></TD>
<TR>
</TABLE>
;
}
break;
case BREAK:
if ($in_before == false)
{
echo

INFOLINUX  06/2006

53

TUTORIAL ABSENSI
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>
ERROR: Please
select IN first
</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=button
VALUE=OK onclick=
location.href=\
absen.php\></TD>
<TR>
</TABLE>
;
}
else
{
echo
<FORM ACTION=absen.
php?task=break_confirm
METHOD=post>
<INPUT TYPE=hidden
NAME=user_id VALUE=
$user_id>
<TABLE BORDER=1>
<TR>
<TD COLSPAN=2
ALIGN=center>
Reason</TD>
</TR>
<TR>
<TD><INPUT TYPE=
text NAME=reason>
</TD>
<TD><INPUT TYPE=
submit VALUE=
OK></TD>
<TR>
</TABLE>
</FORM>
;
}
break;
case BACK:
echo
<FORM ACTION=absen.
php?task=back METHOD=
post>
<INPUT TYPE=hidden
NAME=user_id VALUE=
$user_id>

54

06/2006  INFOLINUX

<TABLE BORDER=1>
<TR>
<TD COLSPAN=2 ALIGN=
center>Confirmation
</TD>
</TR>
<TR>
<TD><INPUT TYPE=submit
NAME=confirm VALUE=
Yes></TD>
<TD><INPUT TYPE=submit
NAME=confirm VALUE=
No></TD>
<TR>
</TABLE>
</FORM>
;
break;
}
}
else
if ($_REQUEST[task] ==
break_confirm)
{
$user_id =
$_POST[user_id];
$reason = $_POST[reason];
echo
<FORM ACTION=absen.
php?task=break METHOD=
post>
<INPUT TYPE=hidden
NAME=user_id VALUE=
$user_id>
<INPUT TYPE=hidden NAME=
reason VALUE=$reason>
<TABLE BORDER=1>
<TR>
<TD COLSPAN=2 ALIGN=
center>Confirmation</TD>
</TR>
<TR>
<TD><INPUT TYPE=submit
NAME=confirm VALUE=
Yes></TD>
<TD><INPUT TYPE=submit
NAME=confirm VALUE=
No></TD>
<TR>
</TABLE>
</FORM>
;
}

else
if ($_REQUEST[task] ==
break)
{
$user_id =
$_POST[user_id];
$reason = $_POST[reason];
$confirm = $_POST
[confirm];
if ($confirm == No)
{
echo
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>Break
cancelled</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=button
VALUE=OK onclick=
location.href=\absen.
php\></TD>
<TR>
</TABLE>
;
}
else
if ($confirm == Yes)
{
$q = update tr_absen
set break_count=
break_count+1,
remark=break:$reason
where id_user=
upper($user_id) and
date (time_in)=
current_date ;
$r = pg_query($conn, $q);

echo
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>Take
your time</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=button
VALUE=OK onclick=

www.infolinux.web.id

TUTORIAL ABSENSI

FE Web based: input.

FE Web based: IN, OUT, atau BREAK.

location.href=\absen.
php\></TD>
<TR>
</TABLE>

?>
if ($confirm == Yes)
{
$q = update tr_absen
set remark= where
id_user=upper(
$user_id) and date
(time_in)=current_date ;
$r = pg_query($conn, $q);

;
}
}
else
if ($_REQUEST[task] ==
back)
{
$user_id =
$_POST[user_ id];
$confirm = $_POST
[confirm];
if ($confirm == No)
{
echo
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>Take
your time</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=button
VALUE=OK onclick=
location.href=\absen.
php\></TD>
<TR>
</TABLE>
;
}
else

www.infolinux.web.id

echo
<TABLE BORDER=1>
<TR>
<TD ALIGN=center>
Welcome back</TD>
</TR>
<TR>
<TD ALIGN=center>
<INPUT TYPE=button
VALUE=OK onclick=
location.href=\absen.
php\></TD>
<TR>
</TABLE>
;

Penjelasan source code:


 Kita menggunakan satu file saja (absen.php) untuk semua kebutuhan kita.
Source absen.php ini jauh lebih panjang
daripada absen.sh karena perbedaan
cara kerja aplikasi web dan desktop.
 Semua tugas (task), kita lewatkan dengan nama yang berbeda dan oleh karena itu, di absen.php, kita akan memeriksa $_REQUEST[task].
 Semua form kita gunakan method POST
dan semua data akan dilewatkan. Apabila diperlukan, kita akan menggunakan
INPUT berupa HIDDEN sehingga perpindahan lintas form tetap mengandung
informasi yang dibutuhkan.
 Untuk konfirmasi, kita tidak menggunakan Javascript, namun tetap menggunakan form HTML.
 Untuk hasil query, kita akan periksa baris
yang didapat dengan pg_num_rows()
dan akan memeriksa field yang bersangkutan setelah dapatkan array dengan
pg_fetch_array().

}
}
echo
</CENTER>
</BODY>
</HTML>
;

Laporan
Laporan akan kita jalankan di web dan akan
kita simpan dengan nama laporan.php. Berikut ini adalah source code dari laporan.php:
<?
// (c) Noprianto, Feb 2006
// v0.1 BSD

INFOLINUX  06/2006

55

TUTORIAL ABSENSI
session_start();
ob_start();
$conn = pg_connect(dbname=absen
user=nop);
echo
<HTML>
<HEAD>
<TITLE>Laporan Absensi</TITLE>
</HEAD>
<BODY>
;

if (!session_is_registered
(login))
{
if (!$_REQUEST[task] )
{
echo
<FORM ACTION=laporan.
php?task=login METHOD=
post>
<TABLE BORDER=1>
<TR><TD COLSPAN=2 ALIGN=
center>Login</TD></TR>
<TR>
<TD>User id</TD><TD><INPUT
TYPE=text
NAME=user_id></TD>
</TR>
<TR>
<TD>Password</TD><TD><INPUT
TYPE=password
NAME=password></TD>
</TR>
<TR>
<TD>&nbsp;</TD><TD><INPUT
TYPE=submit
VALUE=login></TD>
</TR>
</TABLE>
</FORM>
;
}
else
if ($_REQUEST[task] ==

56

06/2006  INFOLINUX

login)
{
$user_id =
$_POST[user_id];
$password =
$_POST[password];
$q = select count(*) as
found from ms_user where
id_user=upper($user_id)
and password=md5
($password) and
id_user<> and password
<> ;
$r = pg_query($conn, $q);
$l = pg_fetch_array($r, 0,
PGSQL_ASSOC);
$found = $l[found];
if ($found == 1)
{
session_register
(login);
$_SESSION[login] =
$user_id;
}
header(Location:
laporan.php);
}
}
else
{
if (!$_REQUEST[task] )
{
$user_id = $_SESSION
[login];
echo Welcome to Laporan
Absen, $user_id
<A HREF=laporan.php?
task=logout>logout</A>
<HR> <BR>;
$today = date(Y-m-d);
echo
<FORM ACTION=laporan.
php?task=report
METHOD=post>
<TABLE BORDER=1>
<TR>
<TD>Report from</TD><TD>
<INPUT TYPE=text
NAME=from VALUE=$today>
</TD>
<TD>to</TD><TD><INPUT

TYPE=text name=to
VALUE=$today></TD>
</TR>
<TR>
<TD VALIGN=top>
Sort
<BR>
<INPUT TYPE=radio
NAME=sort_type VALUE=A
checked>asc<BR>
<INPUT TYPE=radio
NAME=sort_type VALUE=D>
desc<BR>
</TD>
<TD COLSPAN=3>
<INPUT TYPE=radio
NAME=sort_task
VALUE=earliest_in
checked>Earlist IN<BR>
<INPUT TYPE=radio
NAME=sort_task
VALUE=latest_out>
Latest OUT<BR>
<INPUT TYPE=radio
NAME=sort_task
VALUE=break_ most>
BREAK most<BR>
</TD>
</TR>
<TR>
<TD>&nbsp;</TD>
<TD COLSPAN=3>
<INPUT TYPE=reset
VALUE=reset>
<INPUT TYPE=submit
VALUE=create report>
</TD>
</TR>
</TABLE>
</FORM>
;
}
else
if ($_REQUEST[task] ==
report)
{
$user_id = $_SESSION
[login];
echo Welcome to Laporan
Absen, $user_id
<A HREF=laporan.php?task=
logout>logout</A> <HR>

www.infolinux.web.id

TUTORIAL ABSENSI
<BR>;

PGSQL_ASSOC);
echo <TR>;
echo <TD> . $l[id_
user] . </TD>;
echo <TD> .
$l[time_in] .
</TD>;
echo <TD> .
$l[time_out] .
</TD>;
echo <TD> .
$l[break_count] .
</TD>;
echo </TR>;

$from = $_POST[from];
$to = $_POST[to];
$sort_type =
$_POST[sort_type];
$sort_task =
$_POST[sort_task];

$q = select * from
tr_absen where
date(time_in)>=$from and
date(time_out)<=$to
order by id_user ;
switch ($sort_task)
{
case earliest_in:
$q .= , time_in ;
break;
case latest_out:
$q .= , time_out ;
break;
case break_most:
$q .= ,
break_count ;
break;
}
if ($sort_task != )
{
switch ($sort_type)
{
case A:
$q .= asc;
break;
case D:
$q .= desc;
break;
}
}
echo <I><FONT SIZE=-1>
$q</FONT></I>;
echo <TABLE BORDER=1>;
echo <TH>user</TH><TH>date
in</TH><TH>date out</TH>
<TH>break count</TH>;
$r = pg_query($conn, $q);
if (pg_num_rows($r) > 0)
{
for ($i = 0; $i <
pg_num_rows($r); $i++)
{
$l = pg_fetch_array
($r, $i,

www.infolinux.web.id

}
}
echo </TABLE>;
}
else
if ($_REQUEST[task] ==
logout)
{
session_unset();
session_destroy();
header(Location: laporan.
php);
}
}
echo
</BODY>
</HTML>
;
ob_end_flush();
?>

Berikut ini adalah penjelasan alur program:


 Pertama-tama, program akan memeriksa session login. Apabila tidak terdaftar, maka kita akan memeriksa
tugas yang diminta. Apabila tidak ada
tugas, maka kita akan menampilkan
form login. Apabila tugas yang diminta
adalah login, maka kita akan memeriksa ke ms_user. Apabila login berhasil, maka session login akan diset dengan isi adalah user_id.
 Apabila session login telah terdaftar,
maka kita akan memeriksa tugas yang
diminta. Apabila tidak ada tugas, maka
kita akan menampilkan form untuk pembuatan laporan. Apabila tugas adalah report, maka kita akan menyiapkan laporan dan menampilkannya. Apabila tugas

adalah logout, maka kita akan membersihkan session.


Berikut ini adalah penjelasan source
code program:
 Kita menggunakan satu laporan.php untuk semua kebutuhan.
 Karena kita akan mengirim header HTML
dengan header() di tengah-tengah program, maka kita menggunakan pula
fungsi output buffering seperti ob_start()
dan ob_end_flush().
 Semua variabel form akan dikirim apa
adanya dan pada saat pembuatan laporan, kita tinggal memeriksa semua isinya. Khusus untuk sorting ascending
atau descending, kita perlu memeriksa
dan memastikan $_POST[sort_task]
memiliki nilai tertentu.

Lebih lanjut
Apabila kita lihat, sistem absensi ini memiliki kekurangan yang paling menonjol yaitu
bahwa siapa saja bisa mengabsensikan siapa
saja. Baik absen masuk, ijin ataupun keluar.
Apabila diinginkan, kita bisa saja meminta user untuk memasukkan password
sebelum memilih aksi yang diinginkan (IN,
OUT, BREAK, BACK). User satu tetap bisa
mengabsensikan user lain apabila diinginkan, namun, bagi user yang tidak memberitahu passwordnya kepada user lain, user
lain tidak bisa sembarangan mengabsensikan, termasuk izin.
Apabila identifikasi yang menjadi masalah seperti dibahas sebelumnya, kita bisa
saja mengintegrasikan finger print reader
ataupun teknologi biometrik lain.
Kekurangan lain dari sistem ini adalah
struktur data flat tr_absen yang digunakan.
Kita juga tidak mencatat detil izin yang dilakukan. Begitupun dengan fasilitas laporan
dan pengurutan yang sangat sederhana dan
terbatas.
Tentunya, aplikasi ini sangat perlu disempurnakan apabila ingin digunakan.
Kekurangan lain yang juga mungkin minor adalah fokus pada front end berbasis
web. Tentu akan lebih mudah digunakan
apabila tempat user memberi input selalu
dalam keadaan terfokus.
Demikianlah pembahasan kita tentang
pembuatan aplikasi absensi. Selamat mencoba!
Noprianto [noprianto@infolinux.co.id]

INFOLINUX  06/2006

57

IKLAN
SEMINAR BAJAU

IKLAN OZONE

TUTORIAL SSH

Beberapa Langkah
Meningkatkan Keamanan SSH

ebagai salah satu service yang paling banyak digunakan untuk keperluan remote, ada
baiknya tingkat keamanan SSH lebih ditingkatkan. Dengan beberapa langkah yang
dapat dilakukan dengan mudah, keamanan suatu server dapat lebih terjamin. Pada
artikel ini, kami akan menjelaskan empat cara untuk mengamankan SSH server.

Jika Anda adalah seorang system administrator yang pekerjaan sehari-harinya


memonitor kondisi server, pasti sering kali
melakukan remote login ke komputer server.
Entah itu untuk me-restart suatu service
maupun memonitor kondisi sistem. Sebelum hadirnya SSH, Telnet merupakan salah
satu service yang paling banyak digunakan
untuk melakukan remote login. Sayangnya, menggunakan Telnet tidaklah secure.
Karena pada saat mengetikkan password ke
server Telnet, password yang dikirimkan
masih berbentuk clear text, sehingga mudah disadap oleh pihak luar.
Setelah hadirnya SSH yang menawarkan
keamanan yang lebih tinggi dari Telnet,
barulah fungsi Telnet untuk melakukan
remote login, perlahan tapi pasti mulai
tergusur oleh SSH. Berbeda dengan Telnet,
SSH melakukan enkripsi data yang dikirim
ke komputer tujuan, pada saat kita mengetikkan password atau yang lainnya. Hal
ini jelas lebih aman daripada Telnet yang
masih mengirimkan datanya dalam bentuk
clear text.
Meski SSH sudah cukup aman, tetap saja
masih ada celah yang bisa dimanfaatkan
pihak tak bertanggung jawab untuk dapat
memasuki suatu server SSH. Entah itu melalui metode brute force attack, maupun yang
lainnya. Untuk itulah, diperlukan tindakan
preventif agar pihak luar tidak bisa sembarangan login ke server SSH kita.
OpenSSH sebagai aplikasi SSH server
yang paling banyak digunakan di sistem

60

06/2006  INFOLINUX

operasi Linux, memiliki cukup banyak konfigurasi yang dapat digunakan untuk meningkatkan keamanan.
Ada beberapa langkah yang dapat kita
lakukan untuk mengamankan SSH server.
Beberapa langkah yang dapat dilakukan diantaranya sebagai berikut:
 Disable akses login SSH ke user root.
 Disable password logins dengan langsung mengubah setting PasswordAuthentication yang terdapat pada file
konfigurasi sshd.
 Menjalankan service sshd pada port
yang berbeda.
 Menginstalasi DenyHosts.
Untuk mempermudah pemahaman, silahkan baca penjelasan mengenai keempat
metode pengamanan SSH yang akan InfoLINUX jelaskan pada artikel ini.

Persiapan
Paket OpenSSH, biasanya sudah disertakan
dalam CD distro yang Anda gunakan. Sebagai
bahan uji coba pembuatan artikel ini, InfoLINUX menggunakan distro Debian Sarge 3.1
sebagai pilihan distronya. Meski demikian,
langkah ini juga dapat Anda terapkan dengan mudah di berbagai distro lainnya.
Untuk melihat apakah paket OpenSSH
sudah terinstallasi atau belum di paket
Debian Sarge, cukup mengetikkan perintah
sebagai berikut:
# dpkg -l | grep ssh
ii ssh
3.8.1p1-8.sarg

Untuk pengguna Fedora atau distro


berbasis RPM lainnya, bisa menggunakan
perintah RPM dibawah ini untuk mengetahui apakah paket SSH sudah terinstal atau
belum.
# rpm -qa | grep ssh
openssh-server-4.3p2-4
openssh-clients-4.3p2-4

Jika paket SSH sudah terinstal dengan


baik, silakan melanjutkan ke langkah berikutnya.

Disable akses login SSH ke user


root
Untuk meminimalisasi risiko masuknya
user luar ke SSH server dengan menggunakan akses user root, ada baiknya login ke
SSH server dengan menggunakan user root
Anda Disable. Untuk men-disable akses root
melalui SSH, buka dahulu file sshd_config.
Di Debian, file sshd_config terletak di /etc/
ssh/sshd_config.
# vim /etc/ssh/sshd_config

Setelah terbuka, edit pada bagian


PermitRootLogin yes

menjadi:
PermitRootLogin no

Save perubahan konfigurasi yang telah


Anda lakukan, lalu restart service SSH server Anda.
# /etc/init.d/ssh restart

www.infolinux.web.id

TUTORIAL SSH
Langkah berikutnya adalah testing konfigurasi yang telah Anda lakukan. Sebagai
contoh komputer yang kita konfigurasi
memiliki IP 192.168.2.1. Dari komputer
yang lainnya, tes untuk login ke SSH server
dengan login sebagai user root. Ketika ditanyakan password root Anda, masukkan
dengan password root yang terdapat pada
sistem Anda.
$ ssh root@192.168.2.1
Password:
Password:
Password:
Permission denied
(publickey,keyboard-interactive).

Jika tidak bisa masuk ke prompt root


meski password SSH untuk user root sudah
benar, berarti Anda telah berhasil men-disable user root melalui akses login menggunakan SSH Server. Untuk meng-enable-kan
kembali, Anda tinggal mengubah kembali
parameter PermitRootLogin menjadi yes.

Menjalankan sshd pada port yang


berbeda
Secara default, service SSH server berjalan
pada port 22. Banyak sshd crackers yang
hanya mencoba untuk menyerang pada port
default ssh, yaitu port 22. Jika kita mengubah port default ssh menjadi port lainnya,
ada kemungkinan serangan terhadap sshd
dapat diturunkan secara significant.
Untuk menjalankan service sshd di port
lainnya, buka kembali file sshd_config, dan
ubah port alternatif sshd yang baru. Sebagai
contoh, kami akan mengubah port default
SSH dari port 22 menjadi port 9922. Untuk melakukan hal tersebut, buka terlebih
dahulu file sshd_config dengan editor kesayangan Anda.

Instalasi DenyHosts
Setelah terbuka, edit pada bagian
Port 22

menjadi :
Port 9922

Langkah ini berguna agar setiap user yang


akan mengakses ke server, perlu membuat
ssh keys terlebih dahulu. Untuk melakukan
hal ini, buka kembali file sshd_config lalu
ubah pada parameter PasswordAuthentication menjadi no.

Restart kembali service SSH server Anda.


Setelah itu, coba Anda check dengan perintah nmap untuk melihat apakah service ssh
masih berjalan pada port 22.

# vim /etc/ssh/sshd_config

Jika Anda sudah tidak melihat lagi service SSH berjalan pada port 22, lakukan
pengujian untuk mengakses ke ssh server
tersebut. Untuk mengakses ssh server yang
sudah berjalan pada port 9922, Anda memerlukan option -p pada ssh client. Misal:

PasswordAuthentication no

Setelah diubah, jangan lupa untuk merestart kembali service SSH server Anda.
# /etc/init.d/ssh restart

Gambar 1. Disable akses ke user root melalui koneksi SSH.

www.infolinux.web.id

Langkah lain yang dapat digunakan untuk


mengamankan SSH server adalah dengan
menggunakan tools DenyHosts. DenyHosts merupakan script python yang berfungsi untuk menganalisis pesan log sshd,
untuk menentukan apakah terdapat hosts
yang mencoba untuk meng-hack ke dalam
sistem. DenyHosts juga dapat menentukan
user account mana yang akan menjadi target. Aplikasi ini juga dapat membuat jejak,
siapa saja yang sering mencoba masuk ke
dalam ssh server. Jika terdapat user yang
terus mencoba masuk ke dalam ssh server
tanpa hasil, maka DenyHosts akan secara
otomatis memasukkan user tersebut ke
dalam daftar file /etc/hosts.deny.

# vim /etc/ssh/sshd_config

Disable PasswordAuthentication

Setelah terbuka, edit pada bagian PasswordAuthentication.

Menggunakan DenyHosts

# nmap localhost

$ ssh -p 9922
supriyanto@192.168.2.1
(Note: Ketik dalam 1 baris syntax)

Sebelum menggunakan DenyHosts, Anda


harus menginstalasinya terlebih dahulu. Pada
situs DenyHosts, sudah tersedia beberapa paket DenyHosts yang dapat digunakan. Mulai
dari tarball, RPM, Deb, dan gentoo. Namun
pada langkah di bawah ini, kami hanya akan
menjelaskan installasi dari paket tarball DenyHosts. Untuk instalasi menggunakan paket binary DenyHosts, silakan merujuk pada
paket instalasi masing-masing distro.
Pertama, download terlebih dahulu file
DenyHosts-2.4b.tar.gz dari situs http://
www.denyhosts.sourceforge.net. Namun jika
Anda tidak terkoneksi ke Internet, kami
juga telah menyediakan paket tersebut
dalam DVD InfoLINUX edisi ini.
Sebelum menginstalasi DenyHosts, pastikan paket python dan python-dev sudah
terinstalasi dengan baik di sistem Anda.
# apt-get install python
python2.3-dev python2.3

Gambar 2. Menjalankan service SSH pada port lain.

INFOLINUX  06/2006

61

TUTORIAL SSH

Gambar 3. Daftar Host yang telah terblok dalam file hosts.deny.

Setelah selesai menginstalasi paket python dan python-dev, copy file DenyHosts2.4b.tar.gz ke direktori /tmp, lalu lakukan
proses ekstrak file tersebut.
# tar -xzvf DenyHosts-2.4b.tar.gz
# cd denyhost
# python setup.py install

Jika instalasi berjalan dengan baik, DenyHosts akan terinstalasi pada direktori
/usr/share/denyhosts.

Konfigurasi DenyHosts
Setelah DenyHosts terinstalasi dengan baik,
langkah berikutnya adalah mengonfigurasi
DenyHosts. Sekarang kita akan membuat
file /usr/share/denyhosts/denyhosts.cfg.
Untuk membuatnya, Anda cukup mengcopy-nya dari file konfigurasi /usr/share/
denyhosts/denyhosts.cfg-dist.

Gambar 4. Contoh Host yang tidak bisa mengakses SSH server setelah terblok.

#
# SuSE:
#SECURE_LOG = /var/log/messages
#
# Mac OS X (v10.4 or greater #
also refer to:
http://www.
denyhosts.net/faq.html#macos
#SECURE_LOG = /private/var/log/
asl.log
#
# Mac OS X (v10.3 or earlier):
#SECURE_LOG=/private/var/log/
system.log
..................................
..................................
# Most operating systems:
HOSTS_DENY = /etc/hosts.deny
..................................
..................................

WORK_DIR = /usr/share/denyhosts/
data
..................................
..................................
# Redhat/Fedora:
#LOCK_FILE = /var/lock/subsys/
denyhosts
#
# Debian
LOCK_FILE = /var/run/denyhosts.pid
#
# Misc
#LOCK_FILE = /tmp/denyhosts.lock
..................................
..................................

Untuk menjalankan DenyHosts sebagai


daemon, kita memerlukan daemon control
script /usr/share/denyhosts/daemon-con-

# cd /usr/share/denyhosts
# cp denyhosts.cfg-dist denyhosts.
cfg

Selanjutnya, kita perlu mengedit file denyhosts.cfg, sesuai dengan kondisi sistem
yang kita miliki. Sebagai contoh dalam artikel ini, kami mengubah beberapa parameter pada file denyhosts.cfg, pada bagian
berikut:
# vi /usr/share/denyhosts/
denyhosts.cfg
..................................
..................................
# Redhat or Fedora Core:
#SECURE_LOG = /var/log/secure
#
# Mandrake, FreeBSD or OpenBSD:
SECURE_LOG = /var/log/auth.log

62

06/2006  INFOLINUX

Gambar 5. Temukan berbagai macam pertanyaan mengenai DenyHosts di situsnya.

www.infolinux.web.id

TUTORIAL SSH
trol. Untuk membuat file tersebut, cukup
kita gunakan dari file sample script /usr/
share/denyhosts/daemon-control-dist.
# cd /usr/share/denyhosts
# cp daemon-control-dist daemoncontrol

Edit file daemon-control, dan yakinkan


Anda mengisikan konfigurasi yang benar
untuk parameter DENYHOSTS_BIN, DENYHOSTS_LOCK, dan DENYHOSTS_CFG.
Di sistem Debian yang digunakan dalam
artikel ini, setingan parameter yang diubah
pada file daemon-control tersebut adalah
sebagai berikut:
DENYHOSTS_BIN
= /usr/bin/
denyhosts.py
DENYHOSTS_LOCK = /var/run/
denyhosts.pid
DENYHOSTS_CFG
= /usr/share/
denyhosts/denyhosts.cfg

Selanjutnya, ubah hak akses file tersebut


agar bersifat executable.
# chown root daemon-control
# chmod 777 daemon-control

Berikutnya kita akan menciptakan symbolic links agar DenyHosts dapat berjalan
secara otomatis pada saat sistem di-restart.

Jika ada yang mencoba login ke SSH


server dengan kesalahan login, maka IP
address komputer tersebut akan dimasukkan ke dalam file /etc/hosts.deny seperti
berikut.
..................................
..................................
# DenyHosts: Sat Apr 29 09:11:18
2006 | sshd: 192.168.2.2
sshd: 192.168.2.2

Baris tersebut menunjukkan kalau komputer yang memiliki IP Address 192.168.2.2,


tidak dapat terkoneksi lagi ke SSH server
yang terdapat di komputer 192.168.2.1.
Untuk meng-enable-kan kembali komputer yang telah tercatat oleh DenyHosts
dalam file /etc/hosts.deny, Anda dapat
menspesifikasikan bagaimana dan kapan IP
address tersebut akan dihapus lagi dari file
/etc/hosts.deny, dengan melihat parameter
yang terdapat pada variabel PURGE_DENY
pada file /usr/share/denyhosts/denyhosts.
cfg.
Selanjutnya stop service denyhosts,
dan lakukan start service denyhosts kembali dengan tambahan option --purge untuk
membaca variabel PURGE_DENY, yang
baru saja diubah.

# /etc/init.d/denyhosts start -purge

Sebenarnya masih terdapat beberapa


cara lain yang dapat kita gunakan untuk
meningkatkan keamanan SSH server. Salah
satunya adalah membuat SSH Key antar
komputer. Artikel tentang ini dapat Anda
temukan pada url http://geekpit.blogspot.
com/2006/04/five-minutes-to-more-securessh.html.
Meningkatkan keamanan suatu sistem
sebenarnya merupakan proses yang berkepanjangan. Langkah yang kami jelaskan
ini, hanya sebagian kecil cara yang dapat
dilakukan untuk lebih meningkatkan keamanan sistem. Paling tidak, secara perlahan sistem yang kita miliki dapat lebih
terjaga keamanan datanya dari pihak yang
tidak berkepentingan. Melakukan proses
monitoring secara berkala terhadap file log,
merupakan cara efektif lainnya yang dapat
kita lakukan.
Sampai sekian dahulu artikel tentang
SSH server ini. Semoga dengan adanya
artikel ini, dapat membuka wawasan kita
dalam mengoptimalkan keamanan sistem.
Akhir kata, selamat mencoba!
Supriyanto [supriyanto@infolinux.co.id]

# cd /etc/init.d
# ln -s /usr/share/denyhosts/
daemon-control denyhosts
# update-rc.d denyhosts defaults

Terakhir, kita akan menjalankan servis


DenyHosts.
# /etc/init.d/denyhosts start

DenyHosts akan menghasilkan file logs


ke /var/log/auth.log. Anda dapat melihat
logs yang dihasilkan dengan menggunakan
perintah tail.
# tail -f /var/log/auth.log

Test dengan mencoba login ke server


SSH dengan menggunakan password yang
salah. Dan amati file auth.log pada saat
Anda mengisikan password yang salah.
Misal IP 192.168.2.2 mencoba melakukan
kesalahan login ke SSH server yang terdapat
pada komputer 192.168.2.1. Jika DenyHosts sudah berjalan dengan baik, maka IP
192.168.2.2 tersebut akan dimasukkan ke
dalam file /etc/hosts.deny.

www.infolinux.web.id

INFOLINUX  06/2006

63

TUTORIAL HARDWARE

Mendeteksi Hardware di Linux

utorial ini akan membahas langkah-langkah apa yang dapat dilakukan untuk
mendeteksi hardware di Linux. Terdapat tool-tool yang bisa memudahkan kita untuk
mengusahakan agar hardware kita bekerja dengan baik di Linux. Saat ini, Linux cukup
ramah terhadap berbagai hardware.

Linux sebenarnya merupakan sistem operasi yang plug and play. Untuk hardware yang
sudah dikenali Linux, kita bisa menancapkan hardware tersebut dan setelah modul
kernel yang bersesuaian dijalankan, maka
hardware tersebut segera bisa digunakan.
Tanpa ada prosedur yang merepotkan.
Memang, kalau kita harus jujur, Linux
belum mampu dalam mengenal semua
hardware yang ada di pasaran. Sebagian
besar produsen hardware memang belum
memaketkan driver-nya untuk sistem
operasi Linux. Developer kernel pun harus pontang-panting mengusahakan driver
perangkat tersebut. Memang tidak semua
produsen. Ada juga yang telah memaketkan
driver untuk Linux, atau beberapa perusahaan bahkan menyumbangkan dana agar
hardware-nya dapat bekerja di Linux.
Dari sisi distribusi Linux, berbagai distribusi telah menyediakan berbagai cara agar
hardware dapat digunakan semudah mungkin di Linux (secara otomatis). Namun, pendeteksian dan konfigurasi otomatis tidak
selalu dapat dijamin. Kadang bisa, kadang
tidak bisa.
Sebagai user, kita perlu mengetahui caracara mendeteksi dan mengonfigurasi hardware secara manual. Ada beberapa alasan:
 Kita mungkin tidak sempat mengikuti
perkembangan dukungan hardware di
Linux. Sebenarnya, bisa saja hardware
didukung, namun fitur tersebut oleh distribusi yang kita gunakan tidak dikompilasi ke dalam kernel/modul kernel.

64

06/2006  INFOLINUX

 Mungkin driver untuk perangkat kita


sudah tersedia, namun lisensinya tidak
memungkinkan untuk drivernya dimasukkan ke dalam kernel/distro.
 Selalu menyenangkan untuk bisa mengetahui langkah-langkah apa yang bisa
dilakukan agar hardware kita berhasil
untuk dikonfigurasi dan digunakan.
Tulisan ini akan membahas beberapa
cara yang bisa dilakukan oleh user untuk:
 Mengamati hardware apa yang dimiliki.
 Berkenalan lebih lanjut dengan modul
kernel.
 Menangani perangkat yang driver-nya
tersedia, namun tidak disertakan dalam
kernel/distro.
Semua pembahasan dilakukan pada
sistem Debian GNU/Linux 3.1, namun seharusnya bisa diterapkan dengan baik pada
distro-distro lainnya.

Dukungan kernel
Hardware didukung pada level kernel. Oleh
karena itu, dukungan pada kernel harus
diaktifkan terlebih dahulu agar hardware
tersebut bisa digunakan. Bentuk aktifasi
bisa dengan mengompilasi ke dalam kernel,
ataupun mengompilasi dalam bentuk modul
kernel. Cara yang kedua ini lebih disukai saat
ini karena lebih modular. Hanya dukungan
yang diperlukan saja yang diaktifkan.
Apabila kita tahu bahwa hardware tertentu telah didukung di kernel, namun ti-

dak dapat bekerja di sistem kita, maka apa


yang perlu kita lakukan adalah:
 Mengetahui nama apa yang diberikan oleh
kernel untuk hardware tersebut. Umumnya, namanya mirip-mirip dengan nama
hardware. Sebagai contoh, penulis menggunakan ethernet Realtek Semiconductor
RTL-8139/8139C/8139C+, maka penulis
harus mengetahui nama yang diberikan
oleh kernel. Sebagai contoh: 8139too.
 Mengetahui modul tersebut membutuhkan modul/fitur apa. Umumnya, modul/
fitur yang dibutuhkan adalah modul/
fitur generic untuk mengakses suatu
hardware. Sebagai contoh, untuk USB
device (misal: USB web cam), maka selain modul untuk device tersebut, maka
kernel harus mendukung USB terlebih
dahulu. Modul pada level ini biasanya
diaktifkan untuk distro yang baik.
 Memeriksa status aktifasi dukungan
hardware tersebut pada kernel. Terdapat
dua cara:
 Melongok ke dalam source code.
 Melihat konfigurasi fitur/modul
kernel (umumnya di direktori /boot
dengan nama config-*).
Setelah kita mengetahui status aktifasi dukungan hardware tersebut, kita bisa
melakukan beberapa hal tergantung pada
model aktifasinya:
 Apabila dukungan diaktifkan dalam bentuk modul, maka seharusnya kita tinggal
melakukan insmod/modprobe.

www.infolinux.web.id

TUTORIAL HARDWARE
 Apabila dukungan tidak diaktifkan sama
sekali, maka kita perlu mengkompilasi
kernel/modul kernel tersebut. Kompilasi kernel berada di luar cakupan tutorial
ini. Kompilasi modul kernel akan dibahas untuk driver yang belum dimasukkan pada kernel (lihat poin setelah ini).
 Apabila dukungan tidak dikompilasi dan
tidak tersedia pula pada level kernel,
maka barangkali driver tersebut memiliki lisensi yang tidak bisa diterima oleh
kernel ataupun distribusi sehingga tidak
dimasukkan. Kita akan membahasnya
kemudian, di bagian lain.

Melihat konfigurasi fitur kernel


Untuk melihat konfigurasi fitur kernel,
kita akan melihat file konfigurasi fitur yang
umumnya bernama config-* dan disimpan
dalam /boot. Kernel yang penulis gunakan
adalah 2.6.8-2-386, di mana konfigurasinya
disimpan pada /boot/config-2.6.8-2-386.
File tersebut cukup besar. Berikut ini
adalah 15 baris pertama file tersebut:
$ head -n 15 /boot/config-2.6.82-386
#
# Automatically generated make
config: dont edit
#
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_GENERIC_ISA_DMA=y
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
# CONFIG_CLEAN_COMPILE is not set
CONFIG_BROKEN=y
CONFIG_BROKEN_ON_SMP=y

Kita bisa memperhatikan informasi


tersebut:
 Apabila dikompilasi ke dalam kernel,
maka CONFIG_XXX akan bernilai y.
Sebagai contoh:
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_UID16=y

 Apabila dikompilasi sebagai modul,


maka CONFIG_XXX akan bernilai m. Sebagai contoh:
CONFIG_PCMCIA_PCNET=m

www.infolinux.web.id

CONFIG_PCMCIA_AXNET=m
CONFIG_ARCNET_COM20020_CS=m

 Apabila tidak diaktifkan sama sekali,


maka CONFIG_XXX akan dikomentari
dan bernilai is not set. Sebagai contoh:
# CONFIG_ADFS_FS_RW is not set
# CONFIG_ASFS_RW is not set
# CONFIG_BEFS_DEBUG is not set
# CONFIG_JFFS2_FS_NAND is not set
# CONFIG_JFFS2_COMPRESSION_
OPTIONS is not set
# CONFIG_JFFS2_RUBIN is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_UFS_FS_WRITE is not set
# CONFIG_SMB_NLS_DEFAULT is not
set

Bekerja dengan modul kernel


Modul kernel bisa disebut juga sebagai driver. Fisik file modul kernel adalah file dengan ekstensi .ko.
Modul kernel disimpan pada /lib/
modules/<versi_kernel>. Untuk mengetahui versi kernel, kita bisa mempergunakan
bantuan program uname. Sebagai contoh:
$ uname
Linux
$ uname -a
Linux nop 2.6.8-2-386 #1 Tue Aug 16
12:46:35 UTC 2005 i686 GNU/Linux
$ uname -r
2.6.8-2-386

Kita bisa langsung masuk ke direktori


modul kernel tersebut dengan perintah cd
berikut:

2006-03-15 11:13 build ->


/usr/src/kernel-headers-2.6.8-2-386
drwxr-xr-x
2 root root
80
2006-03-15 11:14 initrd
drwxr-xr-x 10 root root
240
2005-12-11 05:44 kernel
drwxr-xr-x
2 root root
144
2006-02-05 01:16 misc
-rw-r--r-1 root root 138720
2006-03-19 11:51 modules.alias
-rw-r--r-1 root root
69
2006-03-19 11:51 modules.ccwmap
-rw-r--r-1 root root 235586
2006-03-19 11:51 modules.dep
-rw-r--r-1 root root
517
2006-03-19 11:51 modules.ieee1394map
-rw-r--r-1 root root
1061
2006-03-19 11:51 modules.inputmap
-rw-r--r-1 root root 16427
2006-03-19 11:51 modules.isapnpmap
-rw-r--r-1 root root 131958
2006-03-19 11:51 modules.pcimap
-rw-r--r-1 root root 104717
2006-03-19 11:51 modules.symbols
-rw-r--r-1 root root 157116
2006-03-19 11:51 modules.usbmap
lrwxrwxrwx
1 root root
100
2006-03-15 11:13 source -> /home/
horms/tmp/debian-kernel-test/
kernel-image-2.6.8-i386/kernelimage-2.6.8-i386-2.6.8/install-386

Umumnya, kita akan masuk ke direktori


kernel, relatif dari direktori modul kernel
tersebut:
$ cd /lib/modules/`uname -r`/
kernel

$ cd /lib/modules/`uname -r`

$ pwd
/lib/modules/2.6.8-2-386/kernel

$ pwd
/lib/modules/2.6.8-2-386

Berikut ini adalah contoh direktori modul kernel/kernel milik penulis:

Berikut ini adalah contoh direktori modul kernel milik penulis:


$ ls -al /lib/modules/2.6.8-2-386/
total 793
drwxr-xr-x
6 root root
496
2006-03-19 11:51 .
drwxr-xr-x
4 root root
112
2005-12-23 13:52 ..
drwxr-xr-x
2 root root
80
2006-03-15 11:14 boot
lrwxrwxrwx
1 root root
35

$ ls -al /lib/modules/2.6.8-2-386/
kernel/
total 3
drwxr-xr-x 10 root root 240
2005-12-11 05:44 .
drwxr-xr-x
6 root root 496
2006-03-19 11:51 ..
drwxr-xr-x
3 root root
72
2005-12-11 05:44 arch
drwxr-xr-x
2 root root 568
2006-03-15 11:14 crypto
drwxr-xr-x 31 root root 760

INFOLINUX  06/2006

65

TUTORIAL HARDWARE
2005-12-11
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15
drwxr-xr-x
2005-12-11
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15

05:44 drivers
42 root root 1136
11:14 fs
3 root root 144
11:14 lib
30 root root 744
05:44 net
2 root root 144
11:14 security
11 root root 296
11:14 sound

Sebagian besar driver akan disimpan


pada direktori drivers, relatif terhadap direktori modul kernel/kernel. Kita akan masuk ke dalamnya.
$ cd /lib/modules/`uname -r`/
kernel/drivers
$ pwd
/lib/modules/2.6.8-2-386/kernel/
drivers

Berikut ini adalah contoh direktori modul kernel/kernel/drivers milik penulis:


$ ls -al /lib/modules/2.6.8-2-386/
kernel/drivers
total 7
drwxr-xr-x 31 root root 760
2005-12-11 05:44 .
drwxr-xr-x 10 root root 240
2005-12-11 05:44 ..
drwxr-xr-x
2 root root 288
2006-03-15 11:14 acpi
drwxr-xr-x
2 root root 456
2006-03-15 11:14 atm
drwxr-xr-x
2 root root
88
2006-03-15 11:14 base
drwxr-xr-x
3 root root 376
2006-03-15 11:14 block
drwxr-xr-x
2 root root 328
2006-03-15 11:14 bluetooth
drwxr-xr-x
2 root root 352
2006-03-15 11:14 cdrom
drwxr-xr-x 10 root root 1144
2006-03-15 11:14 char
drwxr-xr-x
2 root root 192
2006-03-15 11:14 cpufreq
drwxr-xr-x
2 root root
72
2006-03-15 11:14 firmware
drwxr-xr-x
5 root root 216
2006-03-15 11:14 i2c
drwxr-xr-x
4 root root 320
2006-03-15 11:14 ide
drwxr-xr-x
2 root root 344

66

06/2006  INFOLINUX

2006-03-15
drwxr-xr-x
2006-03-15
drwxr-xr-x
2005-12-11
drwxr-xr-x
2006-03-15
drwxr-xr-x
2005-12-11
drwxr-xr-x
2005-12-11
drwxr-xr-x
2005-12-11
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15
drwxr-xr-x
2005-12-11
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15
drwxr-xr-x
2005-12-11
drwxr-xr-x
2006-03-15
drwxr-xr-x
2006-03-15

11:14 ieee1394
9 root root 360
11:14 input
13 root root 312
05:44 isdn
2 root root 416
11:14 md
6 root root 144
05:44 media
4 root root
96
05:44 message
3 root root
72
05:44 misc
6 root root 472
11:14 mtd
16 root root 3024
11:14 net
2 root root 184
11:14 parport
3 root root
72
05:44 pci
2 root root 256
11:14 pcmcia
6 root root 2272
11:14 scsi
2 root root
80
11:14 serial
2 root root 136
11:14 telephony
13 root root 312
05:44 usb
9 root root 656
11:14 video
2 root root 136
11:14 w1

Di dalam direktori ini, terdapat banyak


direktori yang berisikan modul kernel. Sebagai contoh, direktori pcmcia.
$ cd /lib/modules/`uname -r`/
kernel/drivers/pcmcia
$ pwd
/lib/modules/2.6.8-2-386/kernel/
drivers/pcmcia
$ ls -al /lib/modules/2.6.8-2-386/
kernel/drivers/pcmcia
total 185
drwxr-xr-x
2 root root
256
2006-03-15 11:14 .
drwxr-xr-x 31 root root
760
2005-12-11 05:44 ..
-rw-r--r-1 root root 22146
2005-08-16 22:13 ds.ko

-rw-r--r-2005-08-16
-rw-r--r-2005-08-16
-rw-r--r-2005-08-16
-rw-r--r-2005-08-16
-rw-r--r-2005-08-16
-rw-r--r-2005-08-16

1 root root 10394


22:13 i82092.ko
1 root root 23681
22:13 i82365.ko
1 root root 69041
22:13 pcmcia_core.ko
1 root root 10166
22:13 pd6729.ko
1 root root 15278
22:13 tcic.ko
1 root root 24743
22:13 yenta_socket.ko

Berikut ini adalah beberapa tindakan yang


umum dilakukan dengan modul kernel:

Melihat modul yang telah dijalankan


Untuk melihat modul yang telah dijalankan, gunakanlah perintah lsmod. Berikut
ini adalah contohnya:
$ lsmod
Module
i830
ipv6
lp
ds
binfmt_misc
thermal
fan
button
processor
thermal
ac
battery
smbfs
parport_pc
parport
lp,parport_pc
floppy
...
...
...

Size
68388
229892
10408
17796
11272
12944
4236
6680
17584

Used by
5
8
0
4
1
0
0
0
1

5132
9740
61048
33348
37320

0
0
2
1
2

54992

Program ini sebenarnya membaca informasi modul yang dijalankan dari proc filesystem, tepatnya pada file /proc/modules.
Berikut ini adalah contoh isi file-nya:
$ head /proc/modules
i830 68388 5 - Live 0xeffaa000
ipv6 229892 8 - Live 0xeffd2000
lp 10408 0 - Live 0xeff83000
ds 17796 4 - Live 0xeff8a000
binfmt_misc 11272 1 - Live
0xeff7f000
thermal 12944 0 - Live 0xeff7a000

www.infolinux.web.id

TUTORIAL HARDWARE
fan 4236 0 - Live 0xeff3f000
button 6680 0 - Live 0xefe8f000
processor 17584 1 thermal, Live
0xeff43000
ac 5132 0 - Live 0xefe92000

Berikut ini adalah contoh menghentikan


modul kernel menggunakan program modprobe. Kita perlu menambahkan opsi -r.
# modprobe -r minix

Meng-update dependency modul


Menjalankan modul kernel
Untuk menjalankan modul kernel, program
insmod dan modprobe bisa digunakan. Insmod lebih sederhana dan pengguna disarankan untuk menggunakan modprobe.
Namun, kita tetap akan melihat contoh
penggunaan insmod.
# insmod /lib/modules/2.6.8-2-386/
kernel/fs/minix/minix.ko

Sebagai catatan, eksekusi insmod membutuhkan parameter berupa path lengkap


nama modul.
Modprobe lebih pintar. Kita tidak perlu
menggunakan path lengkap. Kita hanya perlu menyebutkan nama modulnya saja, tanpa
ekstensi .ko. Berikut ini adalah contohnya:
# modprobe minix

Apabila kita menyebutkan modul yang


tidak tersedia, maka pesan kesalahan akan
ditampilkan.
# modprobe notfound
FATAL: Module notfound not found.

Sebagai catatan, modprobe akan mempergunakan file modules.dep (yang tersimpan pada direktori modul kernel), yang
dihasilkan oleh program depmod (akan
dibahas kemudian).

Menghentikan modul kernel


Untuk menghentikan modul kernel, program rmmod dan modprobe bisa digunakan. Rmmod lebih sederhana dan pengguna
disarankan untuk menggunakan modprobe.
Namun, kita tetap akan melihat contoh
penggunaan rmmod.
# rmmod minix

Sebagai catatan, eksekusi insmod membutuhkan parameter berupa nama modul,


tanpa ekstensi .ko.
Apabila modul yang ingin dihentikan tidak sedang berjalan, maka pesan kesalahan
akan ditampilkan.
# rmmod minix
ERROR: Module minix does not exist
in /proc/modules

www.infolinux.web.id

Sebuah modul kernel A bisa menyediakan


simbol bagi modul kernel B untuk digunakan. Apabila modul B tersebut membutuhkan simbol yang diekspor oleh A, maka
modul B tersebut tergantung (depends) pada
modul A.
Model ketergantungan ini akan cukup
rumit untuk ditangani secara manual. Oleh
karena itu, sebuah file, modules.dep yang
terletak pada direktori modul kernel digunakan. File ini berisikan keterangan tentang
simbol apa yang diekspor oleh suatu modul,
serta simbol apa yang dibutuhkan oleh
modul tersebut. File ini akan digunakan
oleh program modprobe.
Berikut ini adalah contoh isi file modules.dep:
# head /lib/modules/2.6.8-2-386/
modules.dep
/lib/modules/2.6.8-2-386/
kernel/security/root_plug.
ko: /lib/modules/2.6.8-2-386/
kernel/security/commoncap.ko
/lib/modules/2.6.8-2-386/kernel/
drivers/usb/core/usbcore.ko
/lib/modules/2.6.8-2-386/
kernel/security/capability.ko:
/lib/modules/2.6.8-2-386/kernel/
security/commoncap.ko
/lib/modules/2.6.8-2-386/kernel/
security/commoncap.ko:
/lib/modules/2.6.8-2-386/kernel/
crypto/michael_mic.ko:
/lib/modules/2.6.8-2-386/
kernel/crypto/deflate.ko: /lib/
modules/2.6.8-2-386/kernel/lib/
zlib_deflate/zlib_deflate.ko
/lib/modules/2.6.8-2-386/kernel/
crypto/twofish.ko:
/lib/modules/2.6.8-2-386/kernel/
crypto/khazad.ko:
/lib/modules/2.6.8-2-386/kernel/
crypto/arc4.ko:
/lib/modules/2.6.8-2-386/
kernel/crypto/crc32c.ko: /lib/
modules/2.6.8-2-386/kernel/lib/
libcrc32c.ko
/lib/modules/2.6.8-2-386/kernel/
crypto/serpent.ko:

INFOLINUX  06/2006

67

TUTORIAL HARDWARE
Untuk membuat file ini, program depmod bisa dipergunakan. Berikut ini adalah
contoh penggunaan program depmod:
# depmod -a

Melihat modul kernel yang tersedia


Untuk melihat modul kernel yang tersedia,
gunakanlah program modprobe dengan
memberikan opsi -l. Kriteria nama modul
bisa pula diberikan (apabila tidak diberikan,
maka semua modul akan ditampilkan). Sebagai contoh:
# modprobe -l crypt*
/lib/modules/2.6.8-2-386/kernel/
crypto/crypto_null.ko
/lib/modules/2.6.8-2-386/kernel/
drivers/block/cryptoloop.ko

Mempergunakan program lspci


Seperti telah disebutkan pada awal tulisan,
untuk mengaktifkan suatu hardware secara
manual, kita perlu melihat terlebih dahulu
hardware yang kita miliki, mencari status
dukungan oleh kernel Linux, mencari nama
yang digunakan oleh kernel Linux, barulah
memanggil modul yang bersangkutan.
Untuk melihat hardware PCI yang kita
miliki, program lspci bisa dipergunakan.
Berikut ini adalah contoh keluaran lspci
pada komputer penulis:
# lspci
0000:00:00.0 Host bridge: Intel
Corp. 82852/855GM Host Bridge (rev
02)
0000:00:00.1 System peripheral:
Intel Corp. 855GM/GME GMCH Memory
I/O Control Registers (rev 02)
0000:00:00.3 System peripheral:
Intel Corp. 855GM/GME GMCH
Configuration Process Registers
(rev 02)
0000:00:02.0 VGA compatible
controller: Intel Corp.
82852/855GM Integrated Graphics
Device (rev 02)
0000:00:02.1 Display controller:
Intel Corp. 82852/855GM Integrated
Graphics Device (rev 02)
0000:00:1d.0 USB Controller: Intel
Corp. 82801DB/DBL/DBM (ICH4/ICH4L/ICH4-M) USB UHCI Controller #1
(rev 03)
0000:00:1d.1 USB Controller: Intel
Corp. 82801DB/DBL/DBM (ICH4/ICH4L/ICH4-M) USB UHCI Controller #2

68

06/2006  INFOLINUX

(rev 03)
0000:00:1d.2 USB Controller: Intel
Corp. 82801DB/DBL/DBM (ICH4/ICH4L/ICH4-M) USB UHCI Controller #3
(rev 03)
0000:00:1d.7 USB Controller: Intel
Corp. 82801DB/DBM (ICH4/ICH4-M)
USB 2.0 EHCI Controller (rev 03)
0000:00:1e.0 PCI bridge: Intel
Corp. 82801 PCI Bridge (rev 83)
0000:00:1f.0 ISA bridge: Intel
Corp. 82801DBM LPC Interface
Controller (rev 03)
0000:00:1f.1 IDE interface: Intel
Corp. 82801DBM (ICH4) Ultra ATA
Storage Controller (rev 03)
0000:00:1f.3 SMBus: Intel Corp.
82801DB/DBL/DBM (ICH4/ICH4-L/ICH4M) SMBus Controller (rev 03)
0000:00:1f.5 Multimedia audio
controller: Intel Corp. 82801DB/
DBL/DBM (ICH4/ICH4-L/ICH4-M) AC97
Audio Controller (rev 03)
0000:00:1f.6 Modem: Intel Corp.
82801DB/DBL/DBM (ICH4/ICH4-L/ICH4M) AC97 Modem Controller (rev 03)
0000:02:04.0 CardBus bridge:
Texas Instruments PCI1520 PC card
Cardbus Controller (rev 01)
0000:02:04.1 CardBus bridge:
Texas Instruments PCI1520 PC card
Cardbus Controller (rev 01)
0000:02:0a.0 Ethernet controller:
Realtek Semiconductor Co., Ltd.
RTL-8139/8139C/8139C+ (rev 10)

Mempergunakan program hwinfo


Program hwinfo adalah program pendeteksian
hardware komplit yang sangat menakjubkan.
Program ini harus dimiliki dan digunakan
bagi Anda yang sering bekerja dengan berbagai jenis hardware yang berbeda-beda.
Source program yang dibuat oleh developer SUSE ini dapat di-download di:
ftp://ftp.suse.com/pub/suse/i386/.
Untuk mendeteksi semua hardware, jalankanlah hwinfo tanpa parameter apapun:
# hwinfo

Harap diperhatikan bahwa output dari


perintah tersebut sangatlah panjang. Beberapa pengguna mungkin lebih senang dengan tampilan versi pendeknya. Gunakanlah
opsi short. Sebagai contoh:

Tabel 1. Jenis hardware yang didukung hwinfo.


Cdrom
Gfxcard
Mouse
Sound
Netcard
Scanner
Cpu
Pci
Bridge
Pppoe
Zip

Floppy
Framebuffer
Joystick
Isdn
Printer
Braille
Partition
Isapnp
Hub
Pcmcia
Dsl

Disk
Monitor
Keyboard
Modem
Tv
Sys
Usb-ctrl
Ide
Memory
Pcmcia-ctrl
All

Network
Camera
Chipcard
Storage-ctrl
Dvb
Bios
Usb
Scsi
Smp
Wlan
reallyall

# hwinfo --short
cpu:
Intel(R) Celeron(R) CPU
2.50GHz, 2500 MHz
keyboard:
/dev/input/event0
AT
Translated Set 2 keyboard
mouse:
/dev/input/mice
SynPS/2
Synaptics TouchPad
graphics card:
Acer Incorporated [ALI]
855 GM
Acer Incorporated [ALI]
855 GM
sound:
Acer Incorporated [ALI]
82801DB AC97 Audio Controller
storage:
Floppy disk controller
Acer Incorporated
[ALI] 82801DBM Ultra ATA Storage
Controller
network:
Acer Incorporated [ALI]
RTL-8139/8139C/8139C+
modem:
/dev/ttySL0
Acer
Incorporated [ALI] 82801DB AC97
Modem Controller
network interface:
eth0
Ethernet
network interface
lo
Loopback
network interface
sit0
Network
Interface
...
...
...

Hwinfo dapat mengenali hampir semua


hardware. Jenis hardware yang didukung
bisa dilihat pada tabel 1.

www.infolinux.web.id

TUTORIAL HARDWARE
Untuk mendeteksi hardware tertentu,
berikanlah opsi sesuai jenis hardware.
Sebagai contoh:
# hwinfo --netcard --short
network:
Acer Incorporated [ALI]
RTL-8139/8139C/8139C+
# hwinfo --modem --short
modem:
/dev/ttySL0
Acer
Incorporated [ALI] 82801DB AC97
Modem Controller

Bagaimana hwinfo dapat membantu


kita untuk mendeteksi hardware? Sebagai
contoh, kita akan mendeteksi modem yang
drivernya tidak disertakan ke dalam kernel:
# hwinfo --modem
24: PCI 1f.6: 10204 LinModem
[Created at pci.244]
Unique ID: ORVU.pXVXw2whwh3
SysFS ID: /devices/pci0000:00/
0000:00:1f.6
SysFS BusID: 0000:00:1f.6
Hardware Class: modem
Model: Acer Incorporated [ALI]
82801DB AC97 Modem Controller
Vendor: pci 0x8086 Intel
Corporation
Device: pci 0x24c6 82801DB
AC97 Modem Controller
SubVendor: pci 0x1025 Acer
Incorporated [ALI]
SubDevice: pci 0x0038
Revision: 0x03
Driver: Intel ICH Modem
Device File: /dev/ttySL0
Device Number: char 212:0
I/O Ports: 0x2400-0x24ff (rw)
I/O Ports: 0x2000-0x207f (rw)
IRQ: 10 (2 events)
Requires: smartlink-softmodem
Driver Info #0:
Driver Status: slamr is not
active
Driver Activation Cmd:
modprobe slamr
Config Status: cfg=new,
avail=yes, need=no, active=unknown

untuk Linux ke website produsennya


 Nama modul kernel, yang bisa dilihat
pada Driver Activation Cmd.

Kompilasi modul kernel


Modem yang penulis gunakan dapat digunakan di Linux karena produsennya membuat driver untuk Linux. Namun, di distro
yang penulis gunakan, driver itu tidak disertakan. Apa saja langkah-langkah yang
harus dilakukan agar modem tersebut bisa
digunakan?
1. Download arsip source code driver (contoh: slmodem-2.9.10.tar.gz).
2. Ekstract arsip source code dan masuk ke
direktori hasil ekstraksi:
$ gzip -dc slmodem-2.9.10.tar.gz
| tar xf $ cd slmodem-2.9.10

3. Lakukan kompilasi sesuai prosedur.


Pada saat kompilasi pada sebagian besar
distro yang menggunakan kernel 2.6,
user perlu menyediakan source code kernel yang terkonfigurasi dengan baik.
make

4. Lakukan instalasi sesuai prosedur.


make install

Tergantung pada driver-nya, sebagian


besar akan meng-copy-kan modul ke direktori modul kernel. Pada contoh modul kernel
yang penulis gunakan, proses instalasi akan:
 Meng-copy-kan modul kernel slamr dan
slusb ke direktori modul kernel (yang selanjutnya bisa dijalankan dengan modprobe).
 Meng-copy-kan program bantu (slmodemd) ke direktori /usr/sbin.
 Membuat device /dev/slamr0-3 (untuk
modem PCI) dan /dev/slusb0-3 (untuk
modem USB).
Sebagai catatan, cara kompilasi dan instalasi berbagai driver tentunya berbeda.
Selalulah membaca README yang datang
bersama driver.
Dengan bertambahnya produsen hardware yang menyediakan driver untuk Linux,
kita patut semakin bergembira. Terkadang,
produsen memang menggunakan lisensi
yang tidak bisa diterima oleh kernel ataupun distro sehingga tidak disertakan. Oleh
karena itu, apabila ada hardware yang tidak
didukung, tidak ada salahnya kita sedikit
berusaha mencari tahu. Siapa tahu drivernya tersedia. Selamat mencoba!
Noprianto [noprianto@infolinux.co.id]

Setidaknya, ada dua informasi yang bisa


kita dapatkan:
 Merk modem. Kita bisa mencari driver

www.infolinux.web.id

INFOLINUX  06/2006

69

TUTORIAL LIVE CD LINUX

Koleksi Live CD Linux dalam


satu CD/DVD

ebuah CD/DVD dapat berisi beberapa Live CD yang dapat dipilih saat booting.
Tutorial ini menunjukkan cara praktis menggabungkan beberapa Live CD ke dalam
satu CD/DVD dan mengedit konfigurasi boot loadernya. Langkah-langkah ini
disusun berdasarkan pengalaman penulis sebagai developer SLAMPP Live CD solusi
sederhana Linux untuk server rumah siap pakai.
Saat ini para pengguna Linux, baik pemula
maupun yang telah berpengalaman, paling
tidak pernah men-download atau mencoba
satu distro Linux yang dapat dijalankan dari
sebuah CD atau DVD. Teknologi Live CD
yang mendasarinya juga semakin hari semakin berkembang pesat. Satu hal yang dulunya
di luar bayangan kebanyakan orang, menjalankan sistem operasi Linux langsung dari CD
atau DVD, sekarang impian itu telah menjadi
kenyataan. Live CD Linux telah merambah
kehidupan manusia zaman sekarang.

Apa itu Live CD Linux?


Sebenarnya Live CD Linux adalah sistem
operasi linux yang disimpan di sebuah
bootable CD atau DVD yang kemudian
dapat dijalankan langsung dari CD atau
DVD drive, tanpa harus menginstalnya secara permanen di hard disk komputer. Pengguna cukup memasukkan Live CD tersebut
ke dalam CD atau DVD drive dan kemudian
dapat menjalankan sistem operasi Linux
tanpa harus mengubah satupun konfigurasi
komputernya. Dengan demikian, Live CD
memberikan kemudakan kepada pengguna
dalam mencoba sistem operasi atau distro
lain di samping sistem operasi utama yang
dimiliki.

Manfaat Live CD Linux


Kehadiran Live CD linux di tengah-tengah
kita memberikan banyak keuntungan, di
antaranya:

70

06/2006  INFOLINUX

1. Dapat mengoperasikan sistem operasi


Linux tanpa harus terlebih dahulu mempartisi hard disk dan menginstalnya.
Pengguna Windows tidak perlu khawatir
konfigurasi sistemnya terganggu dengan
kehadiran Linux di komputer yang sama.
2. Cara cepat menginstal Linux. Hampir
semua Live CD yang ada saat ini telah
mendukung instalasi secara permanent di
hard disk pengguna jika dikehendaki. Ini
akan memotong waktu dan menghemat
energi yang dikeluarkan untuk menginstal sistem operasi Linux secara normal.
3. Karena Live CD dijalankan langsung dari
CD atau DVD dan bekerja di RAM (Random Access Memory) komputer, jika terjadi sesuatu hal yang tidak diinginkan,
pengguna dapat dengan mudah me-restore sistem yang dipakai. Cukup restart
komputer dan sistem akan kembali ke
situasi semula.
4. Banyaknya varian Linux yang menggunakan Live CD memberikan kebebasan
kepada pengguna untuk memilih distro
yang sesuai dengan keperluan dan seleranya. Saat ini di hampir semua bidang/
fungsi tersedia Live CD yang diperuntukkan khusus untuk bidang tersebut.
Daftar lengkap Live CD yang dikelompokkan per bidang/fungsi dapat dilihat
di alamat http://frozentech.com/content/livecd.php.
5. Mobilitas dan fleksibilitas. Karena disimpan dalam CD atau DVD, sistem operasi

Linux dapat dibawa ke mana saja. Satu


solusi siap pakai yang dapat digunakan
dan menemani anda setiap saat.
6. Teknologi Live CD adalah teknologi
open source. Lisensi GNU Public License
(GNU/GPL) atau sejenisnya digunakan
sehingga setiap orang dapat menggunakan, memodifikasi dan mendistribusikannya secara bebas. Adanya kemudahan ini menyebabkan pengguna dapat
membuat Live CD baru atau memodifikasi Live CD yang sudah ada untuk
keperluan pribadi (remastering).
Cara dan metode membuat Live CD secara lengkap dapat dibaca di sini,
http://www.livecdlist.com/wiki/
index.php/LiveCD_Creation_
Resources

Koleksi Live CD Linux dalam satu


CD/DVD
Pernahkah anda berada dalam situasi di
mana anda harus membawa sejumlah Live
CD untuk mendukung pekerjaan yang dilakukan? Tentunya akan merepotkan, bukan? Alangkah baiknya jika semua Live CD
yang anda miliki dikumpulkan menjadi satu
sehingga anda tidak perlu lagi membawa tas
berisikan semua Live CD tersebut.
Syukurnya hal ini sudah dapat direalisasikan berkat teknik yang dikembangkan di
Nautopia.net (silakan lihat referensi untuk
link). Teknik ini akan membantu anda membuat sebuah DVD yang berisikan koleksi Live

www.infolinux.web.id

TUTORIAL LIVE CD LINUX


CD favorit anda. Selain menerangkan cara
kerja teknik Nautopia, sebuah skrip akan ditambahkan untuk membuat koleksi Live CD
di CD biasa (650-700 MB). Hal ini dilakukan
mengingat tidak semua orang memiliki DVD
writer di komputernya. Sehingga prinsip tak
ada rotan akar pun jadi menjadi pilihan tersendiri. Selanjutnya konsentrasi diberikan kepada
pembuatan koleksi Live CD di CD biasa. Informasi tentang Live CD dalam DVD secara rinci
dapat diperoleh di alamat berikut ini:
http://www.nautopia.net/archives/
es/linux_distribuciones/custom/
livecd_collection.php

Pada dasarnya teknik dan skrip Nautopia


ini terdiri atas tiga bagian penting, yaitu:
 Direktori /dvd/ sebagai tempat penyimpanan berkas image dari distro yang
akan dikoleksi.
 Direktori /dvd/boot/ untuk menempatkan semua berkas kernel dan initrd dari
masing-masing distro.
 Direktori /dvd/boot/grub/ sebagai tempat bootloader dan menu untuk masingmasing distro.
Karena koleksi CD atau DVD yang
dibuat menggunakan grub sebagai bootloader utama, maka untuk sebagian distro
yang menggunakan grub, kita hanya perlu
mengubah berkas grub distro tersebut. Sementara untuk distro yang menggunakan
isolinux atau yang lainnya sebagai bootloader, kita harus mengubah atau mengadaptasi berkas menu.lst setiap distro untuk bekerja dengan grub.
Tambahan lain yang diberikan dalam
artikel ini adalah penulis membatasi jumlah
distro Live CD Linux yang diikutsertakan
menjadi tiga distro saja, yakni Damn Small
Linux 2.3 (49 MB), Puppy Linux 1.0.8r1mozilla (62 MB) dan SLAX 5.1.0 (184 MB).
Tentunya anda dapat menambah sejumlah
distro lainnya sejauh CD atau DVD yang digunakan masih memiliki tempat untuk menampungnya. File-file ISO Live CD tersedia
di DVD majalah InfoLINUX, misalnya pada
edisi 4/2006 terdapat Puppy 1.0.8r1, Puppy-Multisession 1.0.8r1, DSL 2.2b, Gentoo
2006.0, dan SimplyMepis 3.4_3.

# wget http://www.nautopia.
net/estaticos/descargas/
customlivecd.zip

Kemudian di-unzip. Sebuah direktori


bernama customlivecd akan muncul di
bawah direktori tempat anda meng-unzip-nya.
2. Men-download ketiga distro yang akan
diikutsertakan dalam koleksi dan menverifikasi integritas masing-masing berkas iso.
a. Damn Small Linux 2.3:
# wget http://distro.ibiblio.
org/pub/linux/distributions/
damnsmall/current/dsl-2.3.iso

b. Puppy Linux 1.0.8r1-mozilla:


# wget ftp://ibiblio.org/
pub/linux/distributions/
puppylinux/puppy-1.0.8r1mozilla.iso

c. SLAX 5.1.0:
# wget http://merlin.fit.
vutbr.cz/mirrors/slax/SLAX5.0.x/slax-5.1.0.iso

3. Edit direktori customlivecd yang baru


saja di-unzip dan hilangkan sejumlah
direktori yang tidak diperlukan. Di sana
anda akan menemukan sebuah direktori bernama dvd di yang di dalamnya
terdapat tiga direktori: boot, floppy dan
ubcd. Direktori floppy dan ubcd dapat
dihilangkan, karena kita tidak akan

menggunakan kedua direktori ini. Lalu


bukalah direktori boot dan hilangkan
semua direktori terkecuali direktori
grub, puppy, slax dan dsl. Kemudian edit
direktori grub dan lakukanlah hal yang
sama. Jangan menghapus berkas-berkas
lain yang ada di direktori grub, cukup
sub-sub direktorinya saja.
4. Setelah itu, berkas-berkas iso distro yang
telah di-download tadi dibuka satu per
satu dan dipindahkan isinya ke dalam
direktori customlivecd.
a. Damn Small Linux 2.3
Kopi isi direktori /boot/isolinux/
ke /dvd/boot/dsl/. Kemudian kopi
direktori /KNOPPIX/ ke /dvd/ dan
ganti namanya dengan /DSL/.
b. Puppy Linux 1.0.8r1-mozilla
Kopi berkas vmlinuz dan image.
gz yang terdapat dalam iso ke /dvd/
boot/puppy/. Selanjutnya kopi berkas /usr_cram.fs ke /dvd/.
c. SLAX 5.1.0
Jika belum ada, maka buatlah sebuah
direktori baru /dvd/SLAX/ dan seterusnya memindahkan semua isi dari
iso ke dalam direktori /dvd/SLAX/.
5. Edit dengan menggunakan sebuah editor teks berkas /dvd/grub/grub.conf dan
hilangkanlah parameter-parameter yang
tidak diperlukan. Dalam hal ini hanya
parameter untuk tiga distro yang dipakai
saja yang dipertahankan.
6. Edit masing-masing berkas berikut ini:
/dvd/boot/grub/menu.lst, /dvd/boot/
grub/dsl/menu.lst,
/dvd/boot/grub/

Langkah-langkah
1. Men-download paket customlivecd asli
Nautopia.net dengan wget seperti ini:

www.infolinux.web.id

Gambar 1. Struktur direktori Live CD gabungan.

INFOLINUX  06/2006

71

TUTORIAL LIVE CD LINUX


11. Jika berkas iso tadi telah dibakar, saatnya sekarang untuk mencoba. Restart
komputer anda, pastikan komputer
dapat boot dari CD/DVD drive dan bila
semuanya berjalan dengan baik, maka
anda akan memperoleh tampilan menu
grub yang akan menuntun anda menjalankan masing-masing distro yang diikutsertakan sebelumnya. Selain dengan
cara membakar berkas iso ke CD kosong,
kita juga dapat menggunakan program
QEMU (http://fabrice.bellard.free.fr/
qemu/) yang akan mengemulasi jalannya
sebuah Live CD seperti di lingkungan
yang sebenarnya. Perintah sederhana
yang dapat digunakan berupa:
# qemu m 256 cdrom
/tmp/livecd.iso boot d user-net
Gambar 2. Direktori grub yang telah dimodifikasi.

puppy/menu.lst, /dvd/boot/grub/slax/
menu.lst dan sesuaikan dengan situasi di
atas. Berkas menu.lst ini yang akan digunakan grub untuk memanggil dan menjalankan distro-distro yang ada di CD.
7. Semua berkas di langkah 5 dan 6 harus
disimpan setelah diedit.
8. Sekarang kita sudah mendekati langkah
pembuatan berkas iso yang baru yang
berisikan semua distro di atas. Untuk itu
diperlukan sebuah skrip yang memanfaatkan aplikasi mkisofs yang terdapat
di hampir seluruh distro. Aplikasi ini biasanya terdapat di dalam paket cdrtools,
atau dapat juga diinstal sendiri. Bukalah
sebuah editor teks dan buat skrip seperti
di bawah ini:
#!/bin/bash
# Create bootable ISO from files
in curent directory.

mkisofs -o $1 -v -J -R -D -A
$CDLABEL -V $CDLABEL \
-no-emul-boot -boot-info-table
-boot-load-size 4 \
-b boot/grub/stage2_eltorito .

Simpan sebagai cd_iso dan jangan lupa


untuk menjadikannya executable.
# chmod +x cd_iso

Untuk memudahkan pengguna yang


masih menggunakan Windows, skrip
win_iso_cd.bat juga telah disediakan
dalam paket skrip Nautopia yang telah
dimodifikasi. (Silakan lihat referensi untuk link.)
9. Letakkanlah berkas cd_iso tadi di dalam
direktori dvd dan jalankan perintah berikut sambil memberikan lokasi di mana
berkas iso baru akan diletakkan.
# ./cd_iso /tmp/livecd.iso

CDLABEL=LiveCDCollection
if [ $1 = -o $1 =
--help -o $1 = -h ]; then
echo This script will create
bootable ISO from files in
curent directory.
echo Current directory must
be writable.
echo example: $0
/tmp/livecd.iso
exit
fi

72

06/2006  INFOLINUX

12. Selesai! Koleksi Live CD siap untuk dibawa ke mana-mana.

Kesimpulan
Mengkompilasi sebuah koleksi Live CD
tidaklah sesulit yang dibayangkan kebanyakan orang. Walaupun pada awalnya akan sedikit membingungkan, akan tetapi dengan
sedikit kesabaran dan ketelatenan, koleksi
Live CD yang diharapkan dapat diperoleh
juga. Hadirnya teknologi Live CD di kehidupan kita saat ini jelas telah memberikan
banyak dampak positif. Pilihan diberikan
kepada kita untuk memilih distro mana
yang sesuai dengan keperluan dan selera.
Setiap distro Live CD yang ada memiliki
kelebihan masing-masing, yang jika dijadikan satu akan mempermudah dan mendukung aktivitas kita sehari-hari. Itulah tujuan
akhir yang hendak dicapai dalam artikel ini.
Akhir kata, selamat mencoba dan selamat
datang di era mobilitas Live CD!
Kemas Yunus Antonius [kyantonius@kyantonius.com]

Skrip kemudian akan membuat sebuah


berkas iso baru yang bernama livecd.
iso.
10. Langkah selanjutnya adalah membakar
(burning) berkas livecd.iso ke sebuah CD
kosong (CD-R/RW). Anda dapat melakukannya dengan menggunakan program
pembakar CD/DVD yang anda miliki baik
di Linux maupun di Windows. Untuk
Linux, penulis menyarankan menggunakan BashBurn yang dapat diperoleh di
alamat http://bashburn.sourceforge.net/,
karena sederhana dan mudah digunakan.

Gambar 3. Tampilan proses booting Live CD dengan grub.

www.infolinux.web.id

TUTORIAL SELINUX

Mengamankan Linux
dengan SELinux

emua UNIX standar yang memenuhi POSIX (termasuk juga Linux) hanya mendukung
pembatasan akses berdasarkan user id dan group. Ternyata pembatasan akses
berdasarkan user dan group ini sering dirasa tidak cukup. Untuk itulah para hacker
mengembangkan SELinux.

SELinux (Security Enhanced Linux) merupakan sebuah extension untuk sistem


operasi Linux yang digunakan untuk
memberikan batasan hak yang lebih teliti
dibandingkan dengan Linux standar. Dengan kemampuannya itu, SELinux dapat
digunakan untuk melindungi server Anda
dari hampir semua exploit yang ada dan
akan ada. Sayangnya, kemampuan SELinux yang hebat ini juga disertai kerumitan dalam pemakaiannya. Artikel berseri
ini akan membeberkan bagaimana menggunakan SELinux dengan efektif untuk
mengamankan server dan workstation
Anda, mulai dari pengenalan SELinux di
bagian ini, sampai konfigurasi tingkat lanjut di bagian selanjutnya.
Semua UNIX standar yang memenuhi
POSIX (termasuk juga Linux) hanya mendukung pembatasan akses berdasarkan
user id dan group. Seperti yang telah dialami oleh banyak orang, ternyata pembatasan akses berdasarkan user dan group
ini sering dirasa tidak cukup. Sebuah program selalu berjalan dengan hak user tertentu, dan hak tersebut tidak bisa dibatasi
menjadi lebih kecil dari hak user. Jika saya
menjalankan sebuah program (yang tidak
setuid), maka program itu akan memiliki
hak yang saya miliki, artinya program itu
bisa saja membaca file saya, mengirimkan
file saya ke Internet, dan bahkan menghapus file saya.
Masalah pembatasan hak ini paling
sering ditemui dalam program yang berja-

74

06/2006  INFOLINUX

lan sebagai root (setuid root). Aneka macam


program perlu berjalan sebagai root, yang
memiliki hak untuk melakukan apapun
dalam sistem. Umumnya program-program
tersebut hanya membutuhkan hak untuk
mendengarkan di port tertentu (bind dan
listen), perlu mengakses device tertentu,
dan perlu mengakses file tertentu saja, namun karena batasan hanya bisa diberikan
di level user dan group, maka pembatasan
hak tersebut tidak bisa dilakukan.
Program yang berjalan sebagai root
akan bermasalah ketika program tersebut
ternyata memiliki security bug. Jika ada
yang dapat mengeksploitasi program yang
berjalan sebagai root, maka pihak yang
melakukan eksploitasi dapat memiliki hak
root yang maha kuasa dalam suatu sistem
UNIX. Andaikan kita dapat membatasi
bahwa program ternyata hanya membutuhkan akses ke file tertentu, maka jika
program dieksploitasi, tidak akan mempengaruhi keseluruhan sistem.

Hati-hati dengan Keamanan yang


terlalu tinggi
SELinux mampu membatasi hak akses
banyak hal di sistem, dan kesalahan setting
SELinux dapat menyebabkan programprogram menjadi tidak berjalan, bahkan
mungkin Anda tidak bisa login dan tidak
bisa mengubah file konfigurasi (meskipun
menjadi root ). Secara singkat SELinux bisa
mengacaukan seluruh sistem Anda. Untuk
mengembalikan sistem ke dalam keadaan

normal, Anda mungkin perlu reboot Linux


dengan opsi untuk mematikan SELinux
(inipun kadang masih menimbulkan masalah ketika Anda mengaktifkan kembali
SELinux).
Agar Anda tidak tersesat dan frustrasi
mencoba-coba konfigurasi SELinux, maka
pemahaman konsep SELinux diperlukan
sebelum langsung mencoba-coba. Cara memahami SELinux dengan coba-coba juga
berbahaya dari segi keamanan karena tanpa pemahaman yang benar sebagian besar
orang membuat solusi dengan mematikan
SELinux sama sekali, atau memberikan hak
super (hak melakukan apa saja) ke sebuah
program yang akhirnya membuka lubang
keamanan potensial.
Berdasarkan penjelasan di atas, jangan
berasumsi bahwa SELinux itu sulit dipakai.
SELinux relatif mudah digunakan, hanya
saja tanpa pemahaman yang jelas, sering
sekali orang melakukan kesalahan setting
yang mengacaukan sistem dan bingung
bagaimana memperbaikinya.

Kemampuan dan Keterbatasan


SELinux
SELinux bukanlah obat untuk segalanya.
SELinux hanya mampu membatasi hak
suatu user atau program untuk melakukan
sesuatu. SELinux bisa mencegah agar aneka daemon yang ada di server Anda agar
tidak bisa dieksploitasi (atau setidaknya
eksploitasi hanya akan sangat terbatas).
Dengan SELinux, Anda dapat dengan be-

www.infolinux.web.id

TUTORIAL SELINUX
bas memilih server daemon apapun (misalnya Sendmail yang terkenal kurang aman,
namun menurut saya sangat fleksibel) dan
membatasi akses daemon itu agar tidak
menimbulkan masalah security.
Ada beberapa hal yang tidak bisa diatasi
oleh SELinux, misalnya SELinux tidak
mencegah modifikasi data yang memang
diijinkan program, misalnya dalam kasus
SQL Injection yang mengubah data. SQL
Injection merupakan bug yang memungkinkan seseorang memodifikasi statement
SQL dan mengubah isi basis data. Perubahan isi basis data tidak bisa dicegah oleh
SELinux, tapi SELinux mampu mencegah
SQL Injection yang berusaha mengeksekusi program lain atau menulis ke file lain
(misalnya instruksi dump database).
SELinux tidak menangani enkripsi. Jadi
jika Anda memiliki data penting, SELinux
tidak mencegah data Anda diakses orang
lain. Bagi Anda pengguna laptop, menggunakan filesystem dengan enkripsi sangat
disarankan.

Memakai distro dengan SELinux


Menginstal SELinux pada sistem yang
sudah ada memang dapat dilakukan, tapi
untuk belajar, saya menyarankan Anda
menggunakan distribusi Linux yang sudah memakai SELinux. Jika Anda tidak
memakai distribusi dengan SELinux, maka
langkah yang harus dilakukan cukup banyak (dan cukup rawan salah), yang meliputi:
1. Kompilasi kernel untuk mendukung
SELinux.
2. Instalasi tools SELinux.
3. Instalasi policy SELinux.
4. Pelabelan file dan direktori untuk SELinux.
5. Jika memakai distribusi Linux versi
lama, Anda juga perlu mengupgrade
banyak program sistem (seperti program login, ps, ls, mkdir, dan lain-lain)
agar mendukung SELinux.
6. Jika Anda menggunakan filesystem selain ext2, ext3, xfs, dan reiserfs, Anda
juga perlu mengubah filesystem Anda
menjadi salah satu yang telah disebutkan sebelumnya (disarankan Anda
menggunakan ext3).
Hampir semua distribusi Linux terbaru
sudah memakai SELinux, dan mungkin

www.infolinux.web.id

Anda tidak menyadari hal tersebut (hal itu


merupakan hal yang baik, karena SELinux
diharapkan transparan bagi user). Beberapa distribusi Linux terkemuka yang sudah
menggunakan SELinux adalah sebagai
berikut:
 Fedora Core - Mulai Fedora Core 2
 RHEL (Redhat Enterprise Linux) - dari
versi 4
 Debian - tersedia sebagai paket tambahan
 Gentoo - tersedia sebagai paket tambahan
 Ubuntu - tersedia sebagai paket tambahan
 SuSe - ada di versi 9.x dan SLES 9
Di akhir seri artikel ini, ketika semua
konsep SELinux sudah dikuasai, saya akan
kembali ke langkah instalasi SELinux.
Untuk saat ini, jika Anda ingin belajar SELinux, saya menyarankan agar Anda memakai salah satu distribusi terbaru yang
sudah memakai SELinux. Jika hal tersebut
tidak memungkinkan, Anda bisa mendownload LiveCD Hardened Gentoo yang
memungkinkan Anda mencoba SELinux
tanpa melakukan instalasi.

Konsep dasar
Secara teknis dikatakan UNIX standar
mendukung discretionary access control
(DAC), yang artinya pembatasan hak akses ada pada pemilik objek, sedangkan
SELinux mendukung mandatory access con-

trol (MAC) yang artinya batasan hak akses


ditetapkan oleh sistem.
Untuk memberikan batasan hak akses
pada Unix standar, administrator hanya
perlu berpikir mengenai user dan group
(oleh sistem, setiap user diidentifikasi
dengan sebuah user id, dan setiap group
diidentifikasi dengan sebuah group id).
Setiap proses berjalan menggunakan hak
user tertentu, dan setiap file memiliki
pemilik(user) dan group. Setiap user memiliki hak untuk melakukan apapun pada
file miliknya, demikian juga proses yang
berjalan dengan hak user tertentu boleh
melakukan apapun terhadap file yang dimiliki oleh user.
Setiap user pasti tergabung dalam satu
atau lebih group. Dalam satu saat user hanya boleh berada dalam satu group. Ketika
login, secara default user masuk dalam sebuah group tertentu dan user dapat berpindah group dengan perintah newgrp. Group
umumnya digunakan untuk mengatur hak
akses file untuk satu kelompok tertentu
(misalnya bagian keuangan dengan bagian
pemasaran).
Pada SELinux pembatasan akses ini
menjadi lebih rumit karena pembagian hak
akses sekarang tidak hanya dibagi menjadi
user atau group. Ketika Anda dulu belajar
mengenai hak akses di Linux, tentunya
Anda belajar konsep user, user id, group,
group id, dan lain-lain. Nah, sekarang untuk dapat memahami pembatasan hak akses pada SELinux, Anda perlu memahami

Website SELinux.

INFOLINUX  06/2006

75

TUTORIAL SELINUX
konsep-konsep baru yang meliputi konsep
subjek, predikat, objek, konsep security context, konsep objek transien dan persisten,
serta terakhir konsep keputusan akses (access decission).

Subjek, predikat, dan objek


Ini bukan pelajaran bahasa Indonesia,
tapi SELinux menggunakan konsep subjek
(yang melakukan aksi), predikat (aksi), dan
objek (yang dikenai aksi) untuk melakukan pembatasan akses. Di dalam pelajaran
bahasa Indonesia, subjek melakukan aksi
pada objek, misalnya Ani (subjek) membaca
(predikat) buku (objek). Hal yang sama
juga berlaku di SELinux: subjek melakukan
sesuatu terhadap objek.
Subjek dalam SELinux adalah berupa
proses (program yang berjalan) atau user,
tapi karena user hanya bisa melakukan
suatu hal melalui sebuah program, maka
bisa dikatakan bahwa subjek adalah selalu
sebuah proses.
Predikat atau aksi adalah hal yang dapat
dilakukan oleh sebuah proses, dan predikat ini bergantung pada objek (tentunya
kalimat Ani membaca donat tidak masuk
akal, karena predikat membaca tidak bisa
diaplikasikan terhadap donat).
Objek adalah hal yang dapat diakses
oleh subjek yang meliputi banyak hal,
antara lain: filesystem, file, proses, jaringan, dan lain-lain. Contoh predikat yang
berlaku untuk file adalah membuat file,
menghapus file, dan menambah isi file
sedangkan contoh predikat yang berlaku
untuk jaringan adalah menerima data dan
mengirimkan data.
Sebuah policy (kebijakan) adalah satu
himpunan aturan mengenai apa yang boleh dilakukan suatu subjek terhadap suatu
objek. Contoh: Ani bisa memakan donat,
tetapi belum tentu diijinkan oleh ibunya
(mungkin saja itu untuk tamu). Sebuah
predikat menyatakan apa yang bisa dilakukan pada objek, sedangkan kebijakan
menyatakan apakah hal tersebut boleh/diijinkan untuk dilakukan.

Security context
Sebenarnya kita bisa saja membuat sebuah
aturan mendetail untuk setiap user dan
program yang ada di sistem, tapi tentunya
hal tersebut tidak efisien karena akan memakan waktu lama untuk mendefinisikan

76

06/2006  INFOLINUX

satu per satu hak akses yang mungkin ada,


dan jika ada perubahan maka hal tersebut
perlu diulang lagi.
Untuk memudahkan pembuatan policy,
setiap subjek dan objek memiliki security
attribute yang terdiri atas tiga hal, yaitu:
 User
User menyatakan user account yang berhubungan dengan objek atau subjek.
Dalam hal objek (misalnya file), maka
identitas user ini adalah identitas pemilik objek, sedangkan dalam hal subjek/proses, maka identitas ini adalah
process user id (bisa tidak sama dengan
yang menjalankan proses jika ada bit
setuid). Sebuah identitas user diberi
suffix _u atau tidak diberi suffix sama
sekali, misalnya root_u, atau root.
 Role
Role menyatakan peran user atau objek.
Pada SELinux setiap user bisa memiliki
beberapa peran dan beberapa user boleh memiliki peran yang sama. Kita bisa
mengeset agar seorang karyawan yang
berperan sebagai auditor bisa membaca
semua file, tapi tidak bisa mengubah file
apapun, sedangkan user dengan peran
akuntan bisa membaca dan menulis file
yang diizinkan untuk peran akuntan
tapi tidak bisa mengakses file lain. Sebuah role diberi nama dengan suffix _r,
misalnya auditor_r.
 Type
Type disebut juga dengan domain
membagi subjek dan objek yang berhubungan menjadi sebuah kelompok/
domain. Contoh: program DNS dan
file-file konfigurasi DNS dapat dimasukkan dalam satu domain. Sebuah
tipe diberi nama dengan suffix _t, misalnya sysadmn_t.
Ketiga attribut tersebut membentuk
suatu konteks yang disebut sebagai security
context. Security context ini disimpan di
sebuah tabel, dan masing-masing diidentifikasi dengan sebuah security identifier
(SID). Setiap SID berhubungan dengan satu
security context, sehingga kadang sebagian
orang menyebut SID untuk menyatakan
suatu security context.
Setiap objek dan subjek pasti memiliki
ketiga attribut tersebut, namun seperti
yang telah dijelaskan, role biasanya hanya
berlaku hanya untuk user, dan tidak untuk

objek, agar konsisten maka untuk objek


yang tidak memiliki role diberikan dummy
role object_r.
Untuk melihat attribut seorang user,
gunakan id -Z
[yohanes@koala64 ~]$ id -Z
user_u:system_r:unconfined_t

Untuk melihat attribut sebuah file,


Anda bisa menggunakan opsi -Z, -context,
atau -lcontext. Mungkin sebagian dari
Anda akan terkejut bahwa ls memiliki opsi
ini, tapi opsi ini memang khusus diberikan
untuk mendukung SELinux.
[yohanes@koala64 ~]$ ls -context
/var/www
drwxr-xr-x root root system_u:
object_r:httpd_sys_script_exec_t
cgi-bin
drwxr-xr-x root root system_u:
object_r:httpd_sys_content_t error
drwxr-xr-x root root system_u:
object_r:httpd_sys_content_t html
drwxr-xr-x root root system_u:
object_r:httpd_sys_content_t icons
drwxr-xr-x root root system_u:
object_r:httpd_sys_content_t
manual
drwxr-xr-x root root system_u:
object_r:httpd_sys_content_t mrtg
drwxr-xr-x root root system_u:
object_r:httpd_sys_content_t nutcgi-bin
drwxr-xr-x webalize root system_u:
object_r:httpd_sys_content_t usage
drwxr-xr-x root root system_u:
object_r:httpd_sys_content_t
wordtrans

Tampilan perintah ls -contex /var/


www menunjukkan bahwa konteks untuk
direktori cgi-bin berbeda dengan direktori
lain karena direktori ini memang khusus
untuk menampung file CGI. Perbedaan ini
tidak akan dibahas sekarang, namun dapat
dilihat bahwa setiap file atau direktori
dapat memiliki konteks yang berbeda.
Lalu bagaimana caranya melihat konteks sebuah proses? Perhatikan hasil perintah ps berikut ini:
[yohanes@koala64 ~]$ ps -e -Z|
grep -i httpd
system_u:system_r:httpd_t 2476 ?
00:00:00 httpd
system_u:system_r:httpd_t 2528 ?

www.infolinux.web.id

TUTORIAL SELINUX
00:00:00 httpd
system_u:system_r:httpd_t
00:00:00 httpd
system_u:system_r:httpd_t
00:00:00 httpd
system_u:system_r:httpd_t
00:00:00 httpd
system_u:system_r:httpd_t
00:00:00 httpd
system_u:system_r:httpd_t
00:00:00 httpd
system_u:system_r:httpd_t
00:00:00 httpd
system_u:system_r:httpd_t
00:00:00 httpd

2529 ?
2530 ?
2531 ?
2532 ?
2533 ?

Keputusan akses
2534 ?
2535 ?

Tapi, bagaimana sebenarnya relasi antara kedua konteks tersebut? Apakah suatu
proses dengan konteks tertentu pasti boleh
mengakses file dengan konteks yang sama?
Hubungan tersebut diatur dalam file konfigurasi SELinux. Misalnya, isi sebagian file
policy.conf di Fedora Core 4 adalah sebagai
berikut:
allow httpd_t httpd_sys_content_t:
dir { read getattr lock search
ioctl };
allow httpd_t httpd_sys_content_t:
file { read getattr lock ioctl };
allow httpd_t httpd_sys_content_t:
lnk_file { getattr read };

Hal itu menyatakan bahwa proses yang


berjalan yang memiliki konteks httpd_t
boleh membaca (read), mendapatkan attribut (getattr), mengunci (lock), mencari
(search), dan melakukan ioctl terhadap
direktori yang memiliki konteks httpd_
sys_content_t. Proses juga diperbolehkan
membaca, mendapatkan attribut, mengunci, serta mendapatkan ioctl terhadap
file biasa. Untuk file link, proses hanya diizinkan mendapatkan attribut dan membaca.
Sebelum masuk lebih dalam mengenai konfigurasi SELinux, saya masih perlu
menjelaskan mengenai beberapa konsep
lain berikut ini.

Objek transien dan persisten


Objek transien adalah objek yang hanya
ada sementara (misalnya proses), sedangkan objek persisten adalah objek yang bisa
terus ada bahkan ketika sistem di-restart
(misalnya file). Untuk objek transien, ker-

www.infolinux.web.id

nel menyimpan SID di dalam tabel kernel


di memori, sedangkan untuk objek persisten maka informasi tersebut perlu disimpan di media penyimpanan (disk). Saat
ini filesystem yang mendukung penyimpanan SID di media penyimpanan adalah
ext2, ext3, reiserfs, dan xfs (tapi butuh
opsi khusus ketika menciptakan filesystem xfs).

Keputusan akses (access decision) yang


dibuat oleh SELinux terdiri atas dua hal,
yaitu keputusan akses dan keputusan transisi. Keputusan akses menentukan apakah
sebuah subjek dibolehkan melakukan
suatu aksi, sedangkan keputusan transisi
menentukan type untuk objek baru (sebuah proses bisa melahirkan proses baru,
atau membuat sebuah file baru).
Access decision dibuat menggunakan
suatu access vector pada suatu objek. Setiap
jenis objek (kelas objek) memiliki semacam
tabel bit yang menyatakan suatu aksi dan
apakah aksi dibolehkan atau tidak.
Contoh: untuk kelas file beberapa aksi
yang mungkin adalah write, read, append,
dan execute, untuk jaringan beberapa aksi
yang mungkin adalah: menerima data dan
mengirim data. Setiap aksi akan diasosiasikan dengan beberapa informasi mengenai
aksi. Ada tiga bit yang mungkin untuk setiap aksi, yaitu:
 allow
Izinkan aksi.
 auditallow
Audit aksi (ciptakan log untuk aksi), ini
harus dibarengi dengan allow, jika tidak
maka bit ini tidak berguna.
 dontaudit
Tolak aksi, tapi jangan audit.
Secara default jika semua bit tidak diset, maka akses tidak diizinkan, dan akan
diaudit (dilog). Untuk lebih jelasnya lihat
tabel dalam contoh ini:
1. Akses write tidak diizinkan dan akan
diaudit (aksi ini akan dituliskan di log),
karena semua bit kosong.
2. Akses read diizinkan dan tidak akan diaudit.
3. Akses append diizinkan, tapi akan diaudit.
4. Aksi execute tidak diizinkan, tapi tidak
diaudit.

Keputusan transisi
Keputusan transisi di Unix cukup mudah,
yaitu semua proses akan selalu melahirkan
proses yang memiliki hak sesuai dengan
dirinya (kecuali jika proses tersebut berasal dari file setuid), sedangkan semua file
yang diciptakan akan memiliki user dan
group sama dengan hak proses. Keputusan transisi di SELinux sedikit lebih rumit
dari itu.
Secara default pada SELinux, proses
yang baru akan memiliki konteks yang
sama dengan proses lama, kecuali file
konfigurasi SELinux menyatakan bahwa
transisi domain harus terjadi. Jika file konfigurasi menyatakan bahwa transisi harus
terjadi, maka proses yang baru akan memiliki domain yang berbeda dengan parent.
Pada penciptaan file, secara default
konteks file sama dengan konteks direktori (dengan attribut user sesuai dengan user
yang menciptakannya), namun hal inipun
dapat diubah dengan menggunakan file
konfigurasi SELinux.

DAC vs MAC
Linux memakai DAC, lalu bagaimana pengaturan akses setelah MAC ditambahkan? Apakah tidak akan bentrok? Jawabannya adalah tidak, karena ada aturan
untuk konflik MAC dan DAC. Aturan yang
dipakai sangat sederhana, yaitu: Jika DAC
tidak mengizinkan aksi, maka MAC tidak
akan diperiksa, tapi jika DAC mengizinkan
aksi, maka MAC akan diperiksa. Jika MAC
mengijinkan aksi, maka aksi dilakukan,
dan jika tidak maka aksi tidak diizinkan.

Ringkasan
Secara sederhana, dalam SELinux user dan
group digantikan oleh sebuah security context, dan bit-bit (read, write, execute, dan
lain-lain) yang tadinya ada untuk mengatur akses file sekarang menjadi access vector yang dituliskan dalam bentuk teks di
file konfigurasi. Tapi tentunya penyederhanaan itu sangat berlebihan, karena tadinya
pembatasan akses di Unix hanya terbatas
untuk file, sedangkan pembatasan SELinux
bisa sampai ke jaringan dan proses.
Pada bagian selanjutnya saya akan
membahas beberapa tools dasar SELinux
serta bagaimana cara mengonfigurasi SELinux.
Yohanes Nugroho [yohanes@gmail.com]

INFOLINUX  06/2006

77

Anda mungkin juga menyukai