04 April 2007

Limit Storage dan Resource Di FreeBSD

Untuk membatasi user di lingkungan UNIX dibagi 2 bagian diataranya:
1. Pembatasan quota hardisk/storage file sistem.
2. Pembatasan resource memory, CPU, access dsb.

Untuk pembatasan quota hardisk/storage file sistem bisa kita lakukan sbb:
Recompile kernel anda dengan menyertakan option
options QUOTA
Aktifkan quota startup lewat /etc/rc.conf dengan menambahkan:
enable_quotas="YES"
Aktifkan quota juga lewat /etc/fstab untuk file sistem:
budsz:~/public_html$ df -h
Filesystem    Size   Used  Avail Capacity  Mounted on
/dev/ad0s1a   295M    47M   225M    17%    /
/dev/ad0s1g   2.9G   190M   2.5G     7%    /home
/dev/ad0s1e   4.3G   3.1G   851M    79%    /usr
/dev/ad0s1f   386M    65M   290M    18%    /var
procfs        4.0K   4.0K     0B   100%    /proc
Sekarang kita akan mengaktifkan quota untuk /home saja, lazimnya spt hostingan untuk meng-quota real/virtual user. Untuk mengaktifkannya bisa kita sunting file /etc/fstab:
# Device        Mountpoint  FStype  Options                     Dump    Pass#
/dev/ad0s1g     /home       ufs     rw                          2       2
menjadi:
/dev/ad0s1g     /home       ufs     rw,userquota,groupquota     2       2
Dengan option userquota,groupquota kita bisa mengatur masing2 quota berdasarkan user dan group. Untuk meng-quota user/group bisa kita gunakan perintah edquota(8) misalnya:
# edquota -u nama_user
# edquota -g nama_group
Sample output-nya sbb:
# edquota -u budsz
# edquota -u test
Quotas for user budsz:
/home/budsz: kbytes in use: 65, limits (soft = 50, hard = 75)
             inodes in use: 7, limits (soft = 0, hard = 0)
Jika semuanya benar maka di dalam direktori /home akan terbentuk dua file yaitu quota.user dan quota.group. Untuk 50 satuanya adalah `kilobytes' dan `jumlah block', 0 (nol) berarti unlimit. Untuk "soft" adalah batas tidak mutlak quota yg diperbolehkan, untuk "hard" adalah batas mutlak yang diperbolehkan, artinya jika kita ngeset quota "soft" 50 kbytes dan "hard" 75 kbytes, kita masih diberi kelonggaran sebesar 75 kbytes - 50 kbytes = 25 kbytes, jika "hard" 75 kbytes sudah tercapai maka tidak ada maaf lagi :-), biasanya setelah "soft" tercapai sistem akan memberikan warning. Hal ini sama juga dengan satuan inodes.

Dengan satuan kbytes saya pikir sudah cukup, jadi inodes cukup diisi 0 (nol) saja baik soft/hard-nya.

Untuk menampilkan laporan quota yg ada pada sistem bisa menggunakan perintah repquota(8).

Untuk pembatasan penggunaan resource CPU, memory, akses dsb kita bisa menggunakan fasilitas yang sudah disediakan via /etc/login.conf. Jika kita perhatikan file /etc/login.conf ada beberapa option yg bisa kita pelajari terlebih dahulu.
# cat /etc/login.conf
default:\
       :passwd_format=md5:\
       :copyright=/etc/COPYRIGHT:\
       :welcome=/etc/motd:\
       :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\
       :path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin ~/bin:\
       :nologin=/var/run/nologin:\
       :cputime=unlimited:\
       :datasize=unlimited:\
       :stacksize=unlimited:\
       :memorylocked=unlimited:\
       :memoryuse=unlimited:\
       :filesize=unlimited:\
       :coredumpsize=unlimited:\
       :openfiles=unlimited:\
       :maxproc=unlimited:\
       :sbsize=unlimited:\
       :vmemoryuse=unlimited:\
       :priority=0:\
       :ignoretime@:\
       :umask=022:
