Beralih ke jail berdasarkan nama

  

Mari pelajari cara menjalankan perintah di dalam jail dengan merujuk pada nama jail, bukan nomor jail.

Misalkan Anda telah menyiapkan dua jail, yaitu “mail” dan “www”. Yang pertama untuk menjalankan server email Anda, sedangkan yang kedua untuk menjalankan server web Anda dalam lingkungan jail yang aman. Setiap jail memiliki parameter tersendiri seperti nama, nama host, alamat IP, direktori root, dan sebagainya:

jailserver# grep jail /etc/rc.conf
jail_enable="YES"
jail_list="mail www"
jail_mail_name="mail"
jail_mail_hostname="mail.mydomain"
jail_mail_ip="192.168.0.11"
jail_mail_rootdir="/usr/jail/mail"
jail_mail_devfs_enable="YES"
jail_www_name="www"
jail_www_hostname="www.mydomain"
jail_www_ip="192.168.0.12"
jail_www_rootdir="/usr/jail/www"
jail_www_devfs_enable="YES"
jailserver#

Jail-jail tersebut dimulai secara otomatis saat sistem dinyalakan. Jika Anda baru saja mengonfigurasi jail-jail tersebut dan ingin menjalankannya segera tanpa perlu me-reboot:

jailserver# service jail start
Configuring jails:.
Starting jails: mail.mydomain www.mydomain.
jailserver# jls
   JID  IP Address   Hostname         Path
     1  192.168.0.11 mail.mydomain    /usr/jail/mail
     2  192.168.0.12 www.mydomain     /usr/jail/www
jailserver#

Sekarang kedua jail tersebut sedang berjalan, dengan ID jail 1 dan 2 yang telah ditetapkan. Nomor-nomor tersebut ditetapkan secara otomatis. Untuk masuk ke dalam sebuah jail, cukup jalankan shell di dalamnya:

jailserver# jexec 1 /bin/csh
mail# sysctl security.jail.jailed
security.jail.jailed: 1
mail# exit
jailserver#

Apa yang terjadi jika Anda perlu me-restart jail-jail tersebut dan ingin masuk kembali ke salah satunya?

jailserver# service jail restart
Stopping jails: mail.mydomain www.mydomain.
Configuring jails:.
Starting jails: mail.mydomain www.mydomaiâ– n.
jailserver# jls
   JID  IP Address   Hostname         Path
     3  192.168.0.11 mail.mydomain    /usr/jail/mail
     4  192.168.0.12 www.mydomain     /usr/jail/www
jailserver# jexec 1 /bin/csh
jexec: jail_attach(1): Invalid argument
jailserver#

Saya suka riwayat shell dan sering menggunakannya. Namun, sayangnya, setelah jail di-restart, JID-nya tidak sama seperti sebelumnya. Mari kita coba dengan nama.

jailserver# jexec mail /bin/csh
jexec: jail "mail" not found
jailserver#

Mengapa jail tersebut tidak ditemukan? jexec(8) menyatakan

Utilitas jexec menjalankan perintah di dalam jail yang diidentifikasi berdasarkan JID atau namanya.

dan kita sudah mengaturnya di rc.conf tetapi masih tidak berfungsi. Alasannya adalah, kita mengatur nama tersebut untuk skrip startup. jexec tidak mengenali nama tersebut. Di jail(8) terdapat opsi -n di mana Anda dapat mengatur nama jail. Itulah yang dicari oleh jexec. Jadi, kita perlu mengatur /etc/rc.conf seperti ini:

jailserver# grep jail /etc/rc.conf
jail_enable="YES"
jail_list="mail www"
jail_mail_name="mail"
jail_mail_flags="-n mail"
jail_mail_hostname="mail.mydomain"
jail_mail_ip="192.168.0.11"
jail_mail_rootdir="/usr/jail/mail"
jail_mail_devfs_enable="YES"
jail_www_name="www"
jail_www_flags="-n www"
jail_www_hostname="www.mydomain"
jail_www_ip="192.168.0.12"
jail_www_rootdir="/usr/jail/www"
jail_www_devfs_enable="YES"
jailserver#

Mari kita mulai ulang jail tersebut dan lihat apakah sekarang sudah berfungsi dengan benar sesuai keinginan kita:

jailserver# service jail restart
Stopping jails: mail.mydomain www.mydomain.
Configuring jails:.
Starting jails: mail.mydomain www.mydomain.
jailserver# jls
   JID  IP Address   Hostname         Path
     5  192.168.0.11 mail.mydomain    /usr/jail/mail
     6  192.168.0.12 www.mydomain     /usr/jail/www
jailserver# jexec mail /bin/csh
mail# exit
jailserver#

Oke, sekarang kita dapat menggunakan nama jail yang akan tetap konstan tanpa perlu mencari jid terlebih dahulu.

Catatan akhir: Hal ini telah diuji pada FreeBSD 8.2. Perintah jail(8) menyebutkan bahwa opsi -n sudah tidak direkomendasikan lagi dan pengaturan nama melalui parameter seharusnya setara. Oleh karena itu, saya memperkirakan opsi tersebut akan dihapus pada rilis utama berikutnya dan parameter nama harus digunakan. Sayangnya, saya belum berhasil mengonfigurasi parameter nama tersebut, sehingga saya hanya menunjukkan metode ini.