Kemampuan memungkinkan evaluasi beberapa hak istimewa sistem penting dalam utas terpisah yang berbeda dari proses saat ini. Dengan cara ini, Anda tidak perlu menjalankan program sebagai root untuk mengakses bagian tertentu dari sistem.

Sebagai solusi yang timbul dari kebutuhan, bagian 25 dari POSIX.1e adalah tentang masalah ini. Pengembangan hak istimewa yang didefinisikan di bagian itu dan lebih banyak lagi telah diselesaikan dengan rilis kernel Linux versi 2.6.26. Inilah semua yang perlu Anda ketahui tentang kemampuan di kernel Linux.

Memahami Logika API Kemampuan

Kontrol otorisasi dalam sistem berbasis Unix terdiri dari dua langkah:

  • Jika pemilik saat ini (ID pengguna efektif, EUID) dari aplikasi yang berjalan adalah nol, maka sistem tidak memeriksa otorisasi
  • Jika nilai EUID berbeda dari nol, sistem melakukan proses kontrol sesuai dengan otorisasi pengguna efektif dan grup aplikasi yang relevan.

Beberapa aplikasi perlu memiliki hak yang lebih luas (SUID, bit SGIT) saat berjalan. Sebagai contoh paling umum, Anda dapat memikirkan

instagram viewer
aplikasi passwd. Dengan ini, pengguna dalam suatu sistem dapat mengubah kata sandi mereka. Namun, untuk menulis ke /etc/shadow file, di mana kata sandi terenkripsi disimpan, perlu untuk bekerja dengan hak pengguna root (yaitu ID pengguna = 0).

Untuk mengatasi masalah ini, aplikasi passwd memiliki bit SUID. Pengguna mana pun yang menjalankan aplikasi ini, pemilik aktif (EUID) akan selalu menjadi root:

ls -l /usr/bin/passwd

# Keluaran
-rwsr-xr-x. 1 root root 32552 23 Juli 2021 /usr/bin/passwd

Kemampuan untuk menjalankan aplikasi SUID dalam model otentikasi Unix tradisional tampaknya telah memecahkan masalah. Namun, kesalahan kritis dalam aplikasi dengan bit SUID membuka pintu untuk menjalankan kode yang tidak diinginkan bagi pengguna dengan otoritas penuh dalam sistem. Aplikasi yang ideal harus dapat berjalan tanpa memerlukan hak pengguna root jika memungkinkan.

Masalahnya tidak berakhir hanya dengan bit SUID. Anda juga harus memiliki hak pengguna root ketika Anda ingin mendengarkan di a port TCP atau UDP yang diistimewakan kurang dari 1024 pada sistem berbasis Unix. Misalnya, untuk dapat mendengarkan port TCP 80 dari server web, Anda harus menjalankan aplikasi sebagai pengguna root.

Selama bertahun-tahun, telah dipahami betapa dahsyatnya menjalankan perangkat lunak yang menyediakan layanan ke lingkungan jaringan dengan akun pengguna yang sepenuhnya diotorisasi. Sebagai solusi sementara, diadopsi bahwa hanya bagian tertentu dan lebih kecil dari program yang mendengarkan pada port yang diistimewakan sebagai root, dan kemudian mengubah ID pengguna aktif ke pengguna lain untuk proses selanjutnya (misalnya, pengguna tidak ada dengan hak terbatas).

Sistem ini, yang telah digunakan selama bertahun-tahun, telah bekerja dengan baik dengan kesederhanaannya dan masih digunakan secara efisien. Namun, saat ini, dimungkinkan untuk mendapatkan beberapa kemampuan tambahan, khusus untuk aplikasi, melalui API kemampuan Linux, tanpa perlu hak root, selain dari yang disebutkan di atas sistem.

Model Kemampuan Linux, Dijelaskan!

Anda dapat menemukan implementasi kapabilitas API yang paling komprehensif di kernel Linux. Distribusi Linux modern juga mencoba menggunakan model baru ini di seluruh sistem sebanyak mungkin.

Misalnya, agar aplikasi ping berfungsi, ia harus dapat membuka soket RAW, yang umumnya hanya diperuntukkan bagi pengguna root. Pada distribusi Linux lama, masalahnya adalah memberikan bit SUID ke aplikasi sehingga pengguna biasa dapat menggunakannya. Dalam versi ini, saat Anda menghapus bit SUID dari aplikasi dan mencoba menjalankan aplikasi sebagai pengguna biasa, Anda mendapatkan kesalahan berikut:

ping 8.8.8.8

# Keluaran
ping: soket terbuka icmp: Operasi tidak diizinkan

Sedangkan pada distribusi Linux modern, aplikasi ping mungkin tidak memiliki bit SUID:

ls -l /bin/ping 

# Keluaran
-rwxr-xr-x. 1 root root 95232 25 Jul 2021 /bin/ping

Namun demikian, Anda dapat menjalankan aplikasi dengan sukses sebagai pengguna biasa. Mekanisme yang memungkinkannya adalah aplikasi ping memiliki kemampuan khusus CAP_NET_RAW.

Anda dapat mempelajari kemampuan tambahan aplikasi dengan getcap perintah sebagai berikut:

sudo getcap /bin/ping

# Keluaran
/bin/ping cap_net_raw=ep

Jika perintah getcap mengembalikan respons kosong, Anda dapat mengatur nilai ini secara manual dengan:

sudo setcap cap_net_raw+ep /bin/ping

Model Kemampuan Proses

