Memulai dengan SELinux
Pengantar SELinux
Security Enhanced Linux (SELinux) menyediakan lapisan tambahan untuk keamanan sistem. SELinux secara fundamental menjawab pertanyaan: Apakah <subjek> boleh melakukan <aksi> terhadap <objek>?, misalnya: Apakah server web boleh mengakses berkas di direktori home pengguna?
Kebijakan akses standar yang didasarkan pada izin pengguna, grup, dan lainnya — yang dikenal sebagai Discretionary Access Control (DAC) — tidak memungkinkan administrator sistem untuk membuat kebijakan keamanan yang menyeluruh dan sangat terperinci, seperti membatasi aplikasi tertentu hanya untuk melihat berkas log, sambil mengizinkan aplikasi lain untuk menambahkan data baru ke berkas log tersebut.
SELinux menerapkan Mandatory Access Control (MAC). Setiap proses dan sumber daya sistem memiliki label keamanan khusus yang disebut konteks SELinux. Konteks SELinux, terkadang disebut juga label SELinux, adalah pengenal yang mengabstraksi detail tingkat sistem dan berfokus pada properti keamanan entitas tersebut. Pendekatan ini tidak hanya menyediakan cara yang konsisten untuk merujuk objek dalam kebijakan SELinux, tetapi juga menghilangkan ambiguitas yang dapat muncul dari metode identifikasi lain; misalnya, sebuah berkas dapat memiliki beberapa path yang valid dalam sistem yang menggunakan bind mount.
Kebijakan SELinux menggunakan konteks ini dalam serangkaian aturan yang menentukan bagaimana proses dapat berinteraksi satu sama lain serta dengan berbagai sumber daya sistem. Secara default, kebijakan tidak mengizinkan interaksi apa pun kecuali terdapat aturan yang secara eksplisit memberikan izin akses.
|
Penting untuk diingat bahwa aturan kebijakan SELinux diperiksa setelah aturan DAC. Jika aturan DAC menolak akses terlebih dahulu, aturan kebijakan SELinux tidak digunakan. Ini berarti tidak ada penolakan SELinux yang akan dicatat jika aturan DAC tradisional sudah terlebih dahulu mencegah akses tersebut. |
Konteks SELinux memiliki beberapa bidang: pengguna, peran, tipe, dan level keamanan. Informasi tipe SELinux adalah yang paling penting dalam kebijakan SELinux, karena aturan kebijakan yang paling umum digunakan untuk menentukan interaksi yang diizinkan antara proses dan sumber daya sistem biasanya berbasis tipe SELinux, bukan seluruh konteksnya. Tipe SELinux biasanya diakhiri dengan _t. Contohnya, tipe untuk proses server web adalah httpd_t. Tipe konteks untuk berkas dan direktori yang biasanya ditemukan di /var/www/html/ adalah httpd_sys_content_t. Tipe konteks untuk berkas dan direktori di /tmp dan /var/tmp/ adalah tmp_t. Tipe konteks untuk port server web adalah http_port_t.
Sebagai contoh, ada aturan kebijakan yang mengizinkan Apache (proses server web yang berjalan sebagai httpd_t) untuk mengakses berkas dan direktori dengan konteks yang biasanya ditemukan di /var/www/html/ dan direktori server web lainnya (httpd_sys_content_t). Tidak ada aturan yang mengizinkan akses ke berkas yang biasanya ditemukan di /tmp dan /var/tmp/, sehingga akses tidak diizinkan. Dengan SELinux, bahkan jika Apache diretas dan skrip berbahaya mendapatkan akses, skrip tersebut tetap tidak dapat mengakses direktori /tmp.
httpd_t untuk mengakses direktori /var/www/html/ dan menolak akses proses tersebut ke direktori /data/mysql/ karena tidak ada aturan izin untuk tipe konteks httpd_t dan mysqld_db_t. Sebaliknya, proses MariaDB yang berjalan sebagai mysqld_t dapat mengakses direktori /data/mysql/, dan SELinux juga secara benar menolak proses dengan tipe mysqld_t untuk mengakses direktori /var/www/html/ yang diberi label httpd_sys_content_t.Sumber daya tambahan
Untuk memahami konsep dasar SELinux lebih lanjut, lihat dokumentasi berikut:
Manfaat menjalankan SELinux
SELinux memberikan manfaat sebagai berikut:
-
Semua proses dan berkas memiliki label. Aturan kebijakan SELinux mendefinisikan bagaimana proses berinteraksi dengan berkas dan satu sama lain. Akses hanya diizinkan jika terdapat aturan kebijakan SELinux yang secara khusus memperbolehkannya.
-
Kontrol akses yang sangat terperinci. Melampaui izin tradisional UNIX yang ditentukan oleh pengguna dan berbasis pada ID pengguna dan grup Linux, keputusan akses SELinux ditentukan berdasarkan semua informasi yang tersedia — seperti pengguna SELinux, peran, tipe, dan, jika ada, level keamanan.
-
Kebijakan SELinux didefinisikan secara administratif dan diterapkan di seluruh sistem.
-
Mitigasi yang lebih baik terhadap serangan peningkatan hak akses. Proses dijalankan dalam domainnya masing-masing dan karena itu terpisah satu sama lain. Aturan kebijakan SELinux menentukan bagaimana proses dapat mengakses berkas dan proses lainnya. Jika suatu proses dikompromikan, penyerang hanya memiliki akses ke fungsi normal dari proses tersebut dan ke berkas yang memang dikonfigurasi agar dapat diakses oleh proses itu. Sebagai contoh, jika Apache HTTP Server diretas, penyerang tidak dapat menggunakan proses tersebut untuk membaca berkas di direktori home pengguna, kecuali ada aturan kebijakan SELinux tertentu yang secara eksplisit diizinkan atau dikonfigurasi untuk membuka akses tersebut.
-
SELinux dapat digunakan untuk menegakkan kerahasiaan dan integritas data, serta melindungi proses dari masukan yang tidak tepercaya.
Namun, SELinux bukan merupakan:
-
perangkat lunak antivirus,
-
pengganti kata sandi, firewall, atau sistem keamanan lainnya,
-
solusi keamanan serba ada.
SELinux dirancang untuk meningkatkan solusi keamanan yang sudah ada, bukan menggantikannya. Bahkan saat menjalankan SELinux, penting untuk tetap mengikuti praktik keamanan yang baik, seperti menjaga perangkat lunak tetap diperbarui, menggunakan kata sandi yang sulit ditebak, atau tetap menggunakan firewall.
Contoh penggunaan SELinux
Contoh-contoh berikut menunjukkan bagaimana SELinux meningkatkan keamanan:
-
Aksi default adalah menolak. Jika tidak ada aturan kebijakan SELinux yang mengizinkan akses, seperti dalam kasus proses yang ingin membuka file, maka akses tersebut akan ditolak.
-
SELinux dapat membatasi pengguna Linux. Terdapat beberapa jenis pengguna SELinux terbatas dalam kebijakan SELinux. Pengguna Linux dapat dipetakan ke pengguna SELinux terbatas untuk memanfaatkan aturan dan mekanisme keamanan yang diterapkan. Misalnya, memetakan pengguna Linux ke pengguna SELinux
user_umembuat pengguna tersebut tidak dapat menjalankan (kecuali dikonfigurasi berbeda) aplikasi set user ID (setuid), sepertisudodansu, serta mencegah mereka menjalankan berkas dan aplikasi dari direktori home mereka. Jika dikonfigurasi, hal ini mencegah pengguna menjalankan berkas berbahaya dari direktori home mereka. -
Pemisahan proses dan data yang lebih kuat. Proses dijalankan dalam domainnya sendiri, sehingga mencegah proses mengakses berkas yang digunakan oleh proses lain, serta mencegah akses antar proses. Misalnya, ketika SELinux dijalankan, kecuali jika dikonfigurasi berbeda, penyerang tidak dapat mengompromikan server Samba dan kemudian menggunakannya untuk membaca atau menulis berkas yang digunakan oleh proses lain seperti basis data MariaDB.
-
SELinux membantu mengurangi kerusakan akibat kesalahan konfigurasi. Server Domain Name System (DNS) sering mereplikasi informasi satu sama lain melalui metode yang dikenal sebagai zone transfer. Penyerang dapat memanfaatkan mekanisme ini untuk memperbarui server DNS dengan informasi palsu. Saat menjalankan Berkeley Internet Name Domain (BIND) sebagai server DNS di Fedora, bahkan jika administrator lupa membatasi server mana yang dapat melakukan zone transfer, kebijakan default SELinux mencegah berkas zona [1] diperbarui menggunakan zone transfer, baik oleh daemon BIND
nameditu sendiri maupun oleh proses lain. -
Lihat artikel NetworkWorld.com, A seatbelt for server software: SELinux blocks real-world exploits[2], untuk informasi latar belakang tentang SELinux dan berbagai eksploitasi nyata yang telah berhasil diblokir oleh SELinux.
Arsitektur SELinux
SELinux adalah Linux Security Module (LSM) yang terintegrasi ke dalam kernel Linux. Subsistem SELinux di kernel berjalan berdasarkan kebijakan keamanan yang dikontrol oleh administrator dan dimuat saat boot. Semua operasi akses pada tingkat kernel yang relevan dengan keamanan dicegat oleh SELinux dan diperiksa sesuai dengan konteks kebijakan keamanan yang dimuat. Jika kebijakan tersebut mengizinkan operasi, proses akan berlanjut. Jika tidak, operasi diblokir dan proses menerima pesan kesalahan.
Keputusan SELinux, seperti mengizinkan atau menolak akses, disimpan dalam cache. Cache ini dikenal sebagai Access Vector Cache (AVC). Dengan menggunakan keputusan yang tersimpan dalam cache, kebutuhan untuk memeriksa ulang aturan kebijakan SELinux menjadi lebih sedikit, sehingga meningkatkan kinerja sistem. Ingat bahwa aturan kebijakan SELinux tidak berpengaruh jika aturan DAC terlebih dahulu menolak akses.
Status dan mode SELinux
SELinux dapat dijalankan dalam salah satu dari tiga mode: disabled, permissive, atau enforcing.
Mode disabled sangat tidak disarankan; dalam mode ini sistem tidak hanya berhenti menegakkan kebijakan SELinux, tetapi juga tidak memberi label pada objek persisten seperti file, sehingga menyulitkan pengaktifan kembali SELinux di masa mendatang.
Dalam mode permissive, sistem bertindak seolah-olah SELinux sedang menegakkan kebijakan keamanan yang dimuat, termasuk memberi label pada objek dan mencatat entri penolakan akses dalam log, tetapi sebenarnya tidak menolak operasi apa pun. Meskipun tidak disarankan untuk sistem produksi, mode permissive dapat berguna untuk pengembangan kebijakan SELinux.
Mode enforcing adalah mode operasi default dan direkomendasikan; dalam mode ini, SELinux beroperasi secara normal dengan menegakkan kebijakan keamanan yang dimuat di seluruh sistem.
Gunakan utilitas setenforce untuk beralih antara mode enforcing dan permissive. Perubahan yang dilakukan dengan setenforce tidak bertahan setelah reboot. Untuk beralih ke mode enforcing, jalankan perintah setenforce 1 sebagai pengguna root Linux. Untuk beralih ke mode permissive, jalankan perintah setenforce 0. Gunakan utilitas getenforce untuk melihat mode SELinux yang sedang aktif:
[~]# getenforce Enforcing
[~]# setenforce 0 [~]# getenforce Permissive
[~]# setenforce 1 [~]# getenforce Enforcing
Di Fedora, Anda dapat mengatur domain tertentu ke mode permissive sementara sistem tetap berjalan dalam mode enforcing. Misalnya, untuk menjadikan domain httpd_t bersifat permissive:
[~]# semanage permissive -a httpd_t
Want to help? Learn how to contribute to Fedora Docs ›