GNU/Linux >> Belajar Linux >  >> Linux

Konfigurasikan SELinux untuk mengizinkan daemon menggunakan file di lokasi non-default

Latar Belakang

SELinux menambahkan lapisan pemeriksaan izin lain pada sistem Linux. Pada sistem yang mendukung SELinux, izin DAC reguler diperiksa terlebih dahulu, dan jika mereka mengizinkan akses, kebijakan SELinux dikonsultasikan. Jika kebijakan SELinux menolak akses, entri log dibuat di log audit di /var/log/audit/audit.log atau di dmesg jika auditd tidak berjalan di sistem.

SELinux memberikan label, yang disebut konteks keamanan , ke setiap objek (file, proses, dll) dalam sistem:

  • File memiliki konteks keamanan yang disimpan dalam atribut yang diperluas. Ini dapat dilihat dengan ls -Z .

    SELinux memelihara pola jalur pemetaan basis data ke konteks file default. Basis data ini digunakan saat Anda perlu memulihkan konteks file default secara manual atau saat sistem diberi label ulang. Basis data ini dapat dilihat dengan semanage alat.

  • Proses diberi konteks keamanan saat executable dijalankan (execve syscall). Konteks keamanan proses dapat dilihat dengan sebagian besar alat pemantauan sistem, misalnya dengan ps Z $PID .

  • Objek berlabel lain juga ada, tetapi tidak relevan dengan jawaban ini.

kebijakan SELinux berisi aturan yang menentukan operasi mana di antara konteks yang diizinkan. SELinux beroperasi pada daftar putih aturan, apa pun yang tidak diizinkan secara eksplisit oleh kebijakan ditolak. Kebijakan referensi berisi modul kebijakan untuk banyak aplikasi dan biasanya merupakan kebijakan yang digunakan oleh distribusi yang mengaktifkan SELinux. Jawaban ini terutama menjelaskan cara bekerja dengan kebijakan berdasarkan kebijakan referensi, yang kemungkinan besar Anda gunakan jika menggunakan kebijakan yang disediakan distribusi.

Ketika Anda menjalankan aplikasi Anda sebagai pengguna biasa, Anda mungkin tidak melihat SELinux, karena konfigurasi default menempatkan pengguna di unconfined konteks. Proses berjalan di tidak dibatasi konteks memiliki sedikit batasan. Anda mungkin dapat menjalankan program Anda tanpa masalah di shell pengguna dalam konteks tidak terbatas, tetapi saat diluncurkan menggunakan sistem init, program tersebut mungkin tidak berfungsi lagi dalam konteks terbatas.

Masalah umum

Saat file berada di lokasi non-default (tidak dijelaskan dalam kebijakan default), masalah sering kali terkait dengan alasan berikut:

  • File memiliki konteks file yang salah/tidak kompatibel :File dipindahkan dengan mv menjaga metadata mereka termasuk konteks keamanan file dari lokasi lama. File yang dibuat di lokasi baru mewarisi konteks dari direktori induk atau proses pembuatan.

  • Memiliki banyak daemon menggunakan file yang sama :Kebijakan default tidak menyertakan aturan untuk mengizinkan interaksi antara konteks keamanan yang dimaksud.

File dengan konteks keamanan yang salah

Jika file tidak digunakan oleh daemon lain (atau proses terbatas lainnya) dan satu-satunya perubahan adalah lokasi penyimpanan file, perubahan yang diperlukan pada konfigurasi SELinux adalah:

  • Tambahkan aturan baru ke basis data konteks file
  • Terapkan konteks file yang benar ke file yang ada

Konteks file di lokasi default dapat digunakan sebagai templat untuk lokasi baru. Sebagian besar modul kebijakan menyertakan dokumentasi halaman manual (dihasilkan menggunakan sepolicy manpages ) menjelaskan kemungkinan konteks file alternatif dengan semantik aksesnya.

Basis data konteks file menggunakan sintaks ekspresi reguler, yang memungkinkan penulisan spesifikasi yang tumpang tindih. Perlu dicatat bahwa konteks terapan adalah spesifikasi terakhir yang ditemukan .

Untuk menambahkan entri baru ke basis data konteks file:

semanage fcontext -a -t <type> "/path/here/(/.*)?"

Setelah entri konteks baru ditambahkan ke database, konteks dari database dapat diterapkan pada file Anda menggunakan restorecon <files> . Menjalankan restorecon dengan -vn flag akan menunjukkan konteks file apa yang akan diubah tanpa menerapkan perubahan apa pun.

Menguji konteks file baru tanpa menambahkan entri baru di database

Konteks dapat diubah secara manual dengan chcon alat. Ini berguna saat Anda ingin menguji konteks file baru tanpa menambahkan entri ke basis data konteks file.

Konteks file baru ditentukan dalam argumen untuk chcon . Saat digunakan dengan --reference= opsi, konteks keamanan dari file referensi disalin ke file target.

menggunakan konteks tertentu (default_t ):

chcon -t default_t <target files>

atau menggunakan referensi:

chcon --reference=<path to default location> <target files>

Catatan tentang berbagai sistem file &titik pemasangan

Jika lokasi baru adalah titik pemasangannya sendiri, konteksnya dapat diatur dengan opsi pemasangan. Kumpulan konteks dengan opsi mount tidak disimpan di disk, sehingga dapat juga digunakan dengan sistem file yang tidak mendukung atribut yang diperluas.

mount <device> <mount point> -o context="<context>"

Mengizinkan proses yang berjalan dalam konteks keamanan yang berbeda untuk menggunakan file yang sama

Opsi 1:Boolean

Kebijakan referensi mencakup opsi yang dapat disetel, yang disebut boolean , yang mengaktifkan/menonaktifkan aturan tambahan tertentu. Banyak dari mereka memungkinkan inter-operasi daemon sistem yang berbeda yang biasanya tidak menggunakan file yang sama.

Daftar semua kemungkinan opsi yang dapat disetel dan deskripsinya dapat dicantumkan menggunakan semanage boolean -l . audit2allow mungkin juga dapat mengetahui secara langsung boolean mana yang perlu diaktifkan.

Untuk mengaktifkan/menonaktifkan boolean menggunakan semanage :

semanage boolean --on <boolean name>
semanage boolean --off <boolean name>

Boolean adalah cara paling sederhana untuk mengubah kebijakan. Namun, semua kemungkinan situasi tidak dapat diatasi dengan mengaktifkan boolean. Beberapa boolean juga mengizinkan akses yang sangat luas, terlalu permisif.

Opsi 2:Perluas kebijakan dengan modul baru

Jika tidak ada boolean untuk mengizinkan akses, kebijakan perlu diubah dengan menambahkan modul khusus.

Modul sederhana yang menambahkan aturan yang diperlukan untuk mengizinkan akses dapat dibuat dari file log menggunakan audit2allow dengan langkah-langkah berikut:

  1. Tetapkan domain daemon (konteks keamanan) ke mode permisif . Dalam mode permisif, kebijakan tidak diberlakukan , tetapi log dibuat pada akses yang biasanya ditolak oleh kebijakan.

    semanage permissive -a <domain>
    
  2. Uji daemon Anda dalam operasi normal untuk membuat entri log.

  3. Buat modul kebijakan baru dan sisipkan.

    audit2allow -a -M <name>
    semodule -i <name>.pp'
    
  4. Aktifkan kembali mode penegakan

    semanage permissive -d <domain>
    

Metode ini bekerja paling baik bila hanya ada sedikit konteks keamanan yang terlibat. Dalam konfigurasi yang kompleks, Anda kemungkinan besar harus menulis modul kebijakan Anda sendiri. Beberapa sumber untuk memulai adalah gentoo wiki dan dokumentasi API kebijakan referensi.


Dengan perintah ini:

# semanage fcontext -l /oldpath/

Anda dapat memeriksa konteks SElinux default di folder di sistem Anda, sehingga dengan perintah itu Anda dapat melihat konteks default folder daemon tersebut.

Jadi, Anda dapat memeriksa konteks SELinux apa pun yang harus Anda konfigurasikan di direktori tempat Anda ingin memindahkan konten.

Katakanlah Anda melihat bahwa folder daemon Anda memiliki konteks ini (ini konteks apache):

# semanage fcontext -l
...
/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

Kemudian Anda akan menerapkan konteks ini ke jalur baru seperti ini (contoh dengan konteks keamanan default daemon apache)

# semanage fcontext -a -t httpd_sys_content_t '/newpath(/.*)?'

Setelah melakukan itu, mengingat konten Anda sudah berada di jalur baru, Anda harus memaksakan semuanya di bawah jalur tersebut, untuk mendapatkan konteks tersebut:

# restorecon -RFvv /newpath

Anda dapat memeriksa apakah berhasil, dengan perintah ini:

# ls -Zd /newpath/

Ingatlah bahwa saat Anda mv direktori atau file, konteks keamanan dipertahankan. Saat Anda cp folder atau direktori, konteks akan ditetapkan ke induknya.

Jika Anda perlu memeriksa halaman manual untuk perangkat lunak tertentu, Anda dapat menginstal halaman manual dengan:

# yum install -y selinux-policy-devel

Jangan lupa untuk menjalankan perintah ini, untuk mengindeks ulang man db:

# mandb

Kemudian Anda dapat menjalankan yang ini, dan periksa semua halaman manual selinux.

# man -k selinux

Saran, jalankan perintah ini sebelum dan sesudah menginstal paket tersebut, untuk melihat perbedaannya:

# man -k selinux | wc -l

Linux
  1. Bagaimana Cara Menggunakan Inotifywait Untuk Menonton Direktori Untuk Pembuatan File Ekstensi Tertentu?

  2. Bagaimana Cara Mengganti Nama File Secara Khusus Dalam Daftar Yang Akan Digunakan Wget?

  3. Cara menggunakan Logrotate untuk mengelola file log

  1. Cara Menggunakan Awk dan Ekspresi Reguler untuk Memfilter Teks atau String dalam File

  2. Cara Mengonfigurasi Server SAMBA Dan Mentransfer File Antara Linux &Windows

  3. Memahami Pelabelan File SELinux dan Konteks SELinux

  1. Tidak Dapat Menjalankan Perintah Konfigurasi:"tidak ada File Atau Direktori Tersebut"?

  2. Gunakan cPanel File Manager untuk mengompres/mendekompresi file

  3. Gunakan Perintah fallocate untuk Membuat File dengan Ukuran Tertentu di Linux