ການປ່ຽນສະຖານະ ແລະ ໂໝດຂອງ SELinux
ການປ່ຽນແປງສະຖານະ ແລະ ໂໝດຂອງ SELinux ແບບຖາວອນ
ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ໃນ ການເລີ່ມຕົ້ນນຳໃຊ້ SELinux SELinux ສາມາດເປີດ ຫຼື ປິດໃຊ້ງານໄດ້. ເມື່ອເປີດໃຊ້ງານ, SELinux ຈະມີສອງໂໝດຄື: enforcing ແລະ permissive.
ໃຊ້ຄຳສັ່ງ getenforce ຫຼື sestatus ເພື່ອກວດສອບວ່າ SELinux ກຳລັງເຮັດວຽກຢູ່ໃນໂໝດໃດ. ຄຳສັ່ງ getenforce ຈະສົ່ງຄ່າກັບມາເປັນ Enforcing, Permissive, ຫຼື Disabled.
ຄຳສັ່ງ sestatus ຈະສົ່ງຄ່າສະຖານະຂອງ SELinux ແລະ ນະໂຍບາຍ (policy) ຂອງ SELinux ທີ່ກຳລັງນຳໃຊ້ອອກມາ:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 31
|
ເມື່ອລະບົບລັນ SELinux ໃນໂໝດ permissive, ຜູ້ໃຊ້ ແລະ ໂປຣເຊສສາມາດຕິດປ້າຍກຳກັບ (label) ອັອບເຈັກຕ່າງໆໃນລະບົບໄຟລ໌ຜິດພາດໄດ້. ອັອບເຈັກຂອງລະບົບໄຟລ໌ທີ່ຖືກສ້າງຂຶ້ນໃນຂະນະທີ່ SELinux ປິດໃຊ້ງານຢູ່ຈະບໍ່ມີການຕິດປ້າຍກຳກັບໃດໆເລີຍ. ພຶດຕິກຳນີ້ເຮັດໃຫ້ເກີດບັນຫາເມື່ອປ່ຽນໄປເປັນໂໝດ enforcing ເນື່ອງຈາກ SELinux ຕ້ອງອາໄສການຕິດປ້າຍກຳກັບທີ່ຖືກຕ້ອງຂອງອັອບເຈັກໃນລະບົບໄຟລ໌. ເພື່ອປ້ອງກັນບໍ່ໃຫ້ໄຟລ໌ທີ່ຕິດປ້າຍກຳກັບຜິດ ແລະ ບໍ່ໄດ້ຕິດປ້າຍກຳກັບສ້າງບັນຫາ, ລະບົບໄຟລ໌ຈະຖືກຕິດປ້າຍກຳກັບໃໝ່ (relabel) ໂດຍອັດຕະໂນມັດເມື່ອປ່ຽນຈາກສະຖານະປິດໃຊ້ງານ (disabled) ໄປເປັນໂໝດ permissive ຫຼື enforcing. ໃນໂໝດ permissive, ໃຫ້ໃຊ້ຄຳສັ່ງ |
ການເປີດໃຊ້ງານ SELinux
ເມື່ອເປີດໃຊ້ງານ, SELinux ສາມາດເຮັດວຽກໃນໜຶ່ງໃນສອງໂໝດຄື: enforcing ຫຼື permissive. ພາກສ່ວນຕໍ່ໄປນີ້ຈະສະແດງວິທີການປ່ຽນໄປໃຊ້ໂໝດເຫຼົ່ານີ້ແບບຖາວອນ.
ໃນຂະນະທີ່ເປີດໃຊ້ງານ SELinux ເທິງລະບົບທີ່ເຄີຍປິດໃຊ້ງານມາກ່ອນ, ເພື່ອຫຼີກລ່ຽງບັນຫາຕ່າງໆ ເຊັ່ນ ລະບົບບູດບໍ່ຂຶ້ນ ຫຼື ໂປຣເຊສເຮັດວຽກຜິດພາດ, ໃຫ້ປະຕິບັດຕາມຂັ້ນຕອນນີ້.
-
ຕ້ອງມີການຕິດຕັ້ງແພັກເກດ
selinux-policy-targeted,selinux-policy,libselinux-utils, ແລະgrubby. ເພື່ອກວດສອບວ່າແພັກເກດໃດໜຶ່ງຖືກຕິດຕັ້ງແລ້ວຫຼືບໍ່:$ rpm -q _package_name_
-
ຖ້າລະບົບຂອງທ່ານມີການປິດໃຊ້ງານ SELinux ຢູ່ລະດັບແກ່ນລະບົບ (kernel) (ນີ້ແມ່ນວິທີທີ່ແນະນຳ, ເບິ່ງທີ່ [_disabling_selinux]), ໃຫ້ປ່ຽນແປງສ່ວນນີ້ກ່ອນ. ກວດສອບເບິ່ງວ່າທ່ານມີຕົວເລືອກ
selinux=0ຢູ່ໃນ kernel command line ຫຼືບໍ່:$ cat /proc/cmdline BOOT_IMAGE=... ... selinux=0-
ລຶບຕົວເລືອກ
selinux=0ອອກຈາກການຕັ້ງຄ່າ bootloader ໂດຍໃຊ້ຄຳສັ່ງgrubby:$ sudo grubby --update-kernel ALL --remove-args selinux -
ການປ່ຽນແປງຈະມີຜົນຫຼັງຈາກທີ່ທ່ານຣີສະຕາດລະບົບໃນໜຶ່ງໃນຂັ້ນຕອນຕໍ່ໄປນີ້.
-
-
ຮັບປະກັນວ່າລະບົບໄຟລ໌ຈະຖືກຕິດປ້າຍກຳກັບໃໝ່ (relabel) ໃນການບູດຄັ້ງຕໍ່ໄປ:
$ sudo fixfiles onboot -
ເປີດໃຊ້ງານ SELinux ໃນໂໝດ permissive. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງທີ່ [_changing_to_permissive_mode].
-
ຣີສະຕາດລະບົບຂອງທ່ານ:
$ sudo reboot -
ກວດສອບເບິ່ງຂໍ້ຄວາມການປະຕິເສດການເຂົ້າເຖິງຂອງ SELinux.
$ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent -
ຖ້າບໍ່ມີການປະຕິເສດ, ໃຫ້ປ່ຽນໄປເປັນໂໝດ enforcing. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງທີ່ [_changing_to_enforcing_mode].
ເພື່ອລັນແອັບພລິເຄຊັນທີ່ກຳນົດເອງໂດຍມີ SELinux ຢູ່ໃນໂໝດ enforcing, ໃຫ້ເລືອກໜຶ່ງໃນກໍລະນີຕໍ່ໄປນີ້:
-
ລັນແອັບພລິເຄຊັນຂອງທ່ານໃນໂດເມນ
unconfined_service_t. -
ຂຽນນະໂຍບາຍໃໝ່ສຳລັບແອັບພລິເຄຊັນຂອງທ່ານ. ເບິ່ງບົດ Writing a custom SELinux policy ໃນເອກະສານ RHEL 8 Using SELinux ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ.
ການປ່ຽນເປັນໂໝດ permissive
ໃຊ້ຂັ້ນຕອນຕໍ່ໄປນີ້ເພື່ອປ່ຽນໂໝດ SELinux ເປັນ permissive ແບບຖາວອນ. ເມື່ອ SELinux ເຮັດວຽກໃນໂໝດ permissive, ນະໂຍບາຍ SELinux ຈະບໍ່ຖືກບັງຄັບໃຊ້. ລະບົບຍັງຄົງໃຊ້ງານໄດ້ປົກກະຕິ ແລະ SELinux ຈະບໍ່ປະຕິເສດການເຮັດວຽກໃດໆ ແຕ່ຈະພຽງແຕ່ບັນທຶກຂໍ້ຄວາມ AVC ເທົ່ານັ້ນ, ເຊິ່ງຕໍ່ມາສາມາດນຳໃຊ້ເພື່ອການແກ້ໄຂບັນຫາ, ການດີບັກ, ແລະ ການປັບປຸງນະໂຍບາຍ SELinux. ແຕ່ລະ AVC ຈະຖືກບັນທຶກພຽງຄັ້ງດຽວໃນກໍລະນີນີ້.
-
ແພັກເກດ
selinux-policy-targeted,libselinux-utils, ແລະpolicycoreutilsຖືກຕິດຕັ້ງຢູ່ເທິງລະບົບຂອງທ່ານແລ້ວ. -
ພາຣາມິເຕີ kernel
selinux=0ຫຼືenforcing=0ບໍ່ໄດ້ຖືກນຳໃຊ້.
-
ເປີດໄຟລ໌
/etc/selinux/configໃນ text editor ທີ່ທ່ານເລືອກ, ຕົວຢ່າງ:
$ sudo vi /etc/selinux/config
-
ຕັ້ງຄ່າຕົວເລືອກ
SELINUX=permissive:
# 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=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
-
ຣີສະຕາດລະບົບ:
$ sudo reboot
ການປ່ຽນເປັນໂໝດ enforcing
ໃຊ້ຂັ້ນຕອນຕໍ່ໄປນີ້ເພື່ອປ່ຽນ SELinux ເປັນໂໝດ enforcing. ເມື່ອ SELinux ເຮັດວຽກໃນໂໝດ enforcing, ມັນຈະບັງຄັບໃຊ້ນະໂຍບາຍ SELinux ແລະ ປະຕິເສດການເຂົ້າເຖິງໂດຍອີງໃສ່ກົດລະບຽບຂອງນະໂຍບາຍ SELinux. ໃນ Fedora, ໂໝດ enforcing ຈະຖືກເປີດໃຊ້ງານເປັນຄ່າເລີ່ມຕົ້ນເມື່ອລະບົບຖືກຕິດຕັ້ງພ້ອມກັບ SELinux ໃນຕອນທຳອິດ.
-
ແພັກເກດ
selinux-policy-targeted,libselinux-utils, ແລະpolicycoreutilsຖືກຕິດຕັ້ງຢູ່ເທິງລະບົບຂອງທ່ານແລ້ວ. -
ພາຣາມິເຕີ kernel
selinux=0ຫຼືenforcing=0ບໍ່ໄດ້ຖືກນຳໃຊ້.
-
ເປີດໄຟລ໌
/etc/selinux/configໃນ text editor ທີ່ທ່ານເລືອກ, ຕົວຢ່າງ:$ sudo vi /etc/selinux/config -
ຕັ້ງຄ່າຕົວເລືອກ
SELINUX=enforcing:# 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 these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted -
ບັນທຶກການປ່ຽນແປງ, ແລະ ຣີສະຕາດລະບົບ:
$ sudo rebootໃນການບູດຄັ້ງຕໍ່ໄປ, SELinux ຈະຕິດປ້າຍກຳກັບ (relabel) ໄຟລ໌ ແລະ ໄດເຣັກທໍຣີທັງໝົດພາຍໃນລະບົບຄືນໃໝ່ ແລະ ເພີ່ມ SELinux context ສຳລັບໄຟລ໌ ແລະ ໄດເຣັກທໍຣີທີ່ຖືກສ້າງຂຶ້ນໃນຕອນທີ່ SELinux ຖືກປິດໃຊ້ງານ.
-
ຫຼັງຈາກລະບົບຣີສະຕາດ, ໃຫ້ຢືນຢັນວ່າຄຳສັ່ງ
getenforceສົ່ງຄ່າກັບມາເປັນEnforcing:$ getenforce Enforcing
|
ຫຼັງຈາກປ່ຽນເປັນໂໝດ enforcing, SELinux ອາດຈະປະຕິເສດການເຮັດວຽກບາງຢ່າງເນື່ອງຈາກກົດລະບຽບຂອງນະໂຍບາຍ SELinux ບໍ່ຖືກຕ້ອງ ຫຼື ຂາດຫາຍໄປ. ເພື່ອເບິ່ງວ່າ SELinux ປະຕິເສດການເຮັດວຽກໃດແດ່, ໃຫ້ປ້ອນຄຳສັ່ງຕໍ່ໄປນີ້ໃນຖານະ root:
ອີກທາງເລືອກໜຶ່ງ, ຫາກມີການຕິດຕັ້ງແພັກເກດ
ຜູ້ໃຊ້ທົ່ວໄປສາມາດໃຊ້ GUI ຖ້າ SELinux ເປີດໃຊ້ງານຢູ່ ແລະ Audit daemon (auditd) ບໍ່ໄດ້ເຮັດວຽກຢູ່ເທິງລະບົບຂອງທ່ານ, ໃຫ້ຄົ້ນຫາຂໍ້ຄວາມສະເພາະຂອງ SELinux ໃນຜົນໄດ້ຮັບຂອງຄຳສັ່ງ dmesg:
ຖ້າ SELinux ປະຕິເສດການເຮັດວຽກບາງຢ່າງ, ເບິ່ງບົດ Troubleshooting problems related to SELinux ໃນເອກະສານ RHEL 8 Using SELinux ສຳລັບຂໍ້ມູນກ່ຽວກັບການແກ້ໄຂບັນຫາ. |
ການປິດໃຊ້ງານ SELinux
ໃຊ້ຂັ້ນຕອນຕໍ່ໄປນີ້ເພື່ອປິດໃຊ້ງານ SELinux ແບບຖາວອນ.
|
ເມື່ອ SELinux ຖືກປິດໃຊ້ງານ, ນະໂຍບາຍ SELinux ຈະບໍ່ຖືກໂຫຼດເລີຍ; ມັນຈະບໍ່ຖືກບັງຄັບໃຊ້ ແລະ ຂໍ້ຄວາມ AVC ຈະບໍ່ຖືກບັນທຶກ. ດັ່ງນັ້ນ, ຜົນປະໂຫຍດທັງໝົດຂອງການລັນ SELinux ທີ່ລະບຸໄວ້ໃນ ຜົນປະໂຫຍດຂອງ SELinux ແມ່ນຈະສູນເສຍໄປ. ຂໍແນະນຳໃຫ້ໃຊ້ໂໝດ permissive ແທນການປິດໃຊ້ງານ SELinux ແບບຖາວອນ. ເບິ່ງທີ່ [_changing_to_permissive_mode] ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບໂໝດ permissive. |
|
ການປິດໃຊ້ງານ SELinux ໂດຍໃຊ້ຕົວເລືອກ SELINUX=disabled ໃນໄຟລ໌ /etc/selinux/config ຈະເຮັດໃຫ້ເກີດຂະບວນການທີ່ kernel ບູດຂຶ້ນມາພ້ອມກັບ SELinux ທີ່ຖືກເປີດໃຊ້ງານ ແລ້ວຈຶ່ງສະຫຼັບໄປເປັນໂໝດປິດໃຊ້ງານໃນພາຍຫຼັງຂອງຂະບວນການບູດ. ເນື່ອງຈາກອາດເກີດບັນຫາໜ່ວຍຄວາມຈຳຮົ່ວໄຫຼ (memory leaks) ແລະ ສະພາວະການແຍ່ງຊິງ (race conditions) ທີ່ເຮັດໃຫ້ kernel panics ໄດ້, ຈຶ່ງຄວນເລືອກວິທີການປິດໃຊ້ງານ SELinux ໂດຍການເພີ່ມພາຣາມິເຕີ selinux=0 ເຂົ້າໃນ kernel command line ດັ່ງທີ່ອະທິບາຍໄວ້ໃນ ການປ່ຽນໂໝດ SELinux ຕອນບູດ ຖ້າສະຖານະການຂອງທ່ານຈຳເປັນຕ້ອງປິດໃຊ້ງານ SELinux ຢ່າງສົມບູນແທ້ໆ. |
-
ແພັກເກດ
grubbyຖືກຕິດຕັ້ງແລ້ວ:$ rpm -q grubby grubby-_version_
-
ເປີດໄຟລ໌
/etc/selinux/configໃນ text editor ທີ່ທ່ານເລືອກ, ຕົວຢ່າງ:$ sudo vi /etc/selinux/config -
ຕັ້ງຄ່າຕົວເລືອກ SELINUX=disabled:
# 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=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted -
ບັນທຶກການປ່ຽນແປງ, ແລະ ຣີສະຕາດລະບົບຂອງທ່ານ:
$ sudo reboot
-
ຫຼັງຈາກຣີບູດ, ໃຫ້ຢືນຢັນວ່າຄຳສັ່ງ
getenforceສົ່ງຄ່າກັບມາເປັນDisabled:$ getenforce Disabled
ການປ່ຽນໂໝດ SELinux ຕອນບູດລະບົບ
ໃນຕອນບູດ, ທ່ານສາມາດຕັ້ງຄ່າພາຣາມິເຕີ kernel ຫຼາຍຕົວເພື່ອປ່ຽນວິທີການເຮັດວຽກຂອງ SELinux ໄດ້:
- enforcing=0
-
ການຕັ້ງຄ່າພາຣາມິເຕີນີ້ຈະເຮັດໃຫ້ລະບົບເລີ່ມຕົ້ນໃນໂໝດ permissive, ເຊິ່ງມີປະໂຫຍດໃນເວລາແກ້ໄຂບັນຫາ. ການໃຊ້ໂໝດ permissive ອາດເປັນທາງເລືອກດຽວໃນການກວດຫາບັນຫາຖ້າລະບົບໄຟລ໌ຂອງທ່ານເສຍຫາຍໜັກ. ນອກຈາກນີ້, ໃນໂໝດ permissive, ລະບົບຈະຍັງຄົງສືບຕໍ່ສ້າງປ້າຍກຳກັບ (labels) ຢ່າງຖືກຕ້ອງ. ຂໍ້ຄວາມ AVC ທີ່ຖືກສ້າງຂຶ້ນໃນໂໝດນີ້ອາດຈະແຕກຕ່າງຈາກໃນໂໝດ enforcing.
ໃນໂໝດ permissive, ມີພຽງແຕ່ການປະຕິເສດຄັ້ງທຳອິດຈາກຊຸດການປະຕິເສດແບບດຽວກັນເທົ່ານັ້ນທີ່ຈະຖືກລາຍງານ. ແນວໃດກໍຕາມ, ໃນໂໝດ enforcing, ທ່ານອາດໄດ້ຮັບການປະຕິເສດທີ່ກ່ຽວຂ້ອງກັບການອ່ານໄດເຣັກທໍຣີ, ແລະ ແອັບພລິເຄຊັນກໍຈະຢຸດເຮັດວຽກ. ສ່ວນໃນໂໝດ permissive, ທ່ານຈະໄດ້ຮັບຂໍ້ຄວາມ AVC ແບບດຽວກັນ, ແຕ່ແອັບພລິເຄຊັນຈະຍັງຄົງສືບຕໍ່ອ່ານໄຟລ໌ໃນໄດເຣັກທໍຣີຕໍ່ໄປ ແລະ ທ່ານຈະໄດ້ຮັບ AVC ສຳລັບແຕ່ລະການປະຕິເສດເພີ່ມເຕີມຂຶ້ນມາ.
- selinux=0
-
ພາຣາມິເຕີນີ້ຈະເຮັດໃຫ້ kernel ບໍ່ໂຫຼດພາກສ່ວນໃດໆຂອງໂຄງສ້າງພື້ນຖານ SELinux ເລີຍ. ສະຄຣິບ init ຈະສັງເກດເຫັນວ່າລະບົບບູດຂຶ້ນມາພ້ອມກັບພາຣາມິເຕີ
selinux=0ແລະ ຈະທຳການ touch ໄຟລ໌/.autorelabel. ສິ່ງນີ້ຈະເຮັດໃຫ້ລະບົບຕິດປ້າຍກຳກັບ (relabel) ໃໝ່ໂດຍອັດຕະໂນມັດໃນຄັ້ງຕໍ່ໄປທີ່ທ່ານບູດລະບົບພ້ອມກັບເປີດໃຊ້ງານ SELinux.ບໍ່ແນະນຳໃຫ້ໃຊ້ພາຣາມິເຕີ
selinux=0. ເພື່ອດີບັກລະບົບຂອງທ່ານ, ຄວນເລືອກໃຊ້ໂໝດ permissive ແທນ. - autorelabel=1
-
ພາຣາມິເຕີນີ້ຈະບັງຄັບໃຫ້ລະບົບຕິດປ້າຍກຳກັບ (relabel) ໃໝ່ເຊິ່ງຄ້າຍຄືກັນກັບການໃຊ້ຄຳສັ່ງຕໍ່ໄປນີ້:
$ sudo touch /.autorelabel $ sudo rebootຖ້າລະບົບໄຟລ໌ມີອັອບເຈັກທີ່ຕິດປ້າຍກຳກັບຜິດເປັນຈຳນວນຫຼາຍ, ໃຫ້ເລີ່ມຕົ້ນລະບົບໃນໂໝດ permissive ເພື່ອເຮັດໃຫ້ຂະບວນການ autorelabel ສຳເລັດຜົນ.
ສຳລັບພາຣາມິເຕີການບູດ kernel ອື່ນໆທີ່ກ່ຽວຂ້ອງກັບ SELinux ເຊັ່ນ checkreqprot, ໃຫ້ເບິ່ງທີ່ໄຟລ໌ kernel-parameters.txt. ໄຟລ໌ນີ້ຈະມີຢູ່ໃນແພັກເກດຊອສ (source package) ຂອງ Linux kernel ຂອງທ່ານ (.src.rpm). ເພື່ອດາວໂຫຼດແພັກເກດຊອສທີ່ປະກອບມີ kernel ທີ່ກຳລັງນຳໃຊ້ອີງຕາມປະຈຸບັນ:
$ sudo dnf download --source kernel
Want to help? Learn how to contribute to Fedora Docs ›