Diatas adalah contoh isi dari file /etc/login.conf, aturan penulisan dipisahkan dengan "tanda kutip dua" untuk masing2 keyword dan isinya, selanjutnya backslash (\) digunakan meneruskan perintah sesudahnya, hal ini ditujukan untuk memperpendek penulisan konfigurasi melebar ke kanan. Saya akan menjelaskan beberapa keyword diatas bedasarkan bahasa saya sendiri :-).

default adalah login class yang digunakan untuk assign aturan selanjutnya. Untuk login class ini bebas anda tentukan sendiri asalkan nanti match dengan login kelas yang ada tentukan di file /etc/master.passwd. default spt arti dari kata ini merupakan standar login class yang digunakan oleh sistem.

passwd_format adalah tipe encrypt password yang dipilih untuk login user.

welcome adalah ucapan selamat datang dari sistem kepada user yg telah berhasil login, standart yang dipake adalah /etc/motd.

setenv adalah setting variable yg digunakan di lingkungan user, dalam hal ini path direktori email, mode FTP yg digunakan dsb.

path adalah mengarahkan letak dari file-file binary yg bisa diexecute oleh user.

nologin digunakan untuk sistem yg tidak memerlukan login shell biasanya untuk user yg ngehandle aplikasi daemon.

cputime adalah jumlah waktu maksimum CPU yg dikonsumsi oleh proses user.

maxproc adalah jumlah maksimal proses user yg diijinkan oleh sistem.

Untuk keterangan lainnya bisa anda baca manual pagenya di login.conf(5) dan beberapa referensi handbook di https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/security-resourcelimits.html#resource-limits.

Anda bisa memambahkan beberapa login class di /etc/login.conf sesuai dengan yang anda butuhkan. Tetapi untuk default class jangan sekali-kali anda hapus karena itu akan diperlukan untuk user sistem yg ada secara default. Salah satu kasus jika anda create user baru, dan beberapa login class untuk keperluan system (daemon, dialer dsb). Untuk itu silahkan anda tambahkan dengan format sbb:
login_class:\
           :foo_1:\
           :foo_2:\
           :foo_3:\
           :end_of_foo:
Contoh lain misalnya saya ingin mengijinkan user budsz untuk running proses baik foreground/background sebanyak 10 proses saja. Maka bisa implementasikan sbb:
budszproc:\    
         :maxproc=10:\
         :tc=default:
Kita buat login class budszproc di /etc/login.conf dan membatasi proses maksimum 10 (maxproc) proses saja dan tc adalah keyword yg digunakan untuk forward option2 lainnya ke login class default dengan kata lain macproc menggunakan yg ada di login class budszproc dan option lainnya menggunakan option yg ada di login class default. Jangan lupa nge-build ulang /etc/login.conf.db karena secara default sistem tidak akan membaca /etc/login.conf tetapi /etc/login.conf.db.

Setelah kita mendefinisikan login class selanjutnya kita mengedit /etc/master.passwd, saya merekomendasikan menggunakan chpass(1):
# chpass budsz
Login: budsz
Password: $1$FjFYsW2C$vaOT8pWHHCyEpgtXccld/1
Uid [#]: 1000
Gid [# or name]: 100
Change [month day year]:
Expire [month day year]:
Class: budszproc
Home directory: /home/budsz
Shell: /bin/sh
Full Name: Budi Yanto
Office Location:
Office Phone:
Home Phone:
Other information:
Tinggal tambahkan login class yg sudah kita definisikan di field Class:. Kalo mau edit sendiri /etc/master.passwd juga boleh2 aja deh. Misalnya begini:
# grep budsz /etc/master.passwd
budsz:$1$FjFYsW2C$vaOT8pWHHCyEpgtXccld/1:1000:100: :0:0:Budi Yanto:/home/budsz:/bin/sh
Nah tinggal tambah login classnya di field ke 5, terus kita build /etc/master.passwd via pwd_mkdb(8)
# pwd_mkdb /etc/master.passwd

Tidak ada komentar: