Pengenalan kepada Konsep dan Pengurusan Selinux
- 1742
- 476
- Clarence Powlowski
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
- « Cara Memasang Bitcoin-Node Pada Debian 9 Stretch Linux
- Kebenaran ditolak pada operasi sistem fail HPFS/NTFS/EXFAT tidak disokong »