సిస్టమ్ నిర్వాహకుల కోసం SELinux చీట్ షీట్: ముఖ్యమైన ప్రశ్నలకు 42 సమాధానాలు

వ్యాసం యొక్క అనువాదం కోర్సు యొక్క విద్యార్థుల కోసం ప్రత్యేకంగా తయారు చేయబడింది "Linux అడ్మినిస్ట్రేటర్".

సిస్టమ్ నిర్వాహకుల కోసం SELinux చీట్ షీట్: ముఖ్యమైన ప్రశ్నలకు 42 సమాధానాలు

మెరుగైన భద్రతతో Linuxలో జీవితం, విశ్వం మరియు ప్రతిదాని గురించి ముఖ్యమైన ప్రశ్నలకు ఇక్కడ మీరు సమాధానాలు పొందుతారు.

"విషయాలు ఎల్లప్పుడూ కనిపించే విధంగా ఉండవు అనే ముఖ్యమైన నిజం సాధారణ జ్ఞానం ..."

-డగ్లస్ ఆడమ్స్, పాలపుంతకు హైచ్కెర్ యొక్క సూచికలు

భద్రత. విశ్వసనీయత పెరిగింది. కరస్పాండెన్స్. విధానం. అపోకలిప్స్ సిసాడ్మిన్ యొక్క నలుగురు గుర్రపు సైనికులు. మా రోజువారీ పనులతో పాటు - పర్యవేక్షణ, బ్యాకప్, అమలు, కాన్ఫిగరేషన్, నవీకరించడం మొదలైనవి - మా సిస్టమ్‌ల భద్రతకు కూడా మేము బాధ్యత వహిస్తాము. మేము మెరుగైన భద్రతను నిలిపివేయమని మూడవ పక్షం ప్రొవైడర్ సిఫార్సు చేసిన సిస్టమ్‌లు కూడా. ఇది పని అనిపిస్తుంది ఏతాన్ హంట్ "మిషన్: ఇంపాజిబుల్" నుండి

ఈ గందరగోళాన్ని ఎదుర్కొన్న కొందరు సిస్టమ్ నిర్వాహకులు తీసుకోవాలని నిర్ణయించుకున్నారు నీలం మాత్ర, ఎందుకంటే జీవితం, విశ్వం మరియు అన్నింటికీ పెద్ద ప్రశ్నకు సమాధానం తమకు ఎప్పటికీ తెలియదని వారు అనుకుంటారు. మరియు మనందరికీ తెలిసినట్లుగా, ఆ సమాధానం 42.

ది హిచ్‌హైకర్స్ గైడ్ టు ది గెలాక్సీ స్ఫూర్తితో, నియంత్రణ మరియు ఉపయోగం గురించిన ముఖ్యమైన ప్రశ్నలకు ఇక్కడ 42 సమాధానాలు ఉన్నాయి. SELinux మీ సిస్టమ్‌లపై.

1. SELinux అనేది బలవంతంగా యాక్సెస్ నియంత్రణ వ్యవస్థ, అంటే ప్రతి ప్రక్రియకు ఒక లేబుల్ ఉంటుంది. ప్రతి ఫైల్, డైరెక్టరీ మరియు సిస్టమ్ వస్తువు కూడా లేబుల్‌లను కలిగి ఉంటాయి. విధాన నియమాలు ట్యాగ్ చేయబడిన ప్రక్రియలు మరియు వస్తువుల మధ్య యాక్సెస్‌ను నియంత్రిస్తాయి. కెర్నల్ ఈ నియమాలను అమలు చేస్తుంది.

2. రెండు అత్యంత ముఖ్యమైన భావనలు: లేబులింగ్ - గుర్తులు (ఫైళ్లు, ప్రక్రియలు, పోర్ట్‌లు మొదలైనవి) మరియు రకం అమలు (ఇది రకాల ఆధారంగా ఒకదానికొకటి ప్రక్రియలను వేరు చేస్తుంది).

