Kebenaran Fail dalam Linux

Hai semua. Kami sedang giat bekerja dan sedang menyediakan banyak pelancaran hebat pada bulan Januari. Antara lain, pendaftaran telah diumumkan untuk aliran baharu kursus kegemaran semua orang. "Pentadbir Linux". Dalam menjangkakan pelancaran, kami secara tradisinya berkongsi terjemahan bahan berguna.

Kebenaran Fail dalam Linux

Kebenaran fail menawarkan alternatif yang selamat kepada boleh laku SUID, tetapi boleh kelihatan agak mengelirukan pada mulanya.


Kita semua tahu bahawa binari SELATAN adalah keputusan buruk dari sudut keselamatan. Nasib baik, jika permohonan anda memerlukan beberapa keistimewaan terhad, terdapat cara yang lebih cekap dipanggil kebenaran fail.

Saya akan menjimatkan masa anda jika anda ingin mengelak daripada membaca artikel di atas secara terperinci: Pada asasnya, kebenaran fail membenarkan proses yang dijalankan sebagai akar dan oleh itu dibenarkan melakukan sesuatu untuk mengekalkan keupayaan tertentu, terhad senarai iniapabila mereka menggugurkan keistimewaan dan dikendalikan oleh pengguna yang tidak mempunyai hak istimewa. Ini bermakna jika penyerang berjaya menjejaskan proses menggunakan limpahan penimbal atau eksploitasi lain, mereka tidak akan dapat memanfaatkan apa-apa selain daripada keistimewaan minimum tertentu yang sebenarnya diperlukan oleh proses itu.

Keizinan bagus untuk perkhidmatan yang biasanya sentiasa dijalankan sebagai root, tetapi bagaimana pula dengan utiliti baris arahan? Nasib baik, ini juga disokong dengan syarat anda mempunyai utiliti yang betul dipasang. Jika anda menggunakan Ubuntu, contohnya anda memerlukan pakej tersebut libcap2-bin. Anda juga perlu menjalankan kernel bukan kuno (dari versi 2.6.24).

Fungsi ini membenarkan kebenaran untuk dikaitkan dengan fail boleh laku, sama seperti menetapkan bit SUID, tetapi hanya untuk set kebenaran tertentu. Utiliti setcap digunakan untuk menambah dan mengalih keluar kebenaran daripada fail.

Langkah pertama ialah memilih kebenaran yang anda perlukan. Demi artikel ini, saya mengandaikan bahawa terdapat alat diagnostik rangkaian yang dipanggil tracewalk, yang sepatutnya boleh digunakan soket mentah. Ini biasanya memerlukan aplikasi dijalankan sebagai root, tetapi apabila melihat senarai itu ternyata hanya kebenaran yang diperlukan CAP_NET_RAW.

Dengan mengandaikan anda berada dalam direktori di mana binari berada tracewalk, anda boleh menambah kebenaran ini seperti ini:

sudo setcap cap_net_raw=eip tracewalk

Abaikan akhiran buat masa ini =eip untuk penyelesaian, saya akan bercakap tentang perkara itu dalam beberapa saat. Ambil perhatian bahawa nama kebenaran adalah dalam huruf kecil. Anda kini boleh menyemak sama ada anda telah mengkonfigurasi kebenaran dengan betul dengan:

setcap -v cap_new_raw=eip tracewalk

Atau anda boleh menyenaraikan semua kebenaran yang ditetapkan untuk boleh laku yang diberikan:

getcap tracewalk

Untuk rujukan, anda juga boleh mengalih keluar semua kebenaran daripada boleh laku dengan:

setcap -r tracewalk

Pada ketika ini, anda sepatutnya boleh menjalankan boleh laku sebagai pengguna yang tidak mempunyai hak istimewa, dan ia sepatutnya boleh berfungsi dengan soket mentah, tetapi tidak mempunyai sebarang keistimewaan lain yang dimiliki oleh pengguna root.

Jadi apakah maksud akhiran pelik ini? =eip? Ini memerlukan sedikit pemahaman tentang sifat kebenaran. Setiap proses mempunyai tiga set kebenaran βˆ’ berkesan, boleh diwarisi dan dibenarkan:

  • Berkesan Kebenaran ialah yang menentukan perkara yang sebenarnya boleh dilakukan oleh sesuatu proses. Sebagai contoh, ia tidak boleh berurusan dengan soket mentah jika CAP_NET_RAW tiada dalam set berkesan.
  • Tersedia kebenaran adalah yang dibenarkan untuk dimiliki oleh proses jika ia memintanya menggunakan panggilan yang sesuai. Mereka menghalang proses daripada benar-benar melakukan apa-apa melainkan ia ditulis secara khusus untuk meminta kebenaran tersebut. Ini membolehkan proses ditulis untuk menambah kebenaran kritikal pada set berkesan hanya untuk tempoh apabila ia sebenarnya diperlukan.
  • Boleh diwarisi kebenaran ialah kebenaran yang boleh diwarisi dalam set boleh diakses proses anak bertelur. Semasa pembedahan fork() atau clone() proses anak sentiasa diberi salinan kebenaran proses induk kerana proses itu masih menjalankan boleh laku yang sama pada ketika itu. Set yang boleh diwarisi digunakan apabila exec() (atau setara) dipanggil untuk menggantikan fail boleh laku dengan yang lain. Pada ketika ini, set proses yang tersedia disembunyikan oleh set boleh diwarisi untuk mendapatkan set boleh diakses yang akan digunakan untuk proses baharu.

