Istilah penjara chroot pertama kali digunakan pada tahun 1992, dalam sebuah artikel oleh peneliti keamanan terkemuka, Bill Cheswick, (yang menarik jika Anda menyukai hal semacam itu, Anda dapat menemukan artikelnya di sini). Penjara Chroot mulai muncul pada tahun 2003, dengan aplikasi seperti IRC dan FTP. Pada tahun 2005, Sun memperkenalkan teknologi "Containers" yang disebut Zones, yang merupakan pendahulu dari konsep namespaces , yang merupakan teknologi inti yang digunakan dengan container.
Dasar-dasar Chroot
Chroot memungkinkan administrator untuk mengontrol akses ke layanan atau sistem file sambil mengontrol eksposur ke lingkungan server yang mendasarinya. Dua contoh umum yang mungkin Anda temui adalah selama urutan boot dan "shell darurat" di sistem Red Hat/CentOS/Fedora, dan di Secure FTP (SFTP).
Perintahnya terlihat seperti ini:
chroot <newroot> [[command][arguments]]
Mirip dengan sudo
perintah, chroot
perintah mengubah lingkungan dari perintah berikut. Dengan kata lain, itu akan mengubah Anda menjadi newroot
direktori, dan juga menjadikan direktori tersebut sebagai direktori "berfungsi". command
kemudian dijalankan di lokasi itu, yang berguna untuk hal-hal seperti menyelamatkan sistem yang tidak mau boot.
Tidak seperti sudo
, Anda akan berada "di" direktori tersebut. Praktik ini, sekali lagi, berguna jika Anda melakukan booting dari media eksternal tetapi perlu mengakses sistem file atau perintah "lokal" untuk melakukan pekerjaan.
Penggunaan umum lainnya dari chroot
adalah untuk membatasi layanan atau pengguna dengan menggunakan wrapper untuk menyembunyikan sisa sistem file, oleh karena itu membatasi pandangan pengguna jarak jauh terhadap data pengguna lain. Implementasi populer menggunakan pendekatan SFTP ini.
Contoh
Sebelum mulai mengerjakan contoh ini, Anda harus memastikan bahwa Anda memiliki cadangan. Dalam hal ini, cadangkan /etc/ssh/sshd_config
file karena Anda akan membuat perubahan pada file tersebut secara khusus:
[root@showme1 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Untuk saat ini, Anda hanya akan membatasi pengguna SFTP ke direktori beranda mereka di server. Persyaratan ini berarti Anda harus menambahkan pengguna dan memasukkannya ke dalam grup:
[root@showme1 ~]# useradd -g sftpusers -s /sbin/nologin -p nick nick
Perhatikan bahwa melakukan ini akan menetapkan nick
akun tanpa shell login. Teknik ini praktis dan praktik keamanan yang baik:Jika dia hanya menggunakan SFTP, dia seharusnya tidak memiliki hak login. Saya akan membahas menyediakan shell untuk pengguna jarak jauh di artikel berikutnya.
Sekarang, Anda perlu memberi tahu ssh
service apa yang harus dilakukan ketika pengguna SFTP login. Buka /etc/ssh/sshd_config
file dan tambahkan berikut ini di akhir:
Subsystem sftp internal-sftp
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
Anda harus menambahkan setelan ini sebagai kumpulan entri yang terpisah, dan Anda menggunakan Match
sintaks untuk menunjukkan bahwa bagian ini hanya berlaku untuk pengguna dalam grup ini. Jika Anda membuat perubahan pada entri yang ada, perubahan tersebut akan berlaku untuk semua pengguna SSH, yang dapat merusak akses jarak jauh.
Baris konfigurasi dipecah sebagai berikut:
ForceCommand
membuatssh
pilih fasilitas bawaannya untuk menyediakan layanan SFTP (yang dapat Anda kontrol secara mandiri).ChrootDirectory
memberitahusshd
tempat untuk membatasi pengguna.Subsystem sftp internal-sftp
memberitahusshd
untuk memuatsftp
internal layanan dan membuatnya tersedia.
Anda mungkin perlu memastikan bahwa Subsystem
. ini belum ditentukan dengan mengomentari baris ini sebelumnya di file konfigurasi:
# override default of no subsystems
# Subsystem sftp /usr/libexec/openssh/sftp-server
Setelah Anda membuat perubahan dan memeriksa ejaannya, lanjutkan dan simpan perubahannya. Kemudian, mulai ulang sshd
:
[root@showme1 ~]# systemctl restart sshd
Uji pengguna baru:
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> ls
accounting ansible fred jason kenny lisa
nick
sftp> pwd
Remote working directory: /
sftp> exit
Ups, tunggu sebentar:Sepertinya Anda dapat melihat semua direktori pengguna lain juga. Namun, Anda tidak dapat membuka direktori tersebut:
sftp> cd fred
sftp> ls
remote readdir("/fred"): Permission denied
Anda dapat mengarahkan pengguna chroot ke direktori home mereka sendiri dengan mengubah ChrootDirectory
baris di sshd_config
file seperti ini:
ChrootDirectory /
Perubahan cepat ini membuat Nick seolah-olah berada di direktori home-nya sendiri, dan dia tidak akan dapat melihat file pengguna lain:
sftp> pwd
Remote working directory: /home/nick
sftp>
sftp> exit
[skipworthy@milo ~]$ touch test.txt
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> put test.txt
Uploading test.txt to /home/nick/test.txt
test.txt 100% 0 0.0KB/s 00:00
sftp> ls
test.txt
sftp>
Kemana perginya? Lihat ini:
[root@showme1 ~]# ls /home/nick
test.txt
Perhatikan bahwa chroot jail
adalah tidak dianggap sebagai pembatasan keamanan yang memadai dengan sendirinya. Meskipun mencegah pengguna keluar dari direktori terbatas, ada beberapa cara untuk mengatasi hal ini (gagasan umum dirujuk dalam chroot(2)
halaman manual, yang harus Anda lihat jika Anda mempertimbangkan untuk menggunakan trik ini dalam konteks produksi atau bisnis yang kritis.)
Menutup (untuk saat ini)
Jadi, Anda dapat melihat bahwa chroot
bisa menjadi alat yang cukup berguna. Di bagian 2, saya akan melihat lebih jauh dalam menetapkan direktori khusus untuk pengguna, dan menyediakan lingkungan shell untuk pengguna jarak jauh tanpa memaparkan server lainnya.
Baru mengenal container? Unduh Containers Primer dan pelajari dasar-dasar container Linux.