3. సరైన లేబుల్ ఆకృతి user:role:type:level (ఐచ్ఛికం).

4. బహుళ-స్థాయి భద్రతను అందించే ఉద్దేశ్యం (బహుళ-స్థాయి భద్రత - MLS) వారు ఉపయోగించే డేటా భద్రత స్థాయి ఆధారంగా ప్రక్రియలను (డొమైన్‌లు) నిర్వహించడం. ఉదాహరణకు, ఒక రహస్య ప్రక్రియ అత్యంత రహస్య డేటాను చదవదు.

5. బహుళ-కేటగిరీ భద్రతను నిర్ధారించడం (బహుళ-కేటగిరీ భద్రత - MCS) ఒకదానికొకటి సారూప్య ప్రక్రియలను రక్షిస్తుంది (ఉదాహరణకు, వర్చువల్ మిషన్లు, ఓపెన్‌షిఫ్ట్ ఇంజిన్‌లు, SELinux శాండ్‌బాక్స్‌లు, కంటైనర్‌లు మొదలైనవి).

6. బూట్ వద్ద SELinux మోడ్‌లను మార్చడానికి కెర్నల్ ఎంపికలు:

  • autorelabel=1 → సిస్టమ్ రీలేబులింగ్‌ను అమలు చేయడానికి కారణమవుతుంది
  • selinux=0 → కెర్నల్ SELinux ఇన్‌ఫ్రాస్ట్రక్చర్‌ను లోడ్ చేయదు
  • enforcing=0 → అనుమతి మోడ్‌లో లోడ్ అవుతోంది

7. మీరు మొత్తం సిస్టమ్‌ను మళ్లీ లేబుల్ చేయవలసి వస్తే:

# touch /.autorelabel
#reboot

సిస్టమ్ మార్కింగ్ పెద్ద సంఖ్యలో ఎర్రర్‌లను కలిగి ఉంటే, రీమార్కింగ్ విజయవంతం కావడానికి మీరు పర్మిసివ్ మోడ్‌లో బూట్ చేయాల్సి ఉంటుంది.

8. SELinux ప్రారంభించబడిందో లేదో తనిఖీ చేయడానికి: # getenforce

9. SELinuxని తాత్కాలికంగా ఎనేబుల్/డిసేబుల్ చేయడానికి: # setenforce [1|0]

<span style="font-family: arial; ">10</span> SELinux స్థితిని తనిఖీ చేస్తోంది: # sestatus

<span style="font-family: arial; ">10</span> కాన్ఫిగరేషన్ ఫైల్: /etc/selinux/config

<span style="font-family: arial; ">10</span> SELinux ఎలా పని చేస్తుంది? అపాచీ వెబ్ సర్వర్ కోసం ఇక్కడ ఒక ఉదాహరణ మార్కింగ్ ఉంది:

  • బైనరీ ప్రాతినిధ్యం: /usr/sbin/httpd→httpd_exec_t
  • కాన్ఫిగరేషన్ డైరెక్టరీ: /etc/httpd→httpd_config_t
  • లాగ్ ఫైల్ డైరెక్టరీ: /var/log/httpd → httpd_log_t
  • కంటెంట్ డైరెక్టరీ: /var/www/html → httpd_sys_content_t
  • స్క్రిప్ట్‌ని ప్రారంభించండి: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • ప్రక్రియ: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • పోర్టులు: 80/tcp, 443/tcp → httpd_t, http_port_t

సందర్భంలో నడుస్తున్న ప్రక్రియ httpd_t, లేబుల్ చేయబడిన వస్తువుతో పరస్పర చర్య చేయవచ్చు httpd_something_t.

<span style="font-family: arial; ">10</span> అనేక ఆదేశాలు వాదనను అంగీకరిస్తాయి -Z సందర్భాన్ని వీక్షించడానికి, సృష్టించడానికి మరియు మార్చడానికి:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

