Sistem keamanan Linux

Salah satu alasan keberhasilan luar biasa OS Linux pada perangkat seluler dan server tertanam adalah tingkat keamanan yang tinggi di kernel, layanan dan aplikasi terkait. Tetapi jika Anda melihat lebih dekat pada arsitektur kernel Linux, Anda tidak dapat menemukan kotak di dalamnya yang bertanggung jawab atas keamanan, seperti itu. Di mana subsistem keamanan Linux bersembunyi dan terdiri dari apa?



Latar Belakang Modul Keamanan Linux dan SELinux



Security Enhanced Linux adalah sekumpulan aturan dan mekanisme akses berdasarkan model akses wajib dan berbasis peran untuk melindungi sistem Linux dari potensi ancaman dan memperbaiki kelemahan Discretionary Access Control (DAC), sistem keamanan Unix tradisional. Proyek ini bermula dari Badan Keamanan Nasional AS, terutama kontraktor Secure Computing Corporation dan MITER, serta sejumlah laboratorium penelitian, yang terlibat langsung dalam pengembangan.





Modul Keamanan Linux



Linus Torvalds telah membuat sejumlah komentar tentang perkembangan NSA baru sehingga mereka dapat dimasukkan ke dalam kernel Linux hulu. Dia menggambarkan lingkungan umum, dengan satu set interseptor untuk mengelola operasi dengan objek dan satu set beberapa bidang pelindung dalam struktur data kernel untuk menyimpan atribut yang sesuai. Lingkungan ini kemudian dapat digunakan oleh modul kernel yang dapat dimuat untuk mengimplementasikan model keamanan yang diinginkan. LSM sepenuhnya dimasukkan ke dalam kernel Linux v2.6 pada tahun 2003.



Kerangka kerja LSM mencakup bidang penjaga dalam struktur data dan panggilan untuk mencegat fungsi pada titik kritis dalam kode kernel untuk mengelolanya dan melakukan kontrol akses. Ini juga menambahkan fungsionalitas untuk mendaftarkan modul keamanan. Antarmuka / sys / kernel / security / lsm berisi daftar modul aktif pada sistem. Kait LSM disimpan dalam daftar, yang dipanggil dalam urutan yang ditentukan di CONFIG_LSM. Dokumentasi hook terperinci disertakan dalam file header include / linux / lsm_hooks.h.



Subsistem LSM memungkinkan integrasi SELinux lengkap dari kernel Linux stabil v2.6 yang sama. SELinux hampir segera menjadi standar de facto untuk lingkungan Linux yang aman dan menjadi bagian dari distribusi paling populer: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.



Daftar Istilah SELinux



  • — SELinux , Unix/Linux user id, , . Linux SELinux. SELinux , , — .
  • — SELinux , . . . , . — , . : sysadm_t , user_t, . init init_t, named named_t.
  • — , SELinux. , . . Role Based Access Control (RBAC), SELinux.
  • — Type Enforcement, , . , , , , , , . .
  • — , . : , , ., , , — .
  • SELinux — SELinux . SELinux , — — . , . .


LSM SELinux



Meskipun namanya, LSM umumnya bukan modul yang dapat dimuat Linux. Namun, seperti SELinux, ini terintegrasi langsung ke dalam kernel. Setiap perubahan pada kode sumber LSM membutuhkan kompilasi kernel baru. Opsi terkait harus diaktifkan di pengaturan kernel, jika tidak, kode LSM tidak akan diaktifkan setelah boot. Meski begitu, ini bisa diaktifkan dengan opsi OS bootloader.





LSM check stack



LSM dilengkapi dengan kait di fungsi inti inti yang mungkin relevan untuk pemeriksaan. Salah satu ciri utama LSM adalah bahwa mereka bertumpuk. Dengan demikian, pemeriksaan standar tetap dilakukan, dan setiap lapisan LSM hanya menambahkan kontrol dan kontrol tambahan. Artinya, larangan tersebut tidak dapat dibatalkan. Hal ini terlihat pada gambar, jika hasil pemeriksaan DAC rutin gagal, bahkan tidak sampai ke kait LSM.



SELinux telah mengadopsi arsitektur keamanan Flask dari sistem operasi penelitian Fluke, khususnya prinsip hak istimewa terendah. Inti dari konsep ini, seperti yang tersirat dari namanya, adalah untuk memberikan pengguna atau memproses hanya hak-hak yang diperlukan untuk melakukan tindakan yang dimaksudkan. Prinsip ini diimplementasikan dengan menggunakan akses pengetikan paksa, sehingga kontrol penerimaan SELinux didasarkan pada model domain => type.



