cara membuat label SELinux khusus

11

Saya menulis layanan / aplikasi biner tunggal yang sedang saya coba jalankan pada Fedora 24, ia berjalan menggunakan systemd, biner digunakan untuk /srv/bot

layanan / aplikasi yang saya tulis ini perlu membuat / membuka / membaca dan mengganti nama file dalam direktori ini.

Saya pertama kali mulai membuat kebijakan baru berdasarkan SELinux: izinkan proses untuk membuat file apa pun di direktori tertentu

tetapi ketika aplikasi saya perlu mengganti nama, output mendapat peringatan:

#!!!! WARNING: 'var_t' is a base type.
allow init_t var_t:file rename;

Saya mencari-cari di sekitar dan menemukan bahwa saya harus menggunakan label SELinux yang lebih spesifik daripada tipe dasar, tetapi semua contoh online menunjukkan label yang ada dari httpd / nginx / etc.

Apakah ada cara saya bisa membuat label khusus hanya untuk aplikasi saya sendiri?

Ide saya adalah membuat sesuatu seperti myapp_var_t, gunakan

semanage fcontext -a -t my_app_var_t '/srv/bot(/.*)?'
restorecon -R -v /srv/bot

dan .ppfile khusus yang akan menggunakan tipe khusus ini

Jika ada cara yang lebih baik untuk menyelesaikannya, itu juga berfungsi.

Terima kasih

Memperbarui

Setelah lebih banyak mencari di sekitar saya pikir istilah yang tepat untuk apa yang ingin saya lakukan adalah membuat yang baru typesyang membawa saya ke https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916

yang pada dasarnya mengatakan, jalankan

sepolgen /path/to/binary

dan saya bisa mendapatkan templat yang kemudian bisa dikompilasi menjadi file pp dan memuat, masih mendapatkan beberapa kesalahan tetapi sepertinya saya lebih dekat dengan apa yang ingin saya lakukan.

Jika saya membuatnya berfungsi, saya akan memperbarui posting ini

fmpwizard
sumber

Jawaban:

11

Dengan titik awal berjalan

sepolgen /path/to/binary

yang memberi Anda:

app.fc
app.sh
app.if
app.spec
app.te

Untuk membuat yang baru SELinux file contextuntuk diterapkan ke direktori induk yang menyimpan file yang akan diubah oleh program / daemon Anda, Anda mengedit file app.te dan menambahkan:

type app_var_t;
files_type(app_var_t)

Baris pertama menyatakan tipe baru dan baris kedua memanggil makro yang melakukan sihir dan menjadikannya tipe file (ternyata Anda tidak bisa menggunakan baris konteks proses app_exec_t pada file atau direktori), lihat "SELinux Type Revisited" untuk lebih info tentang berbagai jenis

Setelah Anda menyatakan jenisnya, Anda perlu memberi tahu SELinux bahwa aplikasi Anda diizinkan untuk menggunakannya, dalam kasus saya, saya menambahkan

allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };

Dua baris itu pada dasarnya mengatakan, izinkan tipe app_t yang merupakan domain dari aplikasi saya, untuk menulis / mencari / direktori lain dengan konteksnya app_var_tdan memungkinkannya untuk membuat / membuka / menghapus / file dll dengan konteks app_var_t

Bagian terakhir dari teka-teki adalah untuk memberi tahu SELinux folder dan file mana yang harus mendapatkan masing-masing jenis, Anda melakukan ini dengan mengedit app.fcfile (fc => konteks file)

file ini hanya memiliki dua baris dalam kasus saya:

/srv/bot/app        --  gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)?          gen_context(system_u:object_r:app_var_t,s0)

baris pertama menunjuk langsung ke biner yang digunakan di server saya, jadi yang ini mendapatkan konteks app_exec_t.

Baris kedua berarti:

Terapkan app_var_t ke direktori / srv / bot dan juga ke semua file di dalam dir / srv / bot

Perhatikan bagaimana garis pertama memiliki --antara jalur dan panggilan ke gen_context. --berarti, terapkan ini hanya file. pada kasus kedua kita tidak punya apa-apa (hanya spasi), yang berarti, berlaku untuk semua direktori dan file yang cocok, yang saya inginkan, opsi lain adalah harus -dmenerapkan direktori adil.

Saya sekarang memiliki kebijakan yang berfungsi, saya dapat menggunakan aplikasi saya dengan kebijakan khusus dan semuanya berfungsi. (Kebijakan saya memiliki lebih banyak entri di .tefile tetapi di luar ruang lingkup pertanyaan ini.)

Bahan bacaan ekstra yang membantu saya mendapatkan solusi ini:

Membuat segalanya lebih mudah dengan sepolgen

Pikirkan sebelum Anda hanya secara buta audit2allow -M mydomain

SELinux UNTUK PENGEMBANG TOPI MERAH (Panjang PDF)

Modul SElinux (1): jenis dan aturan

Kebijakan sampel (khususnya postgresql)

Memahami Konteks File File

fmpwizard
sumber
Atau gunakan CIL
Jakuje
sepolgen /path/to/binarymemuntahkan kesalahan sintaks untuk saya. Saya menggunakan RHEL 7.6. Saya pikir sepolgen --application /path/to/binarysintaksis yang tepat jika tujuan Anda adalah untuk menulis kebijakan untuk aplikasi tertentu ??
jayhendren
Anda .teberkas juga melempar kesalahan sintaks bagi saya ketika kompilasi modul: app.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5:. Dan jika saya menambahkan requirebagian, saya mendapatkan:ERROR 'syntax error' at token 'files_type' on line 13:
jayhendren
Maaf, saya tidak lagi memiliki akses ke mesin Fedora untuk mengujinya, tetapi bisa jadi karena versi 24, mereka mengubah sintaks.
fmpwizard