Jadi utiliti setcap membolehkan kami menambah kebenaran ketiga-tiga set ini secara bebas untuk boleh laku yang diberikan. Ambil perhatian bahawa makna kumpulan ditafsirkan sedikit berbeza untuk kebenaran fail:

  • Ada kebenaran fail ialah yang sentiasa tersedia untuk fail boleh laku, walaupun proses induk yang memanggilnya tidak mempunyainya. Mereka pernah dipanggil permit "terpaksa".
  • diwarisi kebenaran fail menentukan topeng tambahan yang juga boleh digunakan untuk mengalih keluar kebenaran daripada set proses panggilan. Ia digunakan sebagai tambahan kepada set warisan proses panggilan, jadi kebenaran diwarisi hanya jika ia wujud dalam kedua-dua set.
  • Berkesan kebenaran fail sebenarnya hanyalah satu bit, bukan satu set, dan jika ditetapkan, ini bermakna keseluruhan set yang tersedia juga disalin ke dalam set berkesan proses baharu. Ini boleh digunakan untuk menambah kebenaran kepada proses yang tidak ditulis secara khusus untuk memintanya. Oleh kerana ia adalah sedikit, jika anda menetapkannya untuk sebarang kebenaran, ia mesti ditetapkan untuk semua kebenaran. Anda boleh menganggapnya sebagai bit warisan kerana ia digunakan untuk membenarkan kebenaran digunakan oleh aplikasi yang tidak menyokongnya.

Apabila menyatakan kebenaran melalui setcap tiga huruf e, i ΠΈ p rujuk berkesan, boleh diwarisi dan boleh diakses set masing-masing. Jadi, spesifikasi awal:

sudo setcap cap_net_raw=eip tracewalk

... menunjukkan bahawa resolusi CAP_NET_RAW mesti ditambah kepada set yang tersedia dan boleh diwarisi dan bit berkesan juga mesti ditetapkan. Ini akan mengatasi mana-mana kebenaran yang ditetapkan sebelum ini pada fail. Untuk menetapkan berbilang kebenaran serentak, gunakan senarai yang dipisahkan koma:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Panduan Kebenaran membincangkan semua ini dengan lebih terperinci, tetapi mudah-mudahan siaran ini telah mendedahkan apa yang berlaku sedikit. Hanya tinggal beberapa kaveat dan helah untuk disebutkan.

Pertama, keupayaan fail tidak berfungsi dengan pautan sym - anda perlu menggunakannya pada fail binari itu sendiri (iaitu sasaran symlink).

Kedua, mereka tidak berfungsi dengan skrip yang ditafsirkan. Sebagai contoh, jika anda mempunyai skrip Python yang ingin anda berikan kebenaran, anda mesti menyerahkannya kepada penterjemah Python itu sendiri. Jelas sekali ini adalah isu keselamatan yang berpotensi kerana kemudian semua skrip yang dilaksanakan dengan penterjemah itu akan mempunyai kebenaran yang ditentukan, walaupun ini masih jauh lebih baik daripada menjadikannya SUID. Penyelesaian yang paling biasa nampaknya ialah menulis boleh laku yang berasingan dalam C atau setara yang boleh melaksanakan operasi yang diperlukan dan memanggilnya daripada skrip. Ini sama dengan pendekatan yang digunakan oleh Wireshark yang menggunakan binari /usr/bin/dumpcap untuk melaksanakan operasi istimewa:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

Ketiga, kebenaran fail dilumpuhkan jika anda menggunakan pembolehubah persekitaran LD_LIBRARY_PATH atas sebab keselamatan yang jelas(1). Perkara yang sama berlaku untuk LD_PRELOAD, setakat yang saya tahu.

1. Memandangkan penyerang jelas boleh menggantikan salah satu perpustakaan standard dan penggunaan LD_LIBRARY_PATHuntuk memaksa perpustakaannya dipanggil mengikut keutamaan kepada sistem satu, dan oleh itu mempunyai kod sewenang-wenangnya sendiri yang dilaksanakan dengan keistimewaan yang sama seperti aplikasi panggilan.

Itu sahaja. Butiran lanjut tentang program kursus boleh didapati di webinar, yang akan berlangsung pada 24 Januari.

Sumber: www.habr.com

Tambah komen