ఫైల్‌లు వాటి పేరెంట్ డైరెక్టరీ (కొన్ని మినహాయింపులతో) సందర్భం ఆధారంగా సృష్టించబడినప్పుడు సందర్భాలు స్థాపించబడతాయి. RPMలు ఇన్‌స్టాలేషన్ సమయంలో సందర్భాలను సెట్ చేయగలవు.

<span style="font-family: arial; ">10</span> SELinux ఎర్రర్‌లకు నాలుగు ప్రధాన కారణాలు ఉన్నాయి, ఇవి దిగువ పాయింట్లు 15-21లో మరింత వివరంగా వివరించబడ్డాయి:

  • లేబులింగ్ సమస్యలు
  • ఎందుకంటే SELinux తెలుసుకోవలసినది
  • SELinux విధానం/అప్లికేషన్‌లో లోపం
  • మీ సమాచారం రాజీపడవచ్చు

<span style="font-family: arial; ">10</span> లేబులింగ్ సమస్య: మీ ఫైల్‌లు ఉంటే /srv/myweb తప్పుగా గుర్తు పెట్టబడ్డాయి, యాక్సెస్ నిరాకరించబడవచ్చు. దీన్ని పరిష్కరించడానికి ఇక్కడ కొన్ని మార్గాలు ఉన్నాయి:

  • మీకు లేబుల్ తెలిస్తే:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • సమానమైన మార్కింగ్‌లతో కూడిన ఫైల్ మీకు తెలిస్తే:
    # semanage fcontext -a -e /srv/myweb /var/www
  • సందర్భాన్ని పునరుద్ధరించడం (రెండు సందర్భాలలో):
    # restorecon -vR /srv/myweb

<span style="font-family: arial; ">10</span> లేబులింగ్ సమస్య: మీరు ఫైల్‌ను కాపీ చేయడానికి బదులుగా దాన్ని తరలించినట్లయితే, ఫైల్ దాని అసలు సందర్భాన్ని అలాగే ఉంచుతుంది. ఈ సమస్యను పరిష్కరించడానికి:

  • లేబుల్‌తో సందర్భ ఆదేశాన్ని మార్చండి:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • లింక్ లేబుల్‌తో సందర్భ ఆదేశాన్ని మార్చండి:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • సందర్భాన్ని పునరుద్ధరించండి (రెండు సందర్భాలలో): # restorecon -vR /var/www/html/

<span style="font-family: arial; ">10</span> ఉంటే మీరు తెలుసుకోవలసిన SELinuxHTTPD పోర్ట్ 8585లో వింటుంటే, SELinuxకి చెప్పండి:

# semanage port -a -t http_port_t -p tcp 8585

<span style="font-family: arial; ">10</span> మీరు తెలుసుకోవలసిన SELinux SELinux విధానం ఓవర్‌రైట్ చేయబడుతుందని తెలియకుండా రన్‌టైమ్‌లో SELinux విధానంలోని భాగాలను మార్చడానికి అనుమతించే బూలియన్ విలువలు. ఉదాహరణకు, మీరు httpd ఇమెయిల్ పంపాలనుకుంటే, నమోదు చేయండి: # setsebool -P httpd_can_sendmail 1

<span style="font-family: arial; ">10</span> మీరు తెలుసుకోవలసిన SELinux SELinux సెట్టింగ్‌లను ప్రారంభించడం/నిలిపివేయడం కోసం తార్కిక విలువలు:

  • అన్ని బూలియన్ విలువలను చూడటానికి: # getsebool -a
  • ప్రతి దాని వివరణను చూడటానికి: # semanage boolean -l
  • బూలియన్ విలువను సెట్ చేయడానికి: # setsebool [_boolean_] [1|0]
  • శాశ్వత సంస్థాపన కోసం, జోడించండి -P. ఉదాహరణకు: # setsebool httpd_enable_ftp_server 1 -P

<span style="font-family: arial; ">10</span> SELinux విధానాలు/అప్లికేషన్‌లలో లోపాలు ఉండవచ్చు, వాటితో సహా:

  • అసాధారణ కోడ్ మార్గాలు
  • ఆకృతీకరణలు
  • stdoutని దారి మళ్లిస్తోంది
  • ఫైల్ డిస్క్రిప్టర్ లీక్‌లు
  • ఎక్జిక్యూటబుల్ మెమరీ
  • పేలవంగా నిర్మించబడిన గ్రంథాలయాలు

ఓపెన్ టిక్కెట్లు (బగ్జిల్లాకు నివేదికను సమర్పించవద్దు; బగ్జిల్లాకు SLA లేదు).

<span style="font-family: arial; ">10</span> మీ సమాచారం రాజీపడవచ్చుమీరు పరిమితం చేయబడిన డొమైన్‌లను కలిగి ఉంటే:

  • కెర్నల్ మాడ్యూల్‌లను లోడ్ చేయండి
  • అమలు చేయబడిన SELinux మోడ్‌ని నిలిపివేయండి
  • కు వ్రాయండి etc_t/shadow_t
  • iptables నియమాలను మార్చండి

<span style="font-family: arial; ">10</span> పాలసీ మాడ్యూళ్లను అభివృద్ధి చేయడానికి SELinux సాధనాలు:

# yum -y install setroubleshoot setroubleshoot-server

రీబూట్ చేయండి లేదా పునఃప్రారంభించండి auditd సంస్థాపన తర్వాత.

<span style="font-family: arial; ">10</span> ఉపయోగం

journalctl

అనుబంధించబడిన అన్ని లాగ్‌ల జాబితాను ప్రదర్శించడానికి setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

<span style="font-family: arial; ">10</span> ఉపయోగం journalctl నిర్దిష్ట SELinux ట్యాగ్‌తో అనుబంధించబడిన అన్ని లాగ్‌లను జాబితా చేయడానికి. ఉదాహరణకి:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

<span style="font-family: arial; ">10</span> SELinux లోపం సంభవించినట్లయితే, లాగ్‌ని ఉపయోగించండి setroubleshoot అనేక సాధ్యమైన పరిష్కారాలను అందిస్తోంది.
ఉదాహరణకు, నుండి journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

<span style="font-family: arial; ">10</span> లాగింగ్: SELinux అనేక ప్రదేశాలలో సమాచారాన్ని నమోదు చేస్తుంది:

  • / Var / log / సందేశాలను
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

<span style="font-family: arial; ">10</span> లాగింగ్: ఆడిట్ లాగ్‌లో SELinux లోపాల కోసం శోధిస్తోంది:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

<span style="font-family: arial; ">10</span> నిర్దిష్ట సేవ కోసం SELinux యాక్సెస్ వెక్టర్ కాష్ (AVC) సందేశాలను కనుగొనడానికి:

# ausearch -m avc -c httpd

<span style="font-family: arial; ">10</span> వినియోగ audit2allow నిషేధించబడిన కార్యకలాపాల లాగ్‌ల నుండి సమాచారాన్ని సేకరిస్తుంది మరియు SELinux అనుమతి విధాన నియమాలను రూపొందిస్తుంది. ఉదాహరణకి:

  • యాక్సెస్ ఎందుకు తిరస్కరించబడిందనే దాని గురించి మానవులు చదవగలిగే వివరణను రూపొందించడానికి: # audit2allow -w -a
  • తిరస్కరించబడిన యాక్సెస్‌ను అనుమతించే రకం అమలు నియమాన్ని వీక్షించడానికి: # audit2allow -a
  • అనుకూల మాడ్యూల్‌ని సృష్టించడానికి: # audit2allow -a -M mypolicy
  • ఎంపిక -M పేర్కొన్న పేరుతో టైప్ ఎన్‌ఫోర్స్‌మెంట్ ఫైల్ (.te)ని సృష్టిస్తుంది మరియు పాలసీ ప్యాకేజీగా (.pp) నియమాన్ని కంపైల్ చేస్తుంది: mypolicy.pp mypolicy.te
  • అనుకూల మాడ్యూల్‌ను ఇన్‌స్టాల్ చేయడానికి: # semodule -i mypolicy.pp

