Pengenalan kepada Konsep dan Pengurusan Selinux

Pengenalan kepada Konsep dan Pengurusan Selinux

Objektif

Pengenalan kepada Konsep dan Pengurusan Selinux

Sistem operasi dan versi perisian

  • Sistem operasi: - Pengedaran Linux Agnostik

Keperluan

  • Akses Root pada Pemasangan Linux Kerja dengan Polisi Selinux yang sah
  • Pakej PolicyCoreUtils: Ia menyediakan getsebool, setsebool, utiliti restorecon
  • Pakej CoreUtils: Menyediakan Utiliti CHCON
  • Pakej PolicCoreUtils-Python: Menyediakan Komando Semenage
  • PolicyCoreUtils-Newrole: Menyediakan Program Newrole
  • Setools-Console: Menyediakan Perintah Seinfo

Kesukaran

Medium

Konvensyen

  • # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
  • $ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Pengenalan

Selinux (Linux yang dipertingkatkan keselamatan) adalah pelaksanaan Sistem Kebenaran Kawalan Akses Mandatori (MAC) dalam kernel Linux. Kawalan akses jenis ini berbeza daripada sistem kawalan akses budi bicara (DAC) seperti ACLS dan keizinan UNIX UGO/RWX standard, bagaimana akses kepada sumber disediakan. Dalam kes Mac bukan pemilik sumber yang memutuskan siapa dan bagaimana dapat mengaksesnya: akses ini berdasarkan hubungan antara domain dan label, yang ditentukan oleh dasar dan dikuatkuasakan di peringkat kernel. Penting untuk mengatakan bahawa peraturan yang dikuatkuasakan Selinux dan keizinan sistem standard tidak saling eksklusif, dan yang pertama dilaksanakan selepas yang terakhir.

Status selinux yang mungkin

Terdapat tiga status selinux yang mungkin: dilumpuhkan, permisif dan menguatkuasakan. Dalam kes pertama selinux sepenuhnya: ia tidak mempunyai kesan ke atas sistem yang sedang berjalan. Apabila dalam mod permisif selinux aktif: ia log pelanggaran dasar, tetapi tidak ada apa -apa untuk menyekat mereka. Akhirnya, ketika dalam menguatkuasakan mod, Selinux sebenarnya menguatkuasakan dasarnya.

Terdapat banyak cara anda boleh menyemak status selinux di sistem anda. Yang pertama menggunakan arahan yang dipanggil getenforce. Perintah ini hanya melaporkan dalam tiga status yang disebutkan di atas selinux adalah. Untuk mempunyai output yang lebih verbose, anda boleh menggunakan utiliti Sestatus. Ini adalah output arahan pada sistem saya (CentOS 7):

STATUS SELINUX: Direktori Root yang Diaktifkan Selinuxfs:/SYS/FS/SELinux Selinux Root:/etc/SELinux Nama Dasar yang Dimuatkan: Mod semasa yang disasarkan: Mod Penguatkuasa : 28 

Beberapa maklumat berguna disediakan: Pertama sekali Selinuxfs mountpoint, Dalam kes ini/sys/fs/selinux. Selinuxfs adalah sistem fail pseudo, seperti /proc: ia dihuni semasa runtime oleh kernel linux dan mengandungi fail yang berguna untuk mendokumenkan status selinux. The Direktori Root Selinux adalah, sebaliknya, jalan yang digunakan untuk menyimpan fail konfigurasi selinux, yang utama adalah/etc/selinux/config (pautan simbolik ke fail ini juga terdapat di/etc/sysconfig/selinux). Menukar fail ini secara langsung adalah cara yang paling mudah untuk mengubah status dan mod Selinux. Mari kita lihat dengan ringkas kandungannya:

$ kucing/etc/selinux/config # Fail ini mengawal keadaan selinux pada sistem. # Selinux = boleh mengambil salah satu daripada tiga nilai ini: # menguatkuasakan - dasar keselamatan selinux dikuatkuasakan. # Permissive - Selinux mencetak amaran bukannya menguatkuasakan. # dilumpuhkan - tidak ada dasar selinux yang dimuatkan. Selinux = menguatkuasakan # selinuxtype = boleh mengambil satu daripada tiga nilai: # sasaran - proses sasaran dilindungi, # minimum - pengubahsuaian dasar yang disasarkan. Hanya proses terpilih yang dilindungi. # mls - Perlindungan keselamatan pelbagai peringkat. Selinuxtype = disasarkan 

Fail ini sangat baik: Dengan menukar nilai pembolehubah Selinux dan SelinuxType, kita boleh menetapkan masing -masing status Selinux dan mod Selinux. Mod yang mungkin adalah: disasarkan (lalai), minimum dan mls. Mod yang disasarkan adalah lalai: Apabila mod ini aktif semua proses yang disasarkan dilindungi. Mod minimum adalah subset yang pertama, di mana hanya proses tertentu yang dilindungi. Akhirnya dasar MLS adalah yang paling canggih, berdasarkan konsep klasifikasi keselamatan: dari yang tidak dikelaskan hingga rahsia teratas: ia menggunakan model Bell-La Padula, yang dibangunkan untuk Jabatan Pertahanan AS.

Menukar status selinux

Untuk menukar status Selinux semasa runtime, anda boleh menggunakan Setenforce perintah. Sintaksnya sangat mudah: anda menentukan status yang anda mahu meletakkan selinux, memilih antara menguatkuasakan atau permisif atau memberikan nilai boolean yang dirujuk kepada status penguatkuasaan. Apa yang anda tidak dapat lakukan dengan arahan ini adalah untuk melumpuhkan selinux sepenuhnya. Untuk mencapai ini (tidak disyorkan) dan membuat perubahan berterusan lain, anda mesti mengedit fail konfigurasi utama, seperti yang dilihat di atas. Perubahan yang dibuat pada fail ini digunakan selepas reboot.

Bagaimana selinux berfungsi?

Pada dasarnya selinux berfungsi pada konsep entiti: subjek, objek dan tindakan. Subjek adalah aplikasi atau proses (pelayan HTTP sebagai contoh), objek adalah sumber pada sistem, seperti fail, soket, atau port. Akhirnya tindakan adalah apa yang boleh dilakukan oleh subjek tertentu di objek. Subjek berjalan di bawah domain tertentu, yang, sebagai contoh, dalam hal daemon HTTPD adalah httpd_t. Ini mudah diverifikasi dengan memeriksa proses berjalan dengan arahan PS: Apa yang perlu kita lakukan ialah menambah suis -z (-z suis sering dikaitkan dengan selinux pada arahan yang menyokongnya, seperti LS misalnya):

$ ps -auxz | GREP HTTPD 

Perintah di atas memberikan hasil berikut (output dipotong):

System_u: System_R: httpd_t: s0 apache 2340 0.0 0.2 221940 2956 ? S 14:20 0:00/usr/sbin/httpd -dforeground 

Berlari di bawah domain HTTPD_T, Perkhidmatan HTTPD (Subjek) hanya boleh mengakses (Tindakan) Sumber (Objek) dalam jenis Selinux yang berkaitan. Cara yang sangat mudah untuk mengesahkan ini adalah dengan memeriksa direktori /var /www. Daemon httpd mesti dapat mengaksesnya, jadi mari periksa jenis jenis direktori ini. Kita boleh melakukannya dengan menggunakan arahan LS dengan suis -z:

$ ls -dz /var /www 

Perintah memberi kita hasil ini:

System_u: object_r: httpd_sys_content_t: s0 /var /www 

Output menunjukkan kepada kita konteks Selinux yang lengkap, dan direktori /var /www yang dilabelkan dengan jenis ttpd_sys_content_t. Ini masuk akal: dasar selinux yang disasarkan membolehkan proses berjalan di bawah domain httpd_t untuk mengakses (dalam mod baca sahaja) semua fail yang dilabelkan dengan jenis httpd_sys_content_t, tidak kira apa kebenaran DAC ditetapkan pada fail. Sekiranya proses itu akan mencuba apa -apa tindakan yang tidak dijangka oleh polisi, Selinux akan log ralat, dan, jika dalam menguatkuasakan mod, menghalang tindakan itu sendiri.

Pengguna Selinux

Kami melihat di atas bagaimana perwakilan konteks Selinux lengkap nampaknya berstruktur:

system_u: object_r: httpd_sys_content_t: s0 

Mari menganalisis struktur ini dengan mengambil kira tiga bahagian pertama (keempat dirujuk ke mod MLS). Bahagian pertama adalah mengenai pengguna Selinux: Setiap pengguna Selinux mempunyai set sekatan yang berbeza dan diberi kuasa
Untuk memainkan hanya satu set spesifik peranan selinux yang memberikan akses kepada domain selinux tertentu, yang seterusnya dapat mengakses hanya mengaitkan jenis selinux.

Pengguna selinux boleh memainkan peranan selinux boleh pergi ke domain selinux mempunyai akses kepada jenis selinux 

Untuk mempunyai idea yang jelas tentang pengguna Selinux yang ada, kita boleh menjalankan:

# Pengguna Semanage -l

Perintah ini memberi kita pandangan keseluruhan yang jelas tentang pengguna - Peranan Hubungan:

Selinux Prefix MCS Level MCS Range Selinux Roles Guest_u User S0 S0 Guest_R Root User S0 S0-S0: C0.c1023 staff_r sysadm_r system_r unconfined_r staff_u user s0 s0-s0: c0.c1023 staff_r sysadm_r system_r unconfined_r sysadm_u user s0 s0-s0: c0.C1023 SYSADM_R SYSTEM_U USER S0 S0-S0: C0.C1023 System_R unconfined_r unconfined_u user s0 s0-s0: c0.c1023 System_r unconfined_r user_u user s0 s0 user_r xguest_u user s0 s0 xguest_r 

Mari kita lihat secara ringkas apa beberapa pengguna Selinux yang dijelaskan diberi kuasa:

  • Guest_u: Pengguna jenis ini tidak mempunyai akses kepada rangkaian, tiada keistimewaan pelaksanaan skrip di /rumah, dan tidak boleh menggunakan arahan sudo atau su untuk mendapatkan keistimewaan yang lebih tinggi. Ia hanya boleh menggunakan peranan tetamu_r
  • Staff_u: Pengguna sistem yang dipetakan ke pengguna Selinux ini mempunyai akses ke GUI, ke rangkaian, dan penggunaan perintah sudo untuk mendapatkan keistimewaan. Ia boleh bertukar antara peranan stuff_r, sysadm_r, system_r dan unconfined_r
  • sysadmin_u: Sama seperti di atas, ditambah boleh menggunakan juga arahan SU. Ia hanya boleh memainkan peranan sysadm_r
  • System_u: Ini adalah pengguna yang diberikan kepada perkhidmatan sistem, tidak ada pengguna sistem yang harus dipetakan kepadanya
  • unconfined_u: Jenis pengguna ini tidak mempunyai sekatan. Ia mempunyai peranan tidak konfined_r dan system_r yang berkaitan dengannya
  • xguest_u: Pengguna Selinux ini mempunyai akses ke GUI dan ke rangkaian, tetapi hanya melalui penyemak imbas Firefox. Ia tidak mempunyai hak pelaksanaan untuk fail di bawah /rumah dan hanya mempunyai peranan xguest_r yang berkaitan dengannya

Seperti yang anda lihat, pengguna selinux dapat dikenalpasti, dalam konteksnya, mempunyai akhiran _u. Harus jelas bahawa mereka adalah perkara yang sama sekali berbeza dari pengguna sistem. Terdapat peta antara kedua -dua, dan mungkin untuk melihatnya dengan berjalan Login Semanage -L Perintah:

# Semanage -l Log masuk

Yang memberi kita output berikut:

Nama log masuk Selinux Pengguna MLS/MCS Range Service __Default__ unconfined_u S0-S0: C0.C1023 * Root Unconfined_u S0-S0: C0.C1023 * 

Akar pengguna sistem dipetakan ke pengguna selinux yang tidak konfined_u, oleh itu tidak mempunyai sekatan. Tidak ada pengguna lain yang dipetakan secara eksplisit, jadi mereka, secara lalai, dikaitkan dengan pengguna selinux unconfined_u.

Menukar Pengguna Selinux

Pada ketika ini, anda mungkin bertanya bagaimana mungkin untuk menetapkan peta antara pengguna sistem dan selinux. Kami melaksanakan tugas ini dengan menggunakan perintah log masuk semenage. Dalam contoh berikut, saya menukar pemetaan lalai, mengaitkan pengguna dummy pada sistem saya kepada pengguna Selinux Guest_u:

# Login Semanage -a -s Guest_u Dummy 

Suis -a adalah pendek untuk -DD dan yang digunakan untuk menambah rekod, manakala -s (pendek untuk -seuser) menentukan pengguna selinux pengguna sistem harus dipetakan ke. Mari kita lari lagi Login Semanage -l untuk melihat apakah sesuatu berubah:

Nama log masuk Selinux Pengguna MLS/MCS Range Service __Default__ unconfined_u S0-S0: C0.C1023 * Dummy Guest_u S0 * Root Unconfined_u S0-S0: C0.C1023 * System_u System_u S0-S0: C0.C1023 * 

Seperti yang diharapkan pengguna dummy sistem kini dikaitkan dengan pengguna selinux tamu_u yang, seperti yang dikatakan sebelum ini, tidak mempunyai akses ke rangkaian. Mari kita sahkan dengan cara yang paling mudah: kami cuba ping google dan melihat hasilnya:

[dummy@linuxconfig ~] $ ping google.com ping: soket: kebenaran ditolak 

Seperti yang dijangkakan, pengguna dummy tidak dibenarkan menggunakan rangkaian, jadi arahan ping gagal. Untuk memadam pemetaan, kami menggunakan suis -d (pendek untuk -delete):

# login semanage -d -s tamu_u dummy 

Tidak mempunyai pemetaan khusus, pengguna dummy akan jatuh balik kepada pengguna selinux unconfined_u. Oleh kerana yang terakhir tidak mempunyai sekatan, jika kita mencuba lagi perintah di atas, kini harus berjaya:

[dummy@linuxconfig ~] $ ping google.com ping google.com (216.58.205.206) 56 (84) bait data. 64 bait dari MIL04S29-in-F14.1E100.bersih (216.58.205.206): icmp_seq = 1 ttl = 52 masa = 29.2 ms [] 

Perlu diingat bahawa perubahan pemetaan antara pengguna dan pengguna Selinux akan berkesan hanya selepas log masuk baru.

Peranan Selinux

Bahagian kedua dalam konteks selinux adalah mengenai peranan. Seperti yang anda lihat dari output Pengguna Semanage -L Di atas, setiap pengguna Selinux boleh memainkan set selinux yang ditentukan: apabila terdapat banyak peranan untuk pengguna selinux, pengguna juga boleh bertukar di antara mereka menggunakan Newrole Perintah, menggunakan sintaks berikut:

$ newrole -r newrole 

Untuk memeriksa domain apa yang dapat diakses oleh peranan tertentu, anda harus menjalankan Seinfo perintah. Ini disediakan oleh setools-console pakej. Contohnya untuk memeriksa domain apa yang boleh diakses dari peranan stuff_r, kami menjalankan:

# seinfo -rstuff_r -x 
$ seinfo -rstaff_r -x (output dipotong) Staff_r Peranan yang dikuasai: Staff_r Jenis: ABRT_HELPER_T ALSA_HOME_T ANIVIRUS_HOME_T HTTPD_USER_CONTENT_T HTTPD_USER_HTACCESS_T [.. 

Domain dan jenis

Bahagian ketiga konteks selinux adalah mengenai domain dan jenis, dan dapat dikenal pasti dengan mempunyai akhiran _t dalam perwakilan konteks. Kami merujuknya sebagai jenis jika kita bercakap mengenai objek, atau sebagai domain jika kita bercakap mengenai proses. Mari kita lihat.

Saya telah mencipta mudah .Fail HTML di dalam Apache VirtualHost lalai pada mesin CentOS 7 saya: Seperti yang anda dapat lihat fail yang mewarisi konteks selinux direktori yang dibuat dalam:

-RW-R-R--. root root unconfined_u: object_r: httpd_sys_content_t: ujian s0.html 

Dengan httpd_sys_content_t, Fail ini boleh dibaca oleh proses HTTPD, seperti yang disahkan dengan menavigasi ke dalam penyemak imbas.

Sekarang mari cuba menukar jenis fail dan lihat kesan perubahan ini. Untuk memanipulasi konteks selinux kita menggunakan CHCON Perintah:

# chcon -t user_home_t/var/www/html/ujian.html 

Kami menukar jenis fail selinux ke user_home_t: ini adalah jenis yang digunakan oleh fail yang terletak di pengguna
Direktori rumah secara lalai. Running ls -z pada fail memberi kami pengesahan:

unconfined_u: object_r: user_home_t: s0/var/www/html/ujian.html 

Sekiranya kita sekarang cuba mencapai fail dari penyemak imbas, seperti yang diharapkan.

The CHCON Perintah boleh digunakan bukan sahaja untuk menukar jenis fail, tetapi juga pengguna dan bahagian peranan konteks selinux. Apabila menggunakannya untuk menukar konteks direktori, ia juga boleh berjalan secara rekursif dengan suis -r, dan boleh memberikan konteks juga dengan rujukan: dalam hal ini kita tidak menentukan bahagian -bahagian konteks yang akan diubah secara langsung, tetapi kami memberikan rujukan kepada fail atau direktori konteks harus disesuaikan. Contohnya, mari buat ujian.Fail HTML di atas, memperoleh konteks direktori/var/www/html:

# CHCON --Reference/var/www/html/var/www/html/ujian.html && ls -z/var/www/html/ujian.html 

Kita dapat melihat dari output arahan di atas, yang kini konteks fail telah berubah lagi, dan sekarang sama dengan salah satu direktori/var/www/html:

System_u: object_r: httpd_sys_content_t: s0/var/www/html/ujian.html 

Perhatikan bahawa perubahan yang dibuat dengan perintah CHCON, akan bertahan dengan reboot tetapi bukannya relabel fail: dalam hal ini fail akan ditetapkan mengikut dasar asal Selinux, dan perubahan akan hilang. Jadi bagaimana kita boleh membuat perubahan berterusan? Kita mesti menambah peraturan baru ke dasar selinux menggunakan perintah semanage.

Katakan kami ingin menambah peraturan yang menentukan bahawa semua fail yang dibuat dalam direktori/rumah/egdoc/ujian harus, secara lalai httpd_sys_content_t jenis. Inilah arahan yang harus kita jalankan:

semenage fcontext -a -t httpd_sys_content_t/home/egdoc/test (/.*)? 

Pertama kita memanggil perintah sememi yang dinyatakan fcontext Untuk mengubahsuai konteks fail, maka kami menambah -a Tukar untuk menambah rekod dan -t satu, untuk menentukan kami ingin menukar bahagian jenis konteks kepada yang segera mengikuti.

Akhirnya, kami menyediakan laluan direktori bersama -sama dengan ungkapan biasa yang bermaksud: /rumah /egdoc /jalur ujian diikuti oleh /aksara, diikuti oleh mana -mana bilangan mana -mana watak, keseluruhan ungkapan yang sepadan dengan 0 atau 1 kali. Ungkapan biasa ini akan sepadan dengan semua nama fail.

Kami kini menjalankan restorecon perintah dengan -R (rekursif) pilihan pada direktori, untuk menerapkan polisi. Sejak sekarang peraturan yang kami tambahkan di atas adalah sebahagian daripada polisi itu sendiri, semua fail yang terkandung dalam direktori, dan juga yang baru dicipta, akan mempunyai konteks yang kami nyatakan dalam peraturan.

Tetapan selinux boolean

Tetapan selinux booleans dapat mengubah tingkah laku selinux, dan diuruskan dengan menggunakan nilai boolean. Kita boleh berinteraksi dengan mereka dengan menggunakan dua arahan: getsebool dan setsebool, yang pertama digunakan untuk menanyakan keadaan pilihan dan yang kedua untuk mengubahnya.

Sekiranya kita lulus pilihan yang ingin kita periksa ke GetSebool, ia akan memberi kita keadaan pilihan itu, jika kita memberikannya dengan -a Tukar itu sebaliknya akan menunjukkan kepada kami semua tetapan yang ada dan keadaan Boolean masing -masing. Contohnya jika kita ingin menyemak status pilihan yang berkaitan dengan HTTPD kita boleh menjalankan:

$ getsebool -a | GREP HTTPD 

Berikut adalah petikan yang sangat singkat:

[[email protected] ~] $ getsebool -a | grep httpd httpd_anon_write -> off httpd_builtin_scripting -> on [...] 

Mari kita cuba mengubah keadaan pilihan httpd_anon_write, dan aktifkannya. Seperti yang disebutkan di atas, kami menggunakan setsebool untuk tugas:

# setsebool httpd_anon_write 1 

Sekiranya kita sekarang memeriksa nilai pilihan, ia sepatutnya diaktifkan:

[[email protected] ~] $ getsebool -a | grep httpd_anon_write httpd_anon_write -> on 

Semua pergi seperti yang diharapkan. Walau bagaimanapun, perubahan yang dibuat dengan cara ini tidak akan bertahan dengan reboot. Untuk melaksanakan tugas ini, kita mesti menggunakan arahan yang sama, tetapi menambah -P suis: Apabila menggunakannya, perubahan akan ditulis kepada dasar dan mereka akan berterusan.

Terdapat banyak perkara yang harus dipertimbangkan ketika menggunakan Selinux, dan menyempurnakannya untuk mendapatkan tingkah laku tertentu, sambil mengekalkan keizinan yang kurang mungkin dapat menjadi tugas yang memakan waktu. Walau bagaimanapun, bukan idea yang baik, dalam myopinion, untuk mematikannya sepenuhnya. Terus bereksperimen sehingga anda berpuas hati dengan hasilnya dan anda mencapai persediaan yang dikehendaki:
anda akan mendapat keselamatan dan pengetahuan.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Perintah Linux: Top 20 Perintah Paling Penting yang Anda Perlu ..
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Perintah Linux Asas
  • Muat turun linux
  • Pasang Arch Linux di Workstation VMware
  • Bolehkah linux mendapat virus? Meneroka kelemahan Linux ..
  • Pembalakan Lanjutan dan Pengauditan di Linux