ຊຸດ RHCSA: ສິ່ງ ຈຳ ເປັນຄວບຄຸມການເຂົ້າເຖິງທີ່ ຈຳ ເປັນກັບ SELinux ໃນ RHEL 7 - ພາກ 13


ໃນໄລຍະຊຸດນີ້ພວກເຮົາໄດ້ຄົ້ນຫາຢ່າງລະອຽດຢ່າງ ໜ້ອຍ ສອງວິທີການຄວບຄຸມການເຂົ້າເຖິງ: ການອະນຸຍາດແບບ ugo/rwx ມາດຕະຖານ (ຕັ້ງຄ່າ ACL's ໃນລະບົບແຟ້ມເອກະສານ - ພາກ 7).

ເຖິງແມ່ນວ່າມີຄວາມ ຈຳ ເປັນໃນການອະນຸຍາດໃນລະດັບ ທຳ ອິດແລະກົນໄກການຄວບຄຸມການເຂົ້າເຖິງ, ມັນມີຂໍ້ ຈຳ ກັດບາງຢ່າງທີ່ຖືກແກ້ໄຂໂດຍ Security Enhanced Linux (aka SELinux ສັ້ນ).

ຂໍ້ ຈຳ ກັດ ໜຶ່ງ ນັ້ນແມ່ນຜູ້ໃຊ້ສາມາດເຜີຍແຜ່ເອກະສານຫລືໄດເລກະທໍລີເພື່ອລະເມີດຄວາມປອດໄພໂດຍຜ່ານ ຄຳ ສັ່ງ chmod ທີ່ບໍ່ລະອຽດແລະດັ່ງນັ້ນຈຶ່ງເຮັດໃຫ້ເກີດການຂະຫຍາຍສິດທີ່ບໍ່ໄດ້ຄາດຫວັງກ່ຽວກັບສິດທິໃນການເຂົ້າເຖິງ. ດ້ວຍເຫດນັ້ນ, ຂະບວນການໃດກໍ່ຕາມທີ່ເລີ່ມຕົ້ນໂດຍຜູ້ໃຊ້ນັ້ນສາມາດເຮັດໄດ້ຕາມທີ່ມັນພໍໃຈກັບເອກະສານທີ່ເປັນເຈົ້າຂອງໂດຍຜູ້ໃຊ້, ໃນທີ່ສຸດໂປແກຼມທີ່ເປັນອັນຕະລາຍຫຼືຖືກ ທຳ ລາຍສາມາດບັນລຸລະບົບຮາກໃນລະບົບທັງ ໝົດ.

ດ້ວຍຂໍ້ ຈຳ ກັດດັ່ງກ່າວ, ອົງການຮັກສາຄວາມປອດໄພແຫ່ງຊາດຂອງສະຫະລັດອາເມລິກາໄດ້ອອກແບບ SELinux ຄັ້ງ ທຳ ອິດ, ວິທີການຄວບຄຸມການເຂົ້າເຖິງແບບບັງຄັບ, ເພື່ອ ຈຳ ກັດຄວາມສາມາດຂອງຂະບວນການໃນການເຂົ້າເຖິງຫຼືປະຕິບັດການ ດຳ ເນີນງານອື່ນໆກ່ຽວກັບວັດຖຸຂອງລະບົບ (ເຊັ່ນ: ແຟ້ມ, ລາຍຊື່, ພອດເຄືອຂ່າຍ) , ແລະອື່ນໆ) ກັບຮູບແບບການອະນຸຍາດ ໜ້ອຍ ທີ່ສຸດ, ເຊິ່ງສາມາດດັດແກ້ໃນພາຍຫລັງຕາມຄວາມຕ້ອງການ. ໃນສອງສາມ ຄຳ, ແຕ່ລະສ່ວນຂອງລະບົບແມ່ນໃຫ້ການເຂົ້າເຖິງທີ່ ຈຳ ເປັນໃນການເຮັດວຽກເທົ່ານັ້ນ.

ໃນ RHEL 7, SELinux ແມ່ນລວມເຂົ້າກັບແກ່ນຂອງມັນເອງແລະຖືກເປີດໃຊ້ໃນຮູບແບບການບັງຄັບໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ໃນບົດຄວາມນີ້ພວກເຮົາຈະອະທິບາຍສັ້ນໆກ່ຽວກັບແນວຄວາມຄິດພື້ນຖານທີ່ກ່ຽວຂ້ອງກັບ SELinux ແລະການ ດຳ ເນີນງານຂອງມັນ.

ຮູບແບບ SELinux

SELinux ສາມາດ ດຳ ເນີນງານໄດ້ 3 ວິທີຄື:

<

  • ການບັງຄັບໃຊ້: SELinux ປະຕິເສດການເຂົ້າເຖິງໂດຍອີງໃສ່ກົດລະບຽບນະໂຍບາຍ SELinux, ຊຸດຂອງ ຄຳ ແນະ ນຳ ທີ່ຄວບຄຸມເຄື່ອງຈັກຮັກສາຄວາມປອດໄພ.
  • ຂໍອະນຸຍາດ: SELinux ບໍ່ໄດ້ປະຕິເສດການເຂົ້າເຖິງ, ແຕ່ການປະຕິເສດຖືກເຊັນເຂົ້າ ສຳ ລັບການກະ ທຳ ທີ່ຈະຖືກປະຕິເສດຖ້າ ດຳ ເນີນການແບບບັງຄັບ.
  • ພິການ (ອະທິບາຍດ້ວຍຕົນເອງ).
  • ຄຳ ສັ່ງ 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 (ແລະເປັນລະດັບທີ່ເລືອກ):

    <

  • ຜູ້ໃຊ້ SELinux ປະກອບບັນຊີຜູ້ໃຊ້ Linux ປົກກະຕິໂດຍການວາງແຜນໃສ່ບັນຊີຜູ້ໃຊ້ 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.

    ຢ່າລັງເລທີ່ຈະແຈ້ງໃຫ້ພວກເຮົາທາບວ່າທ່ານມີ ຄຳ ຖາມຫຼື ຄຳ ເຫັນຫຍັງ.