Dalam implementasi Linux, kemampuan setiap proses dikelompokkan dalam tiga judul:

Kemampuan Penyataan
diizinkan Di cluster ini, ada daftar kemampuan tambahan yang diizinkan untuk proses yang relevan. Memberikan izin tidak berarti dapat digunakan secara aktif pada saat itu. Dimungkinkan untuk memasukkan otorisasi di sini dalam set kemampuan efektif dengan tindakan tambahan.
efektif Ini menunjukkan daftar kemampuan aktif saat ini dari proses terkait. Dengan fungsi tambahan yang mengatur sistem keterampilan, dimungkinkan untuk menyerah atau mendapatkan kembali keterampilan. Bagaimanapun, ini hanya dapat dilakukan di antara mereka yang telah diberi wewenang dalam grup yang diizinkan.
warisan Saat aplikasi memulai proses baru, proses yang baru dimulai menampilkan daftar kemampuan yang akan diwarisi dari daftar yang diizinkan.

Daftar kemampuan yang diizinkan, efektif, dan dapat diwariskan untuk menjalankan proses setiap saat ditampilkan sebagai bitmask di baris CapPrm, CapEff, dan CapInh dalam file /proc//status. Selain itu, CapBnd baris berisi bitmask yang digunakan dalam operasi kontrol batas kemampuan.

Misalnya, coba baca nilai aplikasi shell Anda yang sedang berjalan dari /proc/self/status mengajukan:

kucing /proc/diri sendiri/status | grep topi

# Keluaran
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000

Model Kemampuan File di Linux

Pengoperasian sistem kapabilitas untuk file bergantung pada prasyarat bahwa properti ini dapat disimpan di lapisan sistem file virtual (VFS). Mirip dengan model proses, kemampuan untuk file berada di bawah tiga judul:

1. Diizinkan

Sistem menentukan kemampuan yang diizinkan dari proses saat eksekusi yang sesuai berjalan di cluster ini.

2. Efektif

Berbeda dengan model kapabilitas proses, header ini hanya menyimpan satu bit: aktif atau tidak aktif. Jika bit aktif, kemampuan yang ditentukan dalam daftar file yang diizinkan secara otomatis ditransfer ke daftar kemampuan efektif dari proses yang relevan ketika file ini dijalankan dan sebuah proses sedang dibuat. Jika bit tidak aktif, transfer otomatis dari kemampuan yang diizinkan pada file ke proses yang sedang berjalan tidak dilakukan.

Namun, jika kode aplikasi yang relevan terintegrasi dengan sistem kapabilitas, ia dapat mengaktifkan izin dalam kumpulan file yang diizinkan dengan panggilan sistem. Tujuan utama dari perilaku ini adalah untuk memastikan bahwa aplikasi lama yang tidak menyertakan kemampuan khusus sistem kode, pengembangan di tingkat kode perangkat lunak dapat bekerja dengan sistem kemampuan tanpa memerlukan kode sumber apa pun perubahan.

Anda mungkin berpikir bahwa aplikasi yang ditulis dengan lebih baik hanya akan menggunakan kemampuan saat dibutuhkan. Jika bit aktif, semua kemampuan dalam daftar yang diizinkan menjadi aktif saat aplikasi dimulai.

3. Warisan

Seperti dalam model proses, file yang relevan berjalan dan sebuah proses terjadi. Jika aplikasi lain berjalan dari dalam proses setelah itu, itu termasuk dalam daftar yang diizinkan dari proses baru. Singkatnya, ini menunjukkan daftar kemampuan untuk diwarisi.

Peran Kemampuan dalam Sistem Linux

Saat Anda menjalankan proses tertentu sebagai pengguna biasa, Anda tidak memiliki hak istimewa apa pun. Akibatnya, Anda hanya dapat mengakses partisi yang diizinkan sistem untuk pengguna biasa. Alasan utama di balik ini adalah untuk memperketat keamanan sistem dan menerapkan langkah-langkah tersebut.

Mengizinkan semua pengguna mengakses semua sumber daya dapat menciptakan kerentanan keamanan yang serius. Akan sangat mudah bagi orang yang menggunakan sistem untuk tujuan jahat untuk mengeksploitasi kerentanan sistem. Kemampuan Linux berguna dalam hal-hal seperti itu. Anda dapat dengan mudah memperkuat keamanan aplikasi Anda dengan kemampuan API yang didukung oleh kernel.

Kemampuan Linux hanyalah salah satu masalah yang perlu dipikirkan untuk melakukan metode yang sangat kuat seperti membagi pengguna root izin, menetapkan berbagai izin kepada pengguna yang tidak memiliki hak istimewa, dan mengambil berbagai tindakan pencegahan tentang port terbuka di layanan internet dengan server Linux.

Tingkatkan Keamanan Server Linux Anda Dengan 7 Langkah Pengerasan Ini

Baca Selanjutnya

MembagikanMenciakMembagikanSurel

Topik-topik yang berkaitan

  • Linux
  • Pemrograman
  • Kernel Linux
  • Sistem operasi

Tentang Penulis

Fatih Küçükkarakurt (8 Artikel Diterbitkan)

Seorang insinyur dan pengembang perangkat lunak yang merupakan penggemar matematika dan teknologi. Dia selalu menyukai komputer, matematika dan fisika. Dia telah mengembangkan proyek mesin permainan serta pembelajaran mesin, jaringan saraf tiruan dan perpustakaan aljabar linier. Selain itu terus bekerja pada pembelajaran mesin dan matriks linier.

More From Fatih Küçükkarakurt

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan