özel bir SELinux etiketi nasıl oluşturulur


11

Fedora 24 üzerinde çalıştırmaya çalıştığım bir hizmet / tek ikili uygulama yazdım, systemd kullanarak çalışıyor, ikili konuşlandırılıyor /srv/bot

yazdığım bu hizmet / uygulama bu dizindeki dosyaları oluşturmak / açmak / okumak ve yeniden adlandırmak gerekiyor.

İlk olarak SELinux'a dayalı yeni bir politika oluşturmaya başladım : bir işlemin belirli bir dizinde herhangi bir dosya oluşturmasına izin ver

ancak uygulamamın yeniden adlandırılması gerektiğinde çıktının bir uyarısı vardı:

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

Etrafımda dolaştım ve bir taban türünden daha spesifik bir SELinux etiketi kullanmam gerektiğini öğrendim, ancak tüm örnekler çevrimiçi olarak httpd / nginx / etc'den mevcut etiketleri gösteriyor.

Yalnızca kendi uygulamam için özel bir etiket oluşturmanın bir yolu var mı?

Benim fikrim myapp_var_t gibi bir şey yaratmak, kullanmak

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

ve .ppbu özel türü kullanacak özel bir dosya

Çözmenin daha iyi bir yolu varsa, bu da işe yarar.

Teşekkürler

Güncelleme

Etrafımda daha fazla arama yaptıktan sonra yapmak istediğim şey için uygun terimin typesbeni https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916 adresine yönlendirdiğini düşünüyorum.

temelde der ki, koş

sepolgen /path/to/binary

ve daha sonra bir pp dosyasına derleyebileceğim ve yükleyebileceğim bir şablon alabildim, yine de bazı hatalar alıyorum ama ne yapmak istediğime daha yakınım gibi görünüyor.

Çalışırsam bu yayını güncelleyeceğim

Yanıtlar:


11

Koşu başlangıç ​​noktasıyla

sepolgen /path/to/binary

hangi size verir:

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

SELinux file contextProgramınızın / daemon'unuzun değiştireceği dosyaları içeren bir üst dizine uygulanacak yeni bir dizin oluşturmak için app.te dosyasını düzenlersiniz ve eklersiniz:

type app_var_t;
files_type(app_var_t)

İlk satır yeni tip beyan ve ikinci satır biraz büyü yapar ve (sizin dışarı dönüşler bir dosyaya veya dizine bir süreç bağlam çizgi app_exec_t kullanamazsınız) burayı bir dosya türünü yapan bir makro çağırır bkz "Revisited SELinux'un Türleri" daha fazlası için farklı türler hakkında bilgi

Türü bildirdikten sonra, SELinux'a uygulamanızın kullanımına izin verildiğini söylemeniz gerekir, benim durumumda

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 };

Bu iki satır temel olarak, uygulamamın alanı olan app_t türünün içeriğe / arama / etc dizinleri yazmasına app_var_tve app_var_t içeriğiyle / open / delete / etc dosyaları oluşturmasına izin verir

Bulmacanın son kısmı bir şekilde SELinux'a hangi klasörlerin ve dosyaların her türü alması gerektiğini söylemektir, bunu app.fcdosyayı düzenleyerek yaparsınız (fc => dosya içeriği)

bu dosya benim durumumda sadece iki satır var:

/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)

ilk satır sunucularıma dağıtıldığı gibi doğrudan ikiliyi gösterir, böylece bu app_exec_t içeriğini alır.

İkinci satır:

App_var_t dizinini / srv / bot dizinine ve ayrıca dir / srv / bot içindeki tüm dosyalara uygulayın

İlk hattın --yol ile çağrı arasında nasıl bulunduğuna dikkat edin gen_context. --anlamına gelir, bunu yalnızca dosyalara uygulayın. ikinci durumda hiçbir şeyimiz yok (sadece boşluklar), yani tüm eşleşen dizinlere ve dosyalara uygulanır, istediğim budur, başka bir seçenek -dsadece dizinleri uygulamaktır.

Artık bir çalışma politikam var, uygulamamı özel bir politika ile dağıtabilirim ve hepsi işe yarıyor. (politikamın .tedosyada çok daha fazla girişi var, ancak bu sorunun kapsamı dışında.)

Bu çözüme ulaşmama yardımcı olan ekstra okuma materyalleri:

Sepolgen ile işleri kolaylaştırmak

Körü körüne denetlemeden önce düşünün2allow -M mydomain

KIRMIZI ŞAPKA GELİŞTİRİCİLER İÇİN SELinux (Uzun PDF)

Bir SElinux modülü (1): türleri ve kuralları

Örnek politika (özellikle postgresql)

Dosya İçerik Dosyalarını Anlama


Veya CIL
Jakuje

sepolgen /path/to/binarybenim için bir sözdizimi hatası veriyor. RHEL 7.6 kullanıyorum. sepolgen --application /path/to/binaryAmacınız belirli bir uygulama için bir politika yazmak ise uygun sözdizimi olduğunu düşünüyorum ?
jayhendren

Sizin .temodülü derlerken dosyası da benim için bir sözdizimi hatası atar: app.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5:. Ve bir requirebölüm ERROR 'syntax error' at token 'files_type' on line 13:
eklersem

Üzgünüz, test etmek için artık bir Fedora makinesine erişimim yok, ancak sürüm 24'ten beri sözdizimini değiştirmiş olabilirler.
fmpwizard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.