Secara tradisional, proses Linux memiliki hak istimewa (berjalan sebagai root) atau tidak memiliki hak istimewa. Proses yang diistimewakan tidak tunduk pada pemeriksaan izin kernel, dan dengan demikian memiliki kekuasaan penuh atas suatu sistem. Kemampuan adalah hak istimewa yang berbeda dan independen yang dapat digunakan oleh suatu proses untuk melewati pemeriksaan izin tertentu. Kemampuan pertama kali diperkenalkan di Linux 2.2, dan beberapa lagi ditambahkan di versi yang lebih baru. Mereka biasanya diatur pada file yang dapat dieksekusi dan secara otomatis diberikan ke proses ketika file dengan kemampuan dieksekusi. Kemampuan pada dasarnya membagi kekuatan pengguna root menjadi hak istimewa yang terpisah, yang meningkatkan keamanan dengan membatasi akses yang akan diperoleh penyerang dengan mengeksploitasi atau menyalahgunakan layanan.
Panduan ini akan memperkenalkan beberapa kapabilitas yang umum digunakan dan mendemonstrasikan bagaimana kapabilitas tersebut dapat dilihat dan dimodifikasi.
Kemampuan Umum
Kernel Linux mengimplementasikan banyak kemampuan. Beberapa di antaranya adalah:
- CAP_SYS_ADMIN:Memungkinkan berbagai operasi. Kemampuan ini harus dihindari demi kemampuan yang lebih spesifik.
- CAP_CHOWN:Ubah User ID dan Group ID file
- CAP_DAC_READ_SEARCH:Abaikan pembacaan file, dan pemeriksaan direktori baca/eksekusi. Program dengan kemampuan ini dapat digunakan untuk membaca file apa pun di sistem.
- CAP_DAC_OVERRIDE:Mengganti DAC (Discretionary Access Control) yaitu melewati pemeriksaan izin baca/tulis/eksekusi. Kemampuan ini memberikan kemampuan yang dapat dieksekusi untuk mengakses dan memodifikasi file apa pun di sistem file.
- CAP_NET_BIND_SERVICE:Memungkinkan pengikatan ke nomor port yang lebih rendah dari 1024.
- CAP_KILL:Abaikan pemeriksaan izin untuk mengirim sinyal ke proses seperti SIGHUP dan SIGKILL.
- CAP_SYS_NICE:Memodifikasi nilai kebaikan dan prioritas penjadwalan proses antara lain.
- CAP_SYS_RESOURCE:Memungkinkan mengesampingkan berbagai batasan pada sumber daya sistem, seperti kuota disk, batas waktu CPU, dll.
Daftar lengkapnya tersedia di halaman manual kemampuan(7).
File dapat diberikan kemampuan dalam 3 set berbeda:diizinkan, dapat diwariskan, dan efektif. Utas memiliki 2 set tambahan:ambient dan bounding. Setiap set dapat berisi nol atau lebih kemampuan, dengan pengecualian set efektif untuk file, yang sebenarnya adalah satu bit. Kumpulan ini menentukan perilaku kernel kompleks yang berada di luar cakupan panduan ini. Saat menetapkan kemampuan ke file, kami akan menggunakan set yang diizinkan dan efektif dalam banyak kasus.
CATATAN:SELinux dapat mengganggu kemampuan. Pada sistem dengan SELinux dalam mode penegakan, ini dapat mencegah proses mengambil keuntungan dari kemampuannya.
Alat yang Diperlukan
Ada dua paket berbeda untuk manajemen kapabilitas:libcap dan libcap-ng. Yang terakhir dirancang agar lebih mudah daripada yang pertama. Keduanya tercakup dalam panduan ini.
libcap menyediakan getcap dan setcap untuk melihat dan mengatur kemampuan file, sementara libcap-ng menggabungkan kedua fungsi dalam satu alat, filecap.
libcap
Instalasi
Pada Debian, Ubuntu dan distribusi berbasis Debian lainnya, utilitas libcap dapat diinstal dengan:
apt update apt install libcap2-bin
Untuk menginstal di CentOS, gunakan perintah berikut:
yum install libcap
Untuk menginstal di Fedora, gunakan perintah berikut:
dnf install libcap
Untuk menginstal di Arch, gunakan perintah berikut:
pacman -Sy libcap
Penggunaan
getcap hanya menampilkan kemampuan yang diberikan ke file, jika ada. Gunakan sintaks berikut:
getcap /path/to/binary
Misalnya:
Getcap juga dapat mencari secara rekursif dengan flag -r. Misalnya:
CATATAN:2>/dev/null digunakan untuk menghindari kekacauan keluaran dengan kesalahan "Operasi tidak didukung", yang terjadi ketika getcap mencoba untuk mendapatkan kemampuan file di /sys, /proc, dll. Sistem file virtual khusus ini tidak mendukung kemampuan.
Untuk mengatur kemampuan file dengan setcap, gunakan sintaks berikut:
setcap CAP+set filename
Misalnya, untuk menambahkan CAP_CHOWN dan CAP_DAC_OVERRIDE ke set yang diizinkan dan efektif, gunakan:
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
Untuk menghapus kemampuan dari file, gunakan tanda -r:
setcap -r filename
Berikut adalah beberapa contoh tambahan:
libcap-ng
Instalasi
Untuk menginstal di Debian, Ubuntu dan distribusi berbasis Debian lainnya:
apt update apt install libcap-ng-utils
Untuk menginstal di CentOS:
yum install libcap-ng-utils
Untuk menginstal di Fedora:
dnf install libcap-ng-utils
Untuk menginstal di Arch:
pacman -Sy libcap-ng
Penggunaan
- Program filecap mengacu pada kemampuan tanpa awalan "CAP_" (misalnya, NET_ADMIN, bukan CAP_NET_ADMIN).
- filecap tidak berfungsi dengan jalur relatif, ia mengharapkan jalur lengkap saat meneruskan file atau direktori sebagai argumen.
- filecap tidak mengizinkan Anda untuk menentukan set kemampuan, ia selalu menggunakan yang diizinkan dan efektif saat menyetel kemampuan.
Untuk melihat kemampuan yang ditetapkan ke file:
filecap /full/path/to/file
Untuk mencari direktori secara rekursif, gunakan:
filecap /full/path/to/dir
Untuk mencari seluruh sistem file dengan filecap, gunakan salah satu perintah berikut:
filecap / filecap -a
Berikut adalah beberapa contoh penggunaan filecap untuk memeriksa file dan direktori:
Untuk menyetel kemampuan pada file, gunakan sintaks:
filecap /full/path/to/file cap_name
Misalnya:
filecap /usr/bin/tac dac_override
Untuk menghapus kapabilitas, gunakan sintaks ini:
filecap /full/path/to/file none
Berikut adalah beberapa contoh pengaturan dan penghapusan kemampuan menggunakan filecap:
Kesimpulan
Kemampuan adalah fitur kernel yang kuat dengan aplikasi keamanan yang luas. Mereka harus diganti dengan hak istimewa penuh dan root SUID bila memungkinkan.