Karena akses pengetikan paksa, SELinux memiliki kemampuan kontrol akses yang jauh lebih signifikan daripada model DAC tradisional yang digunakan di Unix / Linux OS. Misalnya, Anda dapat membatasi nomor port jaringan yang akan terjadi pada server ftp, mengizinkan penulisan dan pengubahan file dalam folder tertentu, tetapi tidak menghapusnya.



Komponen utama SELinux adalah:



  • Server Penegakan Kebijakan - Mekanisme utama untuk mengatur kontrol akses.
  • Basis data kebijakan keamanan sistem.
  • Interaksi dengan interseptor acara LSM.
  • Selinuxfs - Pseudo-FS, sama dengan / proc dan dipasang di / sys / fs / selinux. Diisi secara dinamis oleh kernel Linux saat runtime dan berisi file yang berisi informasi status SELinux.
  • Akses Cache Vektor - Pembantu Kinerja.




Bagaimana SELinux bekerja



Semua ini bekerja sebagai berikut.



  1. Subjek tertentu, dalam istilah SELinux, melakukan tindakan yang diizinkan pada suatu objek setelah pemeriksaan DAC, seperti yang ditunjukkan pada gambar atas. Permintaan untuk melakukan operasi ini ditujukan ke interseptor acara LSM.
  2. Dari sana, permintaan, bersama dengan konteks keamanan subjek dan objek, diteruskan ke modul SELinux Abstraction dan Hook Logic yang bertanggung jawab untuk berinteraksi dengan LSM.
  3. Server Penegakan Kebijakan adalah contoh untuk memutuskan akses subjek ke objek, dan data dari SELinux AnHL datang ke sana.
  4. Untuk membuat keputusan tentang akses atau penolakan, Policy Enforcement Server berkonsultasi dengan subsistem caching dari aturan Access Vector Cache (AVC) yang paling banyak digunakan.
  5. Jika solusi untuk aturan terkait tidak ditemukan di cache, maka permintaan diteruskan ke database kebijakan keamanan.
  6. Hasil pencarian dari DB dan AVC dikembalikan ke Server Penegakan Kebijakan.
  7. Jika kebijakan yang ditemukan konsisten dengan tindakan yang diminta, maka operasi diizinkan. Jika tidak, operasi dilarang.


Mengelola Pengaturan SELinux



SELinux beroperasi dalam salah satu dari tiga mode:



  • Penegakan - Kepatuhan yang ketat terhadap kebijakan keamanan.
  • Permisif - pelanggaran batasan diperbolehkan, tanda yang sesuai dibuat di log.
  • Dinonaktifkan - Kebijakan keamanan tidak berlaku.


Anda dapat melihat mode SELinux dengan perintah berikut.



[admin@server ~]$ getenforce
Permissive


Mengubah mode sebelum reboot, misalnya, mengaturnya ke menegakkan, atau 1. Parameter permisif sesuai dengan kode numerik 0.



[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #  


Anda juga dapat mengubah mode dengan mengedit file:



[admin@server ~]$ cat /etc/selinux/config


# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELINUX=enforcing

# SELINUXTYPE= can take one of three values:

# targeted - Targeted processes are protected,

# minimum - Modification of targeted policy. Only selected processes are protected.

# mls - Multi Level Security protection.



SELINUXTYPE = targete



Perbedaan dengan setenfoce adalah ketika sistem operasi melakukan booting, mode SELinux akan disetel sesuai dengan nilai parameter SELINUX dari file konfigurasi. Selain itu, perubahan untuk memberlakukan <=> dinonaktifkan hanya berlaku melalui pengeditan file / etc / selinux / config dan setelah boot ulang.



Lihat laporan status singkat:



[admin@server ~]$ sestatus


SELinux status: enabled

SELinuxfs mount: /sys/fs/selinux

SELinux root directory: /etc/selinux

Loaded policy name: targeted

Current mode: permissive

Mode from config file: enforcing

Policy MLS status: enabled

Policy deny_unknown status: allowed

Max kernel policy version: 31


Beberapa utilitas asli menggunakan parameter -Z untuk melihat atribut SELinux.



[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd


Dibandingkan dengan keluaran ls -l biasa, ada beberapa field tambahan dalam format berikut:



<user>:<role>:<type>:<level>



Field terakhir menunjukkan sesuatu seperti cap kerahasiaan dan terdiri dari kombinasi dua elemen:



  • s0 - signifikansi, juga ditulis sebagai interval tingkat rendah-tinggi
  • c0, c1… c1023 - kategori.


Perubahan konfigurasi akses



Gunakan semodule untuk memuat modul SELinux, menambah dan menghapusnya.



[admin@server ~]$ semodule -l |wc -l #  
408
[admin@server ~]$ semodule -e abrt #enable -  
[admin@server ~]$ semodule -d accountsd #disable -  
[admin@server ~]$ semodule -r avahi #remove -  


Perintah pertama, semanage login, mengikat pengguna SELinux ke pengguna sistem operasi, yang kedua menampilkan daftar. Akhirnya, perintah terakhir dengan tombol -r menghapus pemetaan dari pengguna SELinux ke akun OS. Penjelasan tentang sintaks nilai MLS / MCS Range ditemukan di bagian sebelumnya.



[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l


Login Name SELinux User MLS/MCS Range Service

__default__ unconfined_u s0-s0:c0.c1023 *

root unconfined_u s0-s0:c0.c1023 *

system_u system_u s0-s0:c0.c1023 *

[admin@server ~]$ semanage login -d karol



Perintah semanage user digunakan untuk mengelola pemetaan antara SELinux pengguna dan peran.



[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u


Parameter perintah:



  • -a menambahkan entri pemetaan peran khusus;
  • -l daftar korespondensi antara pengguna dan peran;
  • -d menghapus entri pemetaan peran yang ditentukan pengguna;
  • -R daftar peran yang diberikan kepada pengguna;


File, port, dan boolean



Setiap modul SELinux menyediakan seperangkat aturan untuk menandai file, tetapi Anda juga dapat menambahkan aturan khusus jika diperlukan. Misalnya, kami ingin server web memiliki hak akses ke folder / srv / www.



[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/


Perintah pertama mendaftarkan aturan penandaan baru, dan perintah kedua menyetel ulang, atau lebih tepatnya menyetel, jenis file sesuai dengan aturan saat ini.



Demikian pula, port TCP / UDP ditandai sehingga hanya layanan terkait yang dapat mendengarkannya. Misalnya, agar server web dapat mendengarkan pada port 8080, Anda perlu menjalankan perintah.



[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080


Sejumlah besar modul SELinux memiliki parameter yang dapat menerima nilai boolean. Seluruh daftar parameter tersebut dapat dilihat dengan Getsebool -a. Nilai Boolean dapat diubah dengan setsebool.



[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off


Lokakarya, Akses antarmuka web Pgadmin



Pertimbangkan contoh dari latihan, kami menginstal di RHEL 7.6 pgadmin4-web untuk administrasi database PostgreSQL. Kami melakukan pencarian kecil dengan mengatur pg_hba.conf, postgresql.conf dan config_local.py, mengatur hak ke folder, memasang modul Python yang hilang dari pip. Semuanya sudah siap, jalankan dan dapatkan 500 Server Internal error .







Dimulai dengan tersangka biasa, memeriksa / var / log / httpd / error_log. Ada beberapa entri menarik disana. Pada titik ini, sebagian besar administrator Linux akan tergoda untuk menjalankan setencorce 0, dan hanya itu. Terus terang, pertama kali saya melakukannya. Ini, tentu saja, juga merupakan jalan keluar, tetapi jauh dari yang terbaik.



[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0

...

[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'

[timestamp] [wsgi:error] [pid 23690]

[timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on

[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.








Meskipun desainnya rumit, SELinux bisa jadi ramah pengguna. Ini cukup untuk menginstal paket setroubleshoot dan melihat log sistem. Perhatikan bahwa layanan auditd harus dimulai ulang dengan cara ini, dan tidak menggunakan systemctl, meskipun ada systemd di OS. Log sistem akan menunjukkan tidak hanya fakta pemblokiran, tetapi juga alasan dan cara untuk mengatasi larangan tersebut . Kami menjalankan perintah ini: Kami memeriksa akses ke halaman web pgadmin4-web, semuanya berfungsi.



[admin@server ~]$ yum install setroubleshoot

[admin@server ~]$ journalctl -b -0

[admin@server ~]$ service restart auditd
















[admin@server ~]$ setsebool -P httpd_can_network_connect 1

[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1















All Articles