ຊຸດ RHCSA: ສິ່ງ ຈຳ ເປັນຄວບຄຸມການເຂົ້າເຖິງທີ່ ຈຳ ເປັນກັບ SELinux ໃນ RHEL 7 - ພາກ 13
ໃນໄລຍະຊຸດນີ້ພວກເຮົາໄດ້ຄົ້ນຫາຢ່າງລະອຽດຢ່າງ ໜ້ອຍ ສອງວິທີການຄວບຄຸມການເຂົ້າເຖິງ: ການອະນຸຍາດແບບ ugo/rwx ມາດຕະຖານ (ຕັ້ງຄ່າ ACL's ໃນລະບົບແຟ້ມເອກະສານ - ພາກ 7).
ເຖິງແມ່ນວ່າມີຄວາມ ຈຳ ເປັນໃນການອະນຸຍາດໃນລະດັບ ທຳ ອິດແລະກົນໄກການຄວບຄຸມການເຂົ້າເຖິງ, ມັນມີຂໍ້ ຈຳ ກັດບາງຢ່າງທີ່ຖືກແກ້ໄຂໂດຍ Security Enhanced Linux (aka SELinux ສັ້ນ).
ຂໍ້ ຈຳ ກັດ ໜຶ່ງ ນັ້ນແມ່ນຜູ້ໃຊ້ສາມາດເຜີຍແຜ່ເອກະສານຫລືໄດເລກະທໍລີເພື່ອລະເມີດຄວາມປອດໄພໂດຍຜ່ານ ຄຳ ສັ່ງ chmod ທີ່ບໍ່ລະອຽດແລະດັ່ງນັ້ນຈຶ່ງເຮັດໃຫ້ເກີດການຂະຫຍາຍສິດທີ່ບໍ່ໄດ້ຄາດຫວັງກ່ຽວກັບສິດທິໃນການເຂົ້າເຖິງ. ດ້ວຍເຫດນັ້ນ, ຂະບວນການໃດກໍ່ຕາມທີ່ເລີ່ມຕົ້ນໂດຍຜູ້ໃຊ້ນັ້ນສາມາດເຮັດໄດ້ຕາມທີ່ມັນພໍໃຈກັບເອກະສານທີ່ເປັນເຈົ້າຂອງໂດຍຜູ້ໃຊ້, ໃນທີ່ສຸດໂປແກຼມທີ່ເປັນອັນຕະລາຍຫຼືຖືກ ທຳ ລາຍສາມາດບັນລຸລະບົບຮາກໃນລະບົບທັງ ໝົດ.
ດ້ວຍຂໍ້ ຈຳ ກັດດັ່ງກ່າວ, ອົງການຮັກສາຄວາມປອດໄພແຫ່ງຊາດຂອງສະຫະລັດອາເມລິກາໄດ້ອອກແບບ SELinux ຄັ້ງ ທຳ ອິດ, ວິທີການຄວບຄຸມການເຂົ້າເຖິງແບບບັງຄັບ, ເພື່ອ ຈຳ ກັດຄວາມສາມາດຂອງຂະບວນການໃນການເຂົ້າເຖິງຫຼືປະຕິບັດການ ດຳ ເນີນງານອື່ນໆກ່ຽວກັບວັດຖຸຂອງລະບົບ (ເຊັ່ນ: ແຟ້ມ, ລາຍຊື່, ພອດເຄືອຂ່າຍ) , ແລະອື່ນໆ) ກັບຮູບແບບການອະນຸຍາດ ໜ້ອຍ ທີ່ສຸດ, ເຊິ່ງສາມາດດັດແກ້ໃນພາຍຫລັງຕາມຄວາມຕ້ອງການ. ໃນສອງສາມ ຄຳ, ແຕ່ລະສ່ວນຂອງລະບົບແມ່ນໃຫ້ການເຂົ້າເຖິງທີ່ ຈຳ ເປັນໃນການເຮັດວຽກເທົ່ານັ້ນ.
ໃນ RHEL 7, SELinux ແມ່ນລວມເຂົ້າກັບແກ່ນຂອງມັນເອງແລະຖືກເປີດໃຊ້ໃນຮູບແບບການບັງຄັບໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ໃນບົດຄວາມນີ້ພວກເຮົາຈະອະທິບາຍສັ້ນໆກ່ຽວກັບແນວຄວາມຄິດພື້ນຖານທີ່ກ່ຽວຂ້ອງກັບ SELinux ແລະການ ດຳ ເນີນງານຂອງມັນ.
ຮູບແບບ SELinux
SELinux ສາມາດ ດຳ ເນີນງານໄດ້ 3 ວິທີຄື:
<
ຄຳ ສັ່ງ getenforce
ສະແດງຮູບແບບຂອງ SELinux ໃນປະຈຸບັນ, ໃນຂະນະທີ່ setenforce
(ຕາມດ້ວຍເລກ 1 ຫຼື 0) ແມ່ນໃຊ້ເພື່ອປ່ຽນຮູບແບບການບັງຄັບຫຼືອະນຸຍາດຕາມ ລຳ ດັບ, ໃນໄລຍະ ກອງປະຊຸມປະຈຸບັນເທົ່ານັ້ນ.
ເພື່ອໃຫ້ປະສົບຜົນ ສຳ ເລັດຕະຫຼອດການອອກຈາກລະບົບແລະເປີດໃຊ້ງານ ໃໝ່, ທ່ານຈະຕ້ອງແກ້ໄຂເອກະສານ /etc/selinux/config
ແລະ ກຳ ນົດຕົວແປ SELINUX ບໍ່ວ່າຈະເປັນການບັງຄັບ, ອະນຸຍາດຫລືພິການ:
# getenforce # setenforce 0 # getenforce # setenforce 1 # getenforce # cat /etc/selinux/config
ໂດຍປົກກະຕິທ່ານຈະໃຊ້ setenforce ເພື່ອສະຫຼັບລະຫວ່າງຮູບແບບ SELinux (ບັງຄັບໃຫ້ອະນຸຍາດແລະກັບຄືນ) ເປັນຂັ້ນຕອນແກ້ໄຂບັນຫາ ທຳ ອິດ. ຖ້າ SELinux ກຳ ລັງຈະບັງຄັບໃຊ້ໃນຂະນະທີ່ທ່ານ ກຳ ລັງປະສົບກັບປັນຫາທີ່ແນ່ນອນ, ແລະມັນກໍ່ຈະຫາຍໄປເມື່ອທ່ານ ກຳ ນົດການອະນຸຍາດ, ທ່ານສາມາດ ໝັ້ນ ໃຈໄດ້ວ່າທ່ານ ກຳ ລັງເບິ່ງບັນຫາການອະນຸຍາດ SELinux.
ສະພາບແວດລ້ອມ SELinux
ສະພາບການຂອງ SELinux ປະກອບດ້ວຍສະພາບແວດລ້ອມໃນການຄວບຄຸມການເຂົ້າເຖິງເຊິ່ງການຕັດສິນໃຈແມ່ນອີງໃສ່ຜູ້ໃຊ້, ບົດບາດແລະປະເພດຂອງ SELinux (ແລະເປັນລະດັບທີ່ເລືອກ):
<
ໃຫ້ເບິ່ງວ່າທັງ ໝົດ ນັ້ນໃຊ້ໄດ້ແນວໃດຜ່ານຕົວຢ່າງຕໍ່ໄປນີ້.
ໃນການຮັກສາຄວາມປອດໄພຂອງ SSH - ພາກທີ 8 ພວກເຮົາໄດ້ອະທິບາຍວ່າການປ່ຽນພອດເລີ່ມຕົ້ນທີ່ sshd ຟັງແມ່ນ ໜຶ່ງ ໃນມາດຕະການຄວາມປອດໄພ ທຳ ອິດເພື່ອຮັບປະກັນເຄື່ອງແມ່ຂ່າຍຂອງທ່ານຕໍ່ກັບການໂຈມຕີພາຍນອກ ໃຫ້ດັດແກ້ເອກະສານ /etc/ssh/sshd_config
ແລະ ກຳ ນົດທີ່ Port ໃຫ້ 9999:
Port 9999
ບັນທຶກການປ່ຽນແປງ, ແລະເລີ່ມ sshd:
# systemctl restart sshd # systemctl status sshd
ດັ່ງທີ່ທ່ານເຫັນ, sshd ລົ້ມເຫລວທີ່ຈະເລີ່ມຕົ້ນ. ແຕ່ມີຫຍັງເກີດຂື້ນ?
ການກວດກາໄວໆຂອງ /var/log/audit/audit.log
ຊີ້ໃຫ້ເຫັນວ່າ sshd ໄດ້ຖືກປະຕິເສດການອະນຸຍາດໃຫ້ເລີ່ມຕົ້ນທີ່ Port 9999 (ຂໍ້ຄວາມບັນທຶກ SELinux ປະກອບມີ ຄຳ ວ່າ“ AVC” ເພື່ອວ່າພວກເຂົາອາດຈະຖືກລະບຸໄດ້ງ່າຍ ຈາກຂໍ້ຄວາມອື່ນໆ) ເພາະວ່ານັ້ນແມ່ນພອດທີ່ສະຫງວນໄວ້ ສຳ ລັບການບໍລິການຈັດການ JBoss:
# cat /var/log/audit/audit.log | grep AVC | tail -1
ໃນຈຸດນີ້ທ່ານສາມາດປິດ SELinux (ແຕ່ຢ່າ!) ດັ່ງທີ່ໄດ້ອະທິບາຍກ່ອນ ໜ້າ ນີ້ແລະພະຍາຍາມເລີ່ມຕົ້ນ sshd ອີກຄັ້ງ, ແລະມັນກໍ່ຄວນເຮັດວຽກ. ເຖິງຢ່າງໃດກໍ່ຕາມ, ຜົນປະໂຫຍດຈາກການ ສຳ ມະນາສາມາດບອກພວກເຮົາວ່າພວກເຮົາຕ້ອງການປ່ຽນແປງຫຍັງເພື່ອໃຫ້ພວກເຮົາສາມາດເລີ່ມຕົ້ນ sshd ໃນພອດໃດກໍ່ຕາມທີ່ພວກເຮົາເລືອກໂດຍບໍ່ມີບັນຫາ.
ແລ່ນ,
# semanage port -l | grep ssh
ເພື່ອເອົາບັນຊີລາຍຊື່ຂອງທ່າເຮືອທີ່ SELinux ອະນຸຍາດໃຫ້ sshd ຟັງ.
ສະນັ້ນຂໍໃຫ້ປ່ຽນພອດໃນ /etc/ssh/sshd_config
ໄປທີ່ Port 9998, ເພີ່ມພອດໃນສະພາບການ ssh_port_t, ແລະຫຼັງຈາກນັ້ນໃຫ້ບໍລິການ ໃໝ່:
# semanage port -a -t ssh_port_t -p tcp 9998 # systemctl restart sshd # systemctl is-active sshd
ຕາມທີ່ທ່ານເຫັນ, ການບໍລິການໄດ້ເລີ່ມຕົ້ນຢ່າງ ສຳ ເລັດຜົນໃນຄັ້ງນີ້. ຕົວຢ່າງນີ້ສະແດງໃຫ້ເຫັນເຖິງຄວາມຈິງທີ່ວ່າ SELinux ຄວບຄຸມ ໝາຍ ເລກພອດ TCP ກັບ ຄຳ ນິຍາມພາຍໃນປະເພດພອດຂອງຕົນເອງ.
ນີ້ແມ່ນຕົວຢ່າງຂອງ SELinux ຈັດການຂັ້ນຕອນການເຂົ້າເຖິງຂັ້ນຕອນອື່ນ. ຖ້າທ່ານຕ້ອງປະຕິບັດ mod_security ແລະ mod_evasive ພ້ອມກັບ Apache ໃນເຊີຟເວີ RHEL 7 ຂອງທ່ານ, ທ່ານ ຈຳ ເປັນຕ້ອງອະນຸຍາດໃຫ້ httpd ເຂົ້າເຖິງ sendmail ເພື່ອສົ່ງແຈ້ງການທາງອີເມວໃນເວລາທີ່ມີການໂຈມຕີ (D) DoS. ໃນ ຄຳ ສັ່ງຕໍ່ໄປນີ້, ໃຫ້ຍົກເລີກທຸງ -P ຖ້າທ່ານບໍ່ຕ້ອງການໃຫ້ມີການປ່ຽນແປງຢູ່ຕະຫຼອດການເລີ່ມຕົ້ນ ໃໝ່
# semanage boolean -1 | grep httpd_can_sendmail # setsebool -P httpd_can_sendmail 1 # semanage boolean -1 | grep httpd_can_sendmail
ດັ່ງທີ່ທ່ານສາມາດບອກໄດ້ຈາກຕົວຢ່າງຂ້າງເທິງ, ການຕັ້ງຄ່າ SELinux boolean (ຫຼືພຽງແຕ່ booleans) ແມ່ນກົດລະບຽບທີ່ແທ້ຈິງ/ປອມທີ່ຖືກຝັງຢູ່ໃນນະໂຍບາຍ SELinux. ທ່ານສາມາດຈົດທະບຽນບູດໂບໂບທຸກຊະນິດດ້ວຍ semanage boolean -l
, ແລະທາງເລືອກໃສ່ກັບ grep ເພື່ອກັ່ນຕອງຜົນຜະລິດ.
ສົມມຸດວ່າທ່ານ ກຳ ລັງໃຫ້ບໍລິການເວບໄຊທ໌ທີ່ສະຖິດໂດຍໃຊ້ໄດເລກະທໍລີທີ່ແຕກຕ່າງກັນກ່ວາຄ່າເລີ່ມຕົ້ນ (/var/www/html
), ເວົ້າ/ເວັບໄຊທ໌ (ນີ້ອາດຈະແມ່ນວ່າທ່ານ ກຳ ລັງເກັບມ້ຽນເອກະສານເວັບຢູ່ ຍົກຕົວຢ່າງການໃຊ້ເຄືອຂ່າຍທີ່ໃຊ້ຮ່ວມກັນ, ແລະຕ້ອງການທີ່ຈະຕິດຕັ້ງມັນຢູ່/ເວບໄຊທ໌).
ກ). ສ້າງເອກະສານ index.html ພາຍໃນ/ເວບໄຊທ໌ດ້ວຍເນື້ອຫາຕໍ່ໄປນີ້:
<html> <h2>SELinux test</h2> </html>
ຖ້າທ່ານເຮັດ,
# ls -lZ /websites/index.html
ທ່ານຈະເຫັນວ່າເອກະສານ index. html ໄດ້ຖືກຕິດສະຫລາກດ້ວຍປະເພດ default_t SELinux, ເຊິ່ງ Apache ບໍ່ສາມາດເຂົ້າເຖິງໄດ້:
ຂ). ປ່ຽນ ຄຳ ສັ່ງເອກະສານ DocumentRoot ໃນ /etc/httpd/conf/httpd.conf
ໄປ/ເວັບໄຊທ໌ຕ່າງໆແລະຢ່າລືມປັບປຸງບລັອກ Directory ທີ່ສອດຄ້ອງກັນ. ຫຼັງຈາກນັ້ນ, ເລີ່ມຕົ້ນ Apache.
c). ຊອກຫາຢູ່ໃນ http:// <ທີ່ຢູ່ IP ຂອງເຄື່ອງແມ່ຂ່າຍເວັບໄຊຕ໌>
, ແລະທ່ານຄວນໄດ້ຮັບການຕອບຮັບ 503 HTTP ທີ່ຖືກຫ້າມ.
ງ). ຕໍ່ໄປ, ປ່ຽນປ້າຍຂອງ/ເວບໄຊທ໌, ຂື້ນກັບປະເພດຂອງ httpd_sys_content_t ເພື່ອໃຫ້ການເຂົ້າເຖິງ Apache ອ່ານເທົ່ານັ້ນໃນໄດເລກະທໍລີນັ້ນແລະເນື້ອຫາຂອງມັນ:
# semanage fcontext -a -t httpd_sys_content_t "/websites(/.*)?"
e). ສຸດທ້າຍ, ນຳ ໃຊ້ນະໂຍບາຍ SELinux ທີ່ສ້າງຂື້ນໃນງ):
# restorecon -R -v /websites
ຕອນນີ້ເລີ້ມ Apache ແລະທ່ອງໄປທີ່ http:// <ທີ່ຢູ່ IP ຂອງ server server>
ອີກຄັ້ງແລະທ່ານຈະເຫັນເອກະສານ html ທີ່ຖືກສະແດງຢ່າງຖືກຕ້ອງ:
ບົດສະຫຼຸບ
ໃນບົດຂຽນນີ້ພວກເຮົາໄດ້ຜ່ານພື້ນຖານຂອງ SELinux. ໃຫ້ສັງເກດວ່າເນື່ອງຈາກຄວາມກວ້າງໃຫຍ່ຂອງຫົວຂໍ້ດັ່ງກ່າວ, ການອະທິບາຍຢ່າງລະອຽດແມ່ນບໍ່ສາມາດເປັນໄປໄດ້ໃນບົດຄວາມດຽວ, ແຕ່ພວກເຮົາເຊື່ອວ່າຫຼັກການທີ່ໄດ້ລະບຸໄວ້ໃນຄູ່ມືນີ້ຈະຊ່ວຍໃຫ້ທ່ານກ້າວໄປສູ່ຫົວຂໍ້ທີ່ກ້າວ ໜ້າ ກວ່າເກົ່າຖ້າທ່ານຕ້ອງການຢາກເຮັດ.
ຖ້າຂ້ອຍອາດຈະ, ຂ້ອຍຂໍແນະ ນຳ ສອງຊັບພະຍາກອນທີ່ ສຳ ຄັນເພື່ອເລີ່ມຕົ້ນດ້ວຍ: ຄູ່ມືຂອງຜູ້ ນຳ ແລະຜູ້ບໍລິຫານຂອງ RHEL 7 SELinux.
ຢ່າລັງເລທີ່ຈະແຈ້ງໃຫ້ພວກເຮົາທາບວ່າທ່ານມີ ຄຳ ຖາມຫຼື ຄຳ ເຫັນຫຍັງ.