ຈັດຕັ້ງປະຕິບັດການຄວບຄຸມການເຂົ້າເຖິງແບບບັງຄັບດ້ວຍ SELinux ຫຼື AppArmor ໃນ Linux


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

MAC ທີ່ໄດ້ຮັບຄວາມນິຍົມແລະ ນຳ ໃຊ້ຢ່າງກວ້າງຂວາງອີກຢ່າງ ໜຶ່ງ ແມ່ນ AppArmor ເຊິ່ງນອກ ເໜືອ ຈາກຄຸນລັກສະນະຕ່າງໆທີ່ SELinux ສະ ໜອງ ໃຫ້ມີຮູບແບບການຮຽນຮູ້ທີ່ຊ່ວຍໃຫ້ລະບົບສາມາດ“ ຮຽນຮູ້” ວິທີການໃຊ້ງານສະເພາະໃດ ໜຶ່ງ ແລະການ ກຳ ນົດຂໍ້ ຈຳ ກັດໂດຍການ ກຳ ນົດໂປແກຼມໂປແກຼມ ສຳ ລັບການ ນຳ ໃຊ້ໂປແກຼມປອດໄພ.

ໃນ CentOS 7, SELinux ຖືກລວມເຂົ້າກັບ kernel ຕົວມັນເອງແລະຖືກເປີດໃຊ້ໃນຮູບແບບການບັງຄັບໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ (ຫຼາຍກວ່ານີ້ໃນພາກຕໍ່ໄປ), ກົງກັນຂ້າມກັບ openSUSE ແລະ Ubuntu ທີ່ໃຊ້ AppArmor.

ໃນບົດຂຽນນີ້ພວກເຮົາຈະອະທິບາຍກ່ຽວກັບສິ່ງທີ່ ຈຳ ເປັນຂອງ SELinux ແລະ AppArmor ແລະວິທີການໃຊ້ເຄື່ອງມືໃດ ໜື່ງ ເພື່ອປະໂຫຍດຂອງທ່ານຂື້ນກັບການແຈກຢາຍທີ່ທ່ານເລືອກ.

ການແນະ ນຳ ກ່ຽວກັບ SELinux ແລະວິທີໃຊ້ໃນ CentOS 7

Security Enhanced Linux ສາມາດປະຕິບັດງານໄດ້ສອງທາງ:

<

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

    ເພື່ອສະແດງຮູບແບບຂອງ SELinux ໃນປະຈຸບັນ, ໃຫ້ໃຊ້ getenforce . ຖ້າທ່ານຕ້ອງການປິດໂຫມດການ ດຳ ເນີນງານ, ໃຫ້ໃຊ້ setenforce 0 (ເພື່ອ ກຳ ນົດມັນໃຫ້ Permissive) ຫຼື setenforce 1 (ບັງຄັບໃຊ້).

    ເນື່ອງຈາກວ່າການປ່ຽນແປງນີ້ຈະບໍ່ມີຊີວິດຢູ່ໃນການເລີ່ມຕົ້ນ ໃໝ່, ທ່ານຈະຕ້ອງແກ້ໄຂເອກະສານ/etc/selinux/config ແລະຕັ້ງຄ່າ SELINUX ໃຫ້ເປັນ ບັງຄັບໃຊ້ , ອະນຸຍາດ , ຫຼື ຄົນພິການ ເພື່ອສາມາດບັນລຸຄວາມອົດທົນໃນການເລີ່ມຕົ້ນ ໃໝ່:

    ໃນປື້ມບັນທຶກຂ້າງ ໜຶ່ງ, ຖ້າ getenforce ກັບຄືນຄວາມພິການ, ທ່ານຈະຕ້ອງແກ້ໄຂ/etc/selinux/config ດ້ວຍຮູບແບບການ ດຳ ເນີນງານທີ່ທ່ານຕ້ອງການແລະເປີດ ໃໝ່. ຖ້າບໍ່ດັ່ງນັ້ນ, ທ່ານຈະບໍ່ສາມາດຕັ້ງ (ຫຼືປິດໃຊ້ງານ) ຮູບແບບການ ດຳ ເນີນງານກັບ setenforce .

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

    ສອງກໍລະນີ ທຳ ມະດາທີ່ພວກເຮົາຈະຕ້ອງໄດ້ຮັບມືກັບ SELinux ຄື:

    <

  • ປ່ຽນພອດເລີ່ມຕົ້ນທີ່ daemon ຟັງ.
  • ການ ກຳ ນົດທິດທາງ DocumentRoot ສຳ ລັບເຈົ້າພາບເສມືນນອກ/var/www/html.
  • ລອງເບິ່ງສອງກໍລະນີນີ້ໂດຍໃຊ້ຕົວຢ່າງຕໍ່ໄປນີ້.

    ໜຶ່ງ ໃນສິ່ງ ທຳ ອິດທີ່ຜູ້ບໍລິຫານລະບົບເຮັດເພື່ອຮັບປະກັນເຄື່ອງແມ່ຂ່າຍຂອງພວກເຂົາແມ່ນການປ່ຽນພອດທີ່ SSH daemon ຟັງ, ສ່ວນຫຼາຍຈະຂັດຂວາງເຄື່ອງສະແກນ port ແລະຜູ້ໂຈມຕີພາຍນອກ. ເພື່ອເຮັດສິ່ງນີ້, ພວກເຮົາໃຊ້ Port directive ໃນ/etc/ssh/sshd_config ຕາມດ້ວຍເລກ Port ໃໝ່ ດັ່ງຕໍ່ໄປນີ້ (ພວກເຮົາຈະໃຊ້ port 9999 ໃນກໍລະນີນີ້):

    Port 9999
    

    ຫຼັງຈາກທີ່ພະຍາຍາມເລີ່ມຕົ້ນການບໍລິການ ໃໝ່ ແລະກວດເບິ່ງສະຖານະຂອງມັນພວກເຮົາຈະເຫັນວ່າມັນບໍ່ສາມາດເລີ່ມຕົ້ນ:

    # systemctl restart sshd
    # systemctl status sshd
    

    ຖ້າພວກເຮົາພິຈາລະນາເບິ່ງ /var/log/audit/audit.log, ພວກເຮົາຈະເຫັນວ່າ sshd ຖືກປ້ອງກັນບໍ່ໃຫ້ເລີ່ມຕົ້ນທີ່ Port 9999 ໂດຍ SELinux ເພາະວ່ານັ້ນແມ່ນພອດທີ່ສະຫງວນໄວ້ ສຳ ລັບການບໍລິການ JBoss Management (ຂໍ້ຄວາມບັນທຶກ SELinux ປະກອບມີ ຄຳ ວ່າ“ AVC” ເພື່ອໃຫ້ພວກເຂົາຮູ້ໄດ້ງ່າຍຈາກຂໍ້ຄວາມອື່ນໆ):

    # cat /var/log/audit/audit.log | grep AVC | tail -1
    

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

    # yum install policycoreutils-python
    

    ເພື່ອເບິ່ງລາຍຊື່ຂອງພອດທີ່ SELinux ອະນຸຍາດໃຫ້ sshd ຟັງ. ໃນຮູບຕໍ່ໄປນີ້ພວກເຮົາຍັງສາມາດເຫັນໄດ້ວ່າພອດ 9999 ຖືກສະຫງວນໄວ້ ສຳ ລັບການບໍລິການອື່ນແລະດັ່ງນັ້ນພວກເຮົາບໍ່ສາມາດໃຊ້ມັນເພື່ອ ດຳ ເນີນການບໍລິການອື່ນໃນເວລານີ້:

    # semanage port -l | grep ssh
    

    ແນ່ນອນວ່າພວກເຮົາສາມາດເລືອກເອົາພອດອື່ນ ສຳ ລັບ SSH, ແຕ່ຖ້າແນ່ໃຈວ່າພວກເຮົາຈະບໍ່ ຈຳ ເປັນຕ້ອງໃຊ້ເຄື່ອງສະເພາະນີ້ ສຳ ລັບການບໍລິການທີ່ກ່ຽວຂ້ອງກັບ JBoss, ຈາກນັ້ນພວກເຮົາສາມາດດັດແປງລະບຽບການຂອງ SELinux ທີ່ມີຢູ່ແລ້ວແລະມອບ ໝາຍ ທີ່ Port ນັ້ນໃຫ້ SSH ແທນ:

    # semanage port -m -t ssh_port_t -p tcp 9999
    

    ຫລັງຈາກນັ້ນ, ພວກເຮົາສາມາດໃຊ້ ຄຳ ສັ່ງ semanage ຄັ້ງ ທຳ ອິດເພື່ອກວດເບິ່ງວ່າທ່າເຮືອໄດ້ຖືກມອບ ໝາຍ ໃຫ້ຖືກຕ້ອງຫລືບໍ່, ຫຼືຕົວເລືອກ -lC (ສັ້ນ ສຳ ລັບລາຍຊື່ທີ່ ກຳ ຫນົດເອງ):

    # semanage port -lC
    # semanage port -l | grep ssh
    

    ດຽວນີ້ພວກເຮົາສາມາດເລີ່ມ SSH ແລະເຊື່ອມຕໍ່ກັບການບໍລິການໂດຍໃຊ້ພອດ 9999.

    ຖ້າທ່ານຕ້ອງການຕັ້ງຄ່າ Apache virtual host ໂດຍໃຊ້ໄດເລກະທໍລີທີ່ບໍ່ແມ່ນ/var/www/html ເປັນ DocumentRoot (ເວົ້າຕົວຢ່າງ:/websrv/sites/gabriel/public_html):

    DocumentRoot “/websrv/sites/gabriel/public_html”
    

    Apache ຈະປະຕິເສດທີ່ຈະໃຫ້ບໍລິການເນື້ອຫາເພາະວ່າ index.html ໄດ້ຖືກຕິດປ້າຍດ້ວຍປະເພດ default_t SELinux, ເຊິ່ງ Apache ບໍ່ສາມາດເຂົ້າເຖິງໄດ້:

    # wget http://localhost/index.html
    # ls -lZ /websrv/sites/gabriel/public_html/index.html
    

    ເຊັ່ນດຽວກັບຕົວຢ່າງທີ່ຜ່ານມາ, ທ່ານສາມາດໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້ເພື່ອພິສູດວ່ານີ້ແມ່ນບັນຫາທີ່ກ່ຽວຂ້ອງກັບ SELinux:

    # cat /var/log/audit/audit.log | grep AVC | tail -1
    

    ເພື່ອປ່ຽນປ້າຍຂອງ/websrv/sites/gabriel/public_html ຄືນ ໃໝ່ ໃຫ້ກັບ httpd_sys_content_t , ເຮັດ:

    # semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?"
    

    ຄຳ ສັ່ງຂ້າງເທິງນີ້ຈະຊ່ວຍໃຫ້ Apache ສາມາດເຂົ້າເຖິງໄດເລກະທໍລີນັ້ນແລະເນື້ອຫາຂອງມັນ.

    ສຸດທ້າຍ, ເພື່ອ ນຳ ໃຊ້ນະໂຍບາຍ (ແລະເຮັດໃຫ້ປ້າຍຊື່ປ່ຽນແປງຢ່າງມີປະສິດຕິຜົນ), ເຮັດ:

    # restorecon -R -v /websrv/sites/gabriel/public_html
    

    ດຽວນີ້ທ່ານຄວນຈະສາມາດເຂົ້າເຖິງໄດເລກະທໍລີ:

    # wget http://localhost/index.html
    

    ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບ SELinux, ໃຫ້ເບິ່ງຄູ່ມືກ່ຽວກັບປື້ມຄູ່ມືຂອງ Fedora 22 SELinux ແລະ Administrator.