<span style="font-family: arial; ">10</span> పర్మిసివ్ మోడ్‌లో పని చేయడానికి ప్రత్యేక ప్రక్రియను (డొమైన్) కాన్ఫిగర్ చేయడానికి: # semanage permissive -a httpd_t

<span style="font-family: arial; ">10</span> మీరు ఇకపై డొమైన్ అనుమతించబడకూడదనుకుంటే: # semanage permissive -d httpd_t

<span style="font-family: arial; ">10</span> అన్ని అనుమతించబడిన డొమైన్‌లను నిలిపివేయడానికి: # semodule -d permissivedomains

<span style="font-family: arial; ">10</span> MLS SELinux విధానాన్ని ప్రారంభిస్తోంది: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

SELinux అనుమతి మోడ్‌లో నడుస్తోందని నిర్ధారించుకోండి: # setenforce 0
స్క్రిప్ట్ ఉపయోగించండి fixfilesతదుపరి రీబూట్‌లో ఫైల్‌లు రీలేబుల్ చేయబడిందని నిర్ధారించుకోవడానికి:

# fixfiles -F onboot # reboot

<span style="font-family: arial; ">10</span> నిర్దిష్ట MLS పరిధితో వినియోగదారుని సృష్టించండి: # useradd -Z staff_u john

ఆదేశాన్ని ఉపయోగించడం useradd, కొత్త వినియోగదారుని ఇప్పటికే ఉన్న SELinux వినియోగదారుకు మ్యాప్ చేయండి (ఈ సందర్భంలో, staff_u).

<span style="font-family: arial; ">10</span> SELinux మరియు Linux వినియోగదారుల మధ్య మ్యాపింగ్‌ను వీక్షించడానికి: # semanage login -l

<span style="font-family: arial; ">10</span> వినియోగదారు కోసం నిర్దిష్ట పరిధిని నిర్వచించండి: # semanage login --modify --range s2:c100 john

<span style="font-family: arial; ">10</span> వినియోగదారు హోమ్ డైరెక్టరీ లేబుల్‌ని సరిచేయడానికి (అవసరమైతే): # chcon -R -l s2:c100 /home/john

<span style="font-family: arial; ">10</span> ప్రస్తుత వర్గాలను వీక్షించడానికి: # chcat -L

<span style="font-family: arial; ">10</span> వర్గాలను మార్చడానికి లేదా మీ స్వంతంగా సృష్టించడం ప్రారంభించడానికి, ఫైల్‌ను క్రింది విధంగా సవరించండి:

/etc/selinux/_<selinuxtype>_/setrans.conf

<span style="font-family: arial; ">10</span> నిర్దిష్ట ఫైల్, పాత్ర మరియు వినియోగదారు సందర్భంలో కమాండ్ లేదా స్క్రిప్ట్‌ను అమలు చేయడానికి:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t ఫైల్ సందర్భం
  • -r పాత్ర సందర్భం
  • -u వినియోగదారు సందర్భం

<span style="font-family: arial; ">10</span> SELinux నిలిపివేయబడిన కంటైనర్‌లు:

  • పోడ్మాన్: # podman run --security-opt label=disable …
  • డాకర్: # docker run --security-opt label=disable …

<span style="font-family: arial; ">10</span> మీరు కంటైనర్‌కు సిస్టమ్‌కు పూర్తి యాక్సెస్ ఇవ్వాల్సిన అవసరం ఉంటే:

  • పోడ్మాన్: # podman run --privileged …
  • డాకర్: # docker run --privileged …

మరియు ఇప్పుడు మీకు సమాధానం ఇప్పటికే తెలుసు. కాబట్టి దయచేసి: భయపడకండి మరియు SELinuxని ప్రారంభించండి.

సూచనలు:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి