:::: MENU ::::
Posts tagged with: reference policy

SELinux entegrasyonu nasil yapilir?

SELinux çalışan bir Linux sistemini ayaga kaldırmak için gereken çalışmalar anlatılacaktır. 

Kernel seviyesinde SELinux

Kernel’in derleneceği toolchain, 2014-09 linaro arm-linux-gnueabihf’nin SELinux özelinde geliştirilmiş halidir. Repo adresi: https://github.com/eckucukoglu/arm-linux-gnueabihf

Kernel olarak 3.10.80 Linux kernel’i kullanılacaktır. 
omap2plus_defconfig ile konfigüre edilen kernelde, ardindan ethernet için usb, eger pandaboard es chipsee expansion board kullaniliyorsa, ekranı için chipsee dpi, input device için touchscreen ads7846 sürücüleri açılabilir.

Ardından SELinux için gerekli konfigurasyon ayarları açılmalıdır. Bunlar:

Ayrıca kullanılan filesystem için ‘extended attribute’ desteği açılmalıdır. Bunlar ise (ext2 filesystem için):

Diğer SELinux ayarları da incelenip, ihtiyaca göre kullanılabilinir. Bunlara ek olarak debug amaçlı low-level debugging özelliği de açılabilir.

Userspace seviyesinde SELinux

Userspace’de selinux kütüphanelerini derledikten sonra rootfs içerisine koymalıyız. Fakat öncelikle buildroot ile ihtiyaç duyulan temel araçları içeren bir rootfs paketi cikartilabilinir.

Cikan rootfs icerisinde asagidaki degisiklikler, ihtiyaca gore, uygulanabilir:

  • NFS kullanildigi durumda, /etc/network/interfaces dosyasından dhcp servisi kapatılmalı, cihaz nfs kullanıyorsa network bilgileri girilmelidir.
  • auditd kullaniliyor ve baslatilmasinda sikinti varsa: /etc/audit/auditd.conf dosyasının owner’ı değiştirilmeli ve dispatcher adresi güncellenmeli. (audit deamon çalışması için yapılmaktadır. /etc/init.d/S01auditd start yazarak manuel başlatılarak, hata vermesi durumunda /var/log/messages kontrol edilebilinir.)
  • libpcre.so.3 (sistemdeki libpcre’e bağlanacak) symlink oluşturulmalı. (buildroot rootfs’lerinde karsilastigim bir hata, cozumunu bu sekilde sagliyorum.)
  • m4 binary’si /usr/bin içerisine atılacak. (refpolicy-arm için gerekli)

Bu işlemlerin ardından şu repodaki selinux derlenmelidir: https://github.com/eckucukoglu/selinux-arm
Derleme esnasında yine aynı toolchain kullanılacaktır. Çıkan dosyalar olduğu gibi rootfs içerisine kopyalanabilir.

Reference policy yükleme

Sistemimizde SELinux userspace kütüphaneleri ve araçları yer alıyorsa, bir sonraki aşamada SELinux reference policy project derlenerek sisteme yüklenmelidir. Bu policy içerisinde, gömülü bir sistemin ihtiyaçlarından çok fazlası yer almaktadır. Bu nedenle direkt olarak reference policy’nin kullanılması doğru değildir. Gömülü, mobil sistemlerin ihtiyaçları doğrultusunda aşamalı olarak kırpılması gerekmektedir.

Reference policy project için su repo kullanilmistir: https://github.com/eckucukoglu/refpolicy-arm

Burada önemli olan nokta contrib modülü (policy/modules/contrib) bir subproject olduğu için, proje clone’lanırken bu dizin içindeki dosyaların varlığı kontrol edilmelidir.

Proje içinde çalışmaya başlamadan önce “make bare” diyerek olası ihtiyaç dışı dosyaları temizlemek gerekebilir.
Öncelikle build.conf dosyası aşağıdaki ayarlar geçerli olacak şekilde güncellenmiştir:

Ardından derleme işlemine geçmeden önce, sistemin ihtiyaç duyduğu libaudit.so desteği sağlanmalıdır. Eğer sistemde mevcut bir libaudit.so dosyası varsa, ihtiyaç duyulana linklenebilir. Örnek vermek gerekirse sistemde libaudit.so.0 aranıyor fakat libaudit.so.1 mevcut ise, şu şekilde bağlantı oluşturulabilinir:

modular seçim için:

Bu işlemlerin ardından rootfs içerisine, policy derleme ve yükleme işlemleri esnasında ihtiyaç duyulacak aşağıdaki uygulamalar derlenerek sistem içerisine atılmalıdır:

  • m4 (make conf esnasında kullanılır)
  • gawk (make base esnasında kullanılır)
  • make
  • python

İlerde çağrılacak komutlardan make conf için xml.dom.minidom paketi gerekmektedir. Bu sebeple python’un derlenirken içerisinde bu paketin ve bağlantılı paketlerin yer aldığından emin olmak gerekiyor.

Burada python için libtinfo, libssl, libcrypto kütüphaneleri sistemde hazır bulunmalıdır.

Bu işlemlerin ardından sırasıyla aşağıdaki komutlar çalıştırılacaktır. İşlevlerini öğrenmek için SELinux notebook sayfa 256-257’ye bakılabilir.

monolithic seçim için:

Buildroot üzerinden  çıkartılan rootfs üzerine, (bu sistemde gawk, python, auditd, setools, make yüklü olmalidir) şu işlemler yapılmalıdır:

  • m4 sistem içerisine yüklenmelidir.
  • ardından refpolicy-arm içerisinde sırasıyla şu komutlar çalıştırılmalıdır:

Reference policy işlemlerinin ardından /etc/selinux/config dosyasının aşağıdaki içerik ile oluşturulması gerekmektedir: