Sistem keamanan Linux

Salah satu alasan kesuksesan besar tersebut Linux Sistem operasi pada perangkat tertanam, perangkat seluler, dan server memiliki tingkat keamanan yang cukup tinggi untuk kernel, layanan terkait, dan aplikasi. Tetapi jika Lihat lebih dekat ke arsitektur kernel LinuxJika demikian, Anda tidak akan menemukan bagian mana pun di dalamnya yang bertanggung jawab atas keamanan. Di manakah subsistem keamanan itu berada? Linux Lalu, isinya terdiri dari apa?

prasejarah Linux Modul Keamanan dan SELinux

Keamanan Ditingkatkan Linux adalah seperangkat aturan dan mekanisme akses berdasarkan model akses wajib dan berbasis peran untuk melindungi sistem. Linux Proyek ini bertujuan untuk mengatasi potensi ancaman dan memperbaiki kelemahan Discretionary Access Control (DAC), sebuah sistem keamanan Unix tradisional. Proyek ini berawal dari Badan Keamanan Nasional AS, dengan pengembangan terutama dilakukan oleh kontraktor Secure Computing Corporation dan MITRE, serta sejumlah laboratorium penelitian.

Sistem keamanan Linux
Linux Modul Keamanan

Linus Torvalds memberikan sejumlah komentar tentang perkembangan baru NSA agar dapat dimasukkan ke dalam kernel utama. LinuxIa menjelaskan lingkungan umum, dengan serangkaian pencegat untuk mengelola operasi objek dan serangkaian 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 apa pun yang diinginkan. LSM kemudian terintegrasi sepenuhnya ke dalam kernel. Linux v2.6 pada tahun 2003.

Kerangka kerja LSM mencakup bidang penjaga dalam struktur data dan panggilan ke fungsi intersepsi pada titik-titik penting dalam kode kernel untuk memanipulasinya dan melakukan kontrol akses. Itu 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 dalam CONFIG_LSM. Dokumentasi rinci tentang hook disertakan dalam file header include/linux/lsm_hooks.h.

Subsistem LSM memungkinkan integrasi penuh SE.Linux versi kernel stabil yang sama Linux v2.6. Secara harfiah langsung SELinux telah menjadi standar de facto untuk lingkungan yang aman Linux dan menjadi bagian dari distribusi paling populer: RedHat Enterprise Linux, fedora, Debian, Ubuntu.

SE GlosariumLinux

  • Identitas — Pengguna SELinux tidak sama dengan Unix/ biasaLinux ID pengguna, mereka dapat berd coexistence pada sistem yang sama, tetapi pada dasarnya sangat berbeda. Setiap akun standar Linux mungkin cocok dengan satu atau lebih di SELinuxIdentitas SELinux merupakan bagian integral dari konteks keamanan keseluruhan yang menentukan domain mana yang dapat diakses dan mana yang tidak.
  • Domain — Di SELinux Domain adalah konteks eksekusi suatu subjek, yaitu suatu proses. Domain secara langsung menentukan akses yang dimiliki suatu proses. Pada dasarnya, domain adalah daftar hal-hal yang dapat dilakukan oleh suatu proses atau tindakan apa yang dapat dilakukan oleh suatu proses dengan berbagai tipe. Beberapa contoh domain adalah sysadm_t untuk administrasi sistem, dan user_t, yang merupakan domain pengguna biasa tanpa hak istimewa. Sistem init berjalan di domain init_t, dan proses bernama berjalan di domain named_t.
  • Peran — Apa yang berfungsi sebagai perantara antara domain dan pengguna SE?LinuxPeran menentukan domain mana yang dapat diakses pengguna dan jenis objek apa yang dapat mereka akses. Mekanisme kontrol akses ini mencegah ancaman serangan peningkatan hak akses. Peran diintegrasikan ke dalam model keamanan Kontrol Akses Berbasis Peran (RBAC) yang digunakan di SE.Linux.
  • jenis — Atribut daftar Penegakan Tipe yang ditetapkan ke suatu objek dan menentukan siapa yang dapat mengaksesnya. Mirip dengan definisi domain, hanya saja domain berlaku untuk suatu proses, dan tipe berlaku untuk objek seperti direktori, file, soket, dll.
  • Subjek dan objek - Proses adalah subjek dan dijalankan dalam konteks tertentu, atau domain keamanan. Sumber daya sistem operasi: file, direktori, soket, dll., adalah objek yang diberi tipe tertentu, dengan kata lain, tingkat privasi.
  • Kebijakan SELinux - Untuk melindungi sistem SELinux menggunakan berbagai kebijakan. Kebijakan SELinux Menentukan akses pengguna ke peran, peran ke domain, dan domain ke tipe. Pertama, pengguna diotorisasi ke suatu peran, kemudian peran tersebut diotorisasi untuk mengakses domain. Terakhir, suatu domain mungkin hanya memiliki akses ke tipe objek tertentu.

Arsitektur LSM dan SELinux

Terlepas dari namanya, LSM sebenarnya bukanlah modul yang dapat dimuat. LinuxNamun, sama seperti SELinux, ia terintegrasi langsung ke dalam kernel. Setiap perubahan pada kode sumber LSM memerlukan kompilasi kernel baru. Opsi yang sesuai harus diaktifkan dalam pengaturan kernel, jika tidak, kode LSM tidak akan diaktifkan setelah booting. Namun, bahkan dalam kasus ini, ia dapat diaktifkan melalui opsi bootloader OS.

Sistem keamanan Linux
Tumpukan pemeriksaan LSM

LSM dilengkapi dengan pengait pada fungsi kernel inti yang relevan untuk pemeriksaan. Salah satu fitur utama LSM adalah sifatnya yang 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 ditunjukkan pada gambar, jika hasil pemeriksaan DAC rutin gagal, maka masalah tersebut bahkan tidak akan sampai ke LSM hooks.

SELinux Mengadopsi arsitektur keamanan Flask dari sistem operasi riset Fluke, khususnya prinsip hak akses minimal (least privilege). Inti dari konsep ini, seperti namanya, adalah memberikan pengguna atau proses hanya hak yang diperlukan untuk melakukan tindakan yang dimaksud. Prinsip ini diimplementasikan melalui penentuan tipe akses wajib (mandatory access typing), sehingga mengontrol hak akses di SE.Linux berdasarkan model domain => tipe.

Terima kasih kepada pengetikan paksa akses SELinux memiliki kemampuan kontrol akses yang jauh lebih signifikan daripada model DAC tradisional yang digunakan di sistem operasi Unix.LinuxSebagai contoh, Anda dapat membatasi nomor port jaringan yang akan didengarkan oleh server FTP, sehingga memungkinkan penulisan dan modifikasi file di folder tertentu, tetapi tidak menghapusnya.

Komponen utama SELinux adalah sebagai berikut:

  • Server Penegakan Kebijakan — Mekanisme utama untuk mengatur kontrol akses.
  • Basis data kebijakan keamanan sistem.
  • Interaksi dengan pencegat acara LSM.
  • Selinuxfs — Sebuah pseudo-FS, sama seperti /proc dan dipasang di /sys/fs/selinux. Diisi secara dinamis oleh kernel. Linux selama eksekusi dan berisi file yang memuat informasi tentang status SE.Linux.
  • Akses Cache Vektor — Mekanisme tambahan untuk meningkatkan produktivitas.

Sistem keamanan Linux
Skema Operasi SELinux

Semuanya bekerja seperti ini.

  1. Suatu subjek tertentu, dalam istilah SE.Linux, melakukan tindakan yang diizinkan pada objek setelah verifikasi DAC, seperti yang ditunjukkan pada gambar di atas. Permintaan untuk melakukan operasi ini diteruskan ke pencegat peristiwa LSM.
  2. Dari situ, permintaan, bersama dengan konteks keamanan subjek dan objek, diteruskan ke modul SE.Linux Abstraksi dan Logika Kait, bertanggung jawab atas interaksi dengan LSM.
  3. Otoritas pengambilan keputusan terkait akses subjek ke suatu objek adalah Policy Enforcement Server, dan server ini menerima data dari SE.Linux AnHL.
  4. Untuk membuat keputusan tentang akses atau penolakan, Server Penegakan Kebijakan beralih ke subsistem cache Access Vector Cache (AVC) untuk aturan yang paling sering digunakan.
  5. Jika solusi untuk aturan terkait tidak ditemukan di cache, maka permintaan diteruskan ke database kebijakan keamanan.
  6. Hasil pencarian dari database dan AVC dikembalikan ke Server Penegakan Kebijakan.
  7. Jika kebijakan yang ditemukan cocok dengan tindakan yang diminta, maka operasi diperbolehkan. Jika tidak, operasi tersebut dilarang.

Mengelola pengaturan SELinux

SELinux beroperasi dalam salah satu dari tiga mode:

  • Penegakan - Kepatuhan yang ketat terhadap kebijakan keamanan.
  • Permisif - Pelanggaran batasan diperbolehkan; catatan terkait dibuat di jurnal.
  • Disabled—Kebijakan keamanan tidak berlaku.

Lihat mode SE apa yang sedang aktifLinux Anda dapat melakukannya dengan perintah berikut.

[admin@server ~]$ getenforce
Permissive

Mengubah mode sebelum reboot, misalnya menyetelnya ke enforcing, 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=target

Perbedaannya dengan setenforce adalah bahwa ketika sistem operasi melakukan booting, mode SELinux akan diatur sesuai dengan nilai parameter file konfigurasi SELINUX. Selain itu, perubahan pada penegakan <=> dinonaktifkan hanya akan berlaku setelah mengedit file /etc/selinux/config dan setelah reboot.

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

Untuk melihat atribut SELinux Beberapa utilitas standar menggunakan parameter -Z.

[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 normal ls -l, ada beberapa kolom tambahan dalam format berikut:

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

Bidang terakhir menunjukkan sesuatu seperti klasifikasi keamanan dan terdiri dari kombinasi dua elemen:

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

Mengubah konfigurasi akses

Gunakan semodule untuk memuat modul SE.Linux, tambahkan dan hapus.

[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 - удалить модуль

Tim pertama login semanage menghubungkan pengguna SELinux Dengan pengguna sistem operasi, perintah kedua menampilkan daftar. Terakhir, perintah terakhir dengan opsi -r menghapus pemetaan pengguna SE.Linux ke akun OS. Sintaks nilai Rentang MLS/MCS dijelaskan 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

Tim pengguna semanage Digunakan untuk mengelola pemetaan antara pengguna dan peran SE.Linux.

[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 tambahkan entri pemetaan peran khusus;
  • -l daftar pengguna dan peran yang cocok;
  • -d menghapus entri pemetaan peran pengguna;
  • -R daftar peran yang melekat pada pengguna;

File, Port, dan Nilai Boolean

Setiap modul SELinux Menyediakan serangkaian aturan penandaan file, tetapi Anda juga dapat menambahkan aturan Anda sendiri jika diperlukan. Misalnya, kita ingin memberikan hak akses server web 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 mengatur ulang, atau lebih tepatnya menyetel, jenis file sesuai dengan aturan saat ini.

Demikian pula, port TCP/UDP ditandai sedemikian rupa sehingga hanya layanan yang sesuai yang dapat mendengarkannya. Misalnya, agar server web 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. Daftar lengkap parameter tersebut dapat dilihat menggunakan getsebool -a. Nilai Boolean dapat diubah menggunakan 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, dapatkan akses ke antarmuka web Pgadmin

Mari kita lihat contoh praktisnya: kita menginstal pgadmin7.6-web di RHEL 4 untuk mengelola database PostgreSQL. Kami berjalan sedikit Pencarian dengan pengaturan pg_hba.conf, postgresql.conf dan config_local.py, mengatur izin folder, menginstal modul Python yang hilang dari pip. Semuanya sudah siap, kami luncurkan dan terima 500 Internal Server Error.

Sistem keamanan Linux

Kita mulai dengan tersangka yang umum, memeriksa /var/log/httpd/error_log. Ada beberapa entri menarik di sana.

[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.

Di sinilah sebagian besar administrator berada. Linux Akan ada godaan besar untuk menjalankan setencorce 0, dan selesai. Terus terang, itulah yang saya lakukan pertama kali. Itu memang solusi, tetapi jauh dari yang terbaik.

Terlepas dari ukuran desain SE yang besarLinux Cara penggunaannya cukup mudah. ​​Cukup instal paket setroubleshoot dan lihat log sistem.

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

Harap dicatat bahwa layanan auditd harus dimulai ulang dengan cara ini, dan tidak menggunakan systemctl, meskipun ada systemd di OS. Di log sistem akan ditunjukkan bukan hanya fakta pemblokiran, tetapi juga alasan dan cara untuk mengatasi larangan tersebut.

Sistem keamanan Linux

Kami menjalankan perintah ini:

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

Kami memeriksa akses ke halaman web pgadmin4-web, semuanya berfungsi.

Sistem keamanan Linux

Sistem keamanan Linux

Sumber: www.habr.com

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster