SELinuxకి ఒక బిగినర్స్ గైడ్

SELinuxకి ఒక బిగినర్స్ గైడ్

కోర్సు విద్యార్థుల కోసం తయారు చేసిన వ్యాసం యొక్క అనువాదం "Linux సెక్యూరిటీ"

SELinux లేదా సెక్యూరిటీ ఎన్‌హాన్స్‌డ్ లైనక్స్ అనేది హానికరమైన చొరబాట్లను నిరోధించడానికి US నేషనల్ సెక్యూరిటీ ఏజెన్సీ (NSA) చే అభివృద్ధి చేయబడిన మెరుగైన యాక్సెస్ కంట్రోల్ మెకానిజం. ఇది ఇప్పటికే ఉన్న విచక్షణ (లేదా ఎంపిక) మోడల్ (ఇంగ్లీష్ విచక్షణా ప్రాప్యత నియంత్రణ, DAC) పైన బలవంతంగా (లేదా తప్పనిసరి) యాక్సెస్ నియంత్రణ నమూనా (ఇంగ్లీష్ తప్పనిసరి యాక్సెస్ నియంత్రణ, MAC) అమలు చేస్తుంది, అంటే చదవడానికి, వ్రాయడానికి, అమలు చేయడానికి అనుమతులు.

SELinux మూడు మోడ్‌లను కలిగి ఉంది:

  1. అమలుపరిచి - పాలసీ నియమాల ఆధారంగా యాక్సెస్ తిరస్కరణ.
  2. అనుమతించదగినది - అమలు మోడ్‌లో నిషేధించబడే విధానాన్ని ఉల్లంఘించే చర్యల లాగ్‌ను ఉంచడం.
  3. వికలాంగుల — SELinux పూర్తి డిసేబుల్.

డిఫాల్ట్‌గా సెట్టింగ్‌లు ఉన్నాయి /etc/selinux/config

SELinux మోడ్‌లను మారుస్తోంది

ప్రస్తుత మోడ్‌ను తెలుసుకోవడానికి, అమలు చేయండి

$ getenforce

మోడ్‌ను అనుమతికి మార్చడానికి కింది ఆదేశాన్ని అమలు చేయండి

$ setenforce 0

లేదా, నుండి మోడ్ మార్చడానికి అనుమతులిచ్చేఅమలు, అమలు చేయండి

$ setenforce 1

మీరు SELinux ని పూర్తిగా నిలిపివేయవలసి వస్తే, ఇది కాన్ఫిగరేషన్ ఫైల్ ద్వారా మాత్రమే చేయబడుతుంది

$ vi /etc/selinux/config

నిలిపివేయడానికి, SELINUX పరామితిని ఈ క్రింది విధంగా మార్చండి:

SELINUX=disabled

SELinuxని సెటప్ చేస్తోంది

ప్రతి ఫైల్ మరియు ప్రాసెస్ వినియోగదారు, పాత్ర, రకం మొదలైన అదనపు సమాచారాన్ని కలిగి ఉన్న SELinux సందర్భంతో గుర్తించబడింది. మీరు SELinuxని ప్రారంభించడం ఇదే మొదటిసారి అయితే, మీరు ముందుగా సందర్భం మరియు లేబుల్‌లను కాన్ఫిగర్ చేయాలి. లేబుల్‌లు మరియు సందర్భాన్ని కేటాయించే ప్రక్రియను ట్యాగింగ్ అంటారు. మార్కింగ్ ప్రారంభించడానికి, కాన్ఫిగరేషన్ ఫైల్‌లో మేము మోడ్‌ను మారుస్తాము అనుమతులిచ్చే.

$ vi /etc/selinux/config
SELINUX=permissive

మోడ్ సెట్ చేసిన తర్వాత అనుమతులిచ్చే, పేరుతో ఒక ఖాళీ దాచిన ఫైల్‌ను రూట్‌లో సృష్టించండి autorelabel

$ touch /.autorelabel

మరియు కంప్యూటర్ పునఃప్రారంభించండి

$ init 6

గమనిక: మేము మోడ్‌ను ఉపయోగిస్తాము అనుమతులిచ్చే మార్కింగ్ కోసం, మోడ్ యొక్క ఉపయోగం నుండి అమలు రీబూట్ సమయంలో సిస్టమ్ క్రాష్ కావడానికి కారణం కావచ్చు.

డౌన్‌లోడ్ ఏదైనా ఫైల్‌లో చిక్కుకుపోయినట్లయితే చింతించకండి, మార్కింగ్ చేయడానికి కొంత సమయం పడుతుంది. మార్కింగ్ పూర్తయిన తర్వాత మరియు మీ సిస్టమ్ బూట్ అయిన తర్వాత, మీరు కాన్ఫిగరేషన్ ఫైల్‌కి వెళ్లి మోడ్‌ను సెట్ చేయవచ్చు అమలుమరియు కూడా అమలు చేయండి:

$ setenforce 1

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

లాగ్‌లను పర్యవేక్షిస్తోంది

మీరు మార్కింగ్ సమయంలో లేదా సిస్టమ్ రన్ అవుతున్నప్పుడు కొన్ని లోపాలను ఎదుర్కొని ఉండవచ్చు. మీ SELinux సరిగ్గా పని చేస్తుందో లేదో తనిఖీ చేయడానికి మరియు ఏదైనా పోర్ట్, అప్లికేషన్ మొదలైన వాటికి యాక్సెస్‌ను బ్లాక్ చేయకపోతే, మీరు లాగ్‌లను చూడాలి. SELinux లాగ్ ఇన్‌లో ఉంది /var/log/audit/audit.log, కానీ లోపాలను కనుగొనడానికి మీరు మొత్తం చదవాల్సిన అవసరం లేదు. మీరు లోపాలను కనుగొనడానికి audit2why యుటిలిటీని ఉపయోగించవచ్చు. కింది ఆదేశాన్ని అమలు చేయండి:

$ audit2why < /var/log/audit/audit.log

ఫలితంగా, మీరు లోపాల జాబితాను అందుకుంటారు. లాగ్‌లో లోపాలు లేకుంటే, సందేశాలు ఏవీ ప్రదర్శించబడవు.

SELinux విధానాన్ని కాన్ఫిగర్ చేస్తోంది

SELinux విధానం అనేది SELinux భద్రతా యంత్రాంగాన్ని నియంత్రించే నియమాల సమితి. ఒక విధానం నిర్దిష్ట వాతావరణం కోసం నియమాల సమితిని నిర్వచిస్తుంది. ఇప్పుడు మేము నిషేధించబడిన సేవలకు ప్రాప్యతను అనుమతించడానికి విధానాలను ఎలా కాన్ఫిగర్ చేయాలో నేర్చుకుంటాము.

1. తార్కిక విలువలు (స్విచ్‌లు)

స్విచ్‌లు (బూలియన్స్) కొత్త పాలసీలను సృష్టించాల్సిన అవసరం లేకుండా రన్‌టైమ్‌లో పాలసీ భాగాలను మార్చడానికి మిమ్మల్ని అనుమతిస్తాయి. SELinux విధానాలను రీబూట్ చేయకుండా లేదా రీకంపైల్ చేయకుండా మార్పులు చేయడానికి అవి మిమ్మల్ని అనుమతిస్తాయి.

ఉదాహరణకు
మేము FTP రీడ్/రైట్ ద్వారా వినియోగదారు హోమ్ డైరెక్టరీని భాగస్వామ్యం చేయాలనుకుంటున్నాము మరియు మేము దీన్ని ఇప్పటికే భాగస్వామ్యం చేసాము, కానీ మేము దానిని యాక్సెస్ చేయడానికి ప్రయత్నించినప్పుడు, మనకు ఏమీ కనిపించదు. ఎందుకంటే SELinux విధానం FTP సర్వర్‌ని వినియోగదారు హోమ్ డైరెక్టరీని చదవకుండా మరియు వ్రాయకుండా నిరోధిస్తుంది. FTP సర్వర్ హోమ్ డైరెక్టరీలను యాక్సెస్ చేసేలా మేము విధానాన్ని మార్చాలి. దీని కోసం ఏవైనా స్విచ్‌లు ఉన్నాయో లేదో చూద్దాం

$ semanage boolean -l

ఈ ఆదేశం అందుబాటులో ఉన్న స్విచ్‌లను వాటి ప్రస్తుత స్థితి (ఆన్ లేదా ఆఫ్) మరియు వివరణతో జాబితా చేస్తుంది. మీరు ftp-మాత్రమే ఫలితాలను కనుగొనడానికి grepని జోడించడం ద్వారా మీ శోధనను మెరుగుపరచవచ్చు:

$ semanage boolean -l | grep ftp

మరియు మీరు ఈ క్రింది వాటిని కనుగొంటారు

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

ఈ స్విచ్ నిలిపివేయబడింది, కాబట్టి మేము దీన్ని ఎనేబుల్ చేస్తాము setsebool $ setsebool ftp_home_dir on

ఇప్పుడు మా ftp డెమోన్ వినియోగదారు హోమ్ డైరెక్టరీని యాక్సెస్ చేయగలదు.
గమనిక: మీరు చేయడం ద్వారా వివరణ లేకుండా అందుబాటులో ఉన్న స్విచ్‌ల జాబితాను కూడా పొందవచ్చు getsebool -a

2. లేబుల్‌లు మరియు సందర్భం

SELinux విధానాన్ని అమలు చేయడానికి ఇది అత్యంత సాధారణ మార్గం. ప్రతి ఫైల్, ఫోల్డర్, ప్రాసెస్ మరియు పోర్ట్ SELinux సందర్భంతో గుర్తించబడతాయి:

  • ఫైల్‌లు మరియు ఫోల్డర్‌ల కోసం, ఫైల్ సిస్టమ్‌లో లేబుల్‌లు పొడిగించబడిన లక్షణాల వలె నిల్వ చేయబడతాయి మరియు కింది ఆదేశంతో వీక్షించబడతాయి:
    $ ls -Z /etc/httpd
  • ప్రక్రియలు మరియు పోర్ట్‌ల కోసం, లేబులింగ్ కెర్నల్ ద్వారా నిర్వహించబడుతుంది మరియు మీరు ఈ క్రింది విధంగా ఈ లేబుల్‌లను వీక్షించవచ్చు:

ప్రక్రియ

$ ps –auxZ | grep httpd

పోర్ట్

$ netstat -anpZ | grep httpd

ఉదాహరణకు
ఇప్పుడు లేబుల్స్ మరియు సందర్భాన్ని బాగా అర్థం చేసుకోవడానికి ఒక ఉదాహరణను చూద్దాం. మనకు డైరెక్టరీకి బదులుగా వెబ్ సర్వర్ ఉందని అనుకుందాం /var/www/html/ использует /home/dan/html/. SELinux దీన్ని విధాన ఉల్లంఘనగా పరిగణిస్తుంది మరియు మీరు మీ వెబ్ పేజీలను వీక్షించలేరు. ఎందుకంటే మేము HTML ఫైల్‌లతో అనుబంధించబడిన భద్రతా సందర్భాన్ని సెట్ చేయలేదు. డిఫాల్ట్ భద్రతా సందర్భాన్ని వీక్షించడానికి, కింది ఆదేశాన్ని ఉపయోగించండి:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

ఇక్కడ మేము పొందాము httpd_sys_content_t html ఫైళ్లకు సందర్భం. ప్రస్తుతం కింది సందర్భాన్ని కలిగి ఉన్న మా ప్రస్తుత డైరెక్టరీకి మేము ఈ భద్రతా సందర్భాన్ని సెట్ చేయాలి:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

ఫైల్ లేదా డైరెక్టరీ యొక్క భద్రతా సందర్భాన్ని తనిఖీ చేయడానికి ప్రత్యామ్నాయ ఆదేశం:

$ semanage fcontext -l | grep '/var/www'

మేము సరైన భద్రతా సందర్భాన్ని కనుగొన్న తర్వాత సందర్భాన్ని మార్చడానికి సెమనేజ్‌ని కూడా ఉపయోగిస్తాము. /home/dan/html సందర్భాన్ని మార్చడానికి, కింది ఆదేశాలను అమలు చేయండి:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

సెమనేజ్ ఉపయోగించి సందర్భాన్ని మార్చిన తర్వాత, ఫైల్‌లు మరియు డైరెక్టరీల కోసం రిస్టోకాన్ కమాండ్ డిఫాల్ట్ సందర్భాన్ని లోడ్ చేస్తుంది. మా వెబ్ సర్వర్ ఇప్పుడు ఫోల్డర్ నుండి ఫైల్‌లను చదవగలదు /home/dan/htmlఎందుకంటే ఈ ఫోల్డర్ యొక్క భద్రతా సందర్భం మార్చబడింది httpd_sys_content_t.

3. స్థానిక విధానాలను రూపొందించండి

పైన పేర్కొన్న పద్ధతులు మీకు ఉపయోగపడని పరిస్థితులు ఉండవచ్చు మరియు మీరు audit.logలో ఎర్రర్‌లను (avc/denial) పొందుతారు. ఇది జరిగినప్పుడు, మీరు స్థానిక విధానాన్ని రూపొందించాలి. మీరు పైన వివరించిన విధంగా, audit2why ఉపయోగించి అన్ని లోపాలను కనుగొనవచ్చు.

లోపాలను పరిష్కరించడానికి మీరు స్థానిక విధానాన్ని సృష్టించవచ్చు. ఉదాహరణకు, మేము httpd (apache) లేదా smbd (samba)కి సంబంధించిన ఎర్రర్‌ను పొందుతాము, మేము లోపాలను గుర్తించి వాటి కోసం ఒక విధానాన్ని రూపొందిస్తాము:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

ఇది http_policy и smb_policy మేము సృష్టించిన స్థానిక విధానాల పేర్లు. ఇప్పుడు మనం ఈ సృష్టించిన స్థానిక విధానాలను ప్రస్తుత SELinux విధానంలోకి లోడ్ చేయాలి. ఇది క్రింది విధంగా చేయవచ్చు:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

మా స్థానిక విధానాలు డౌన్‌లోడ్ చేయబడ్డాయి మరియు మేము ఇకపై audit.logలో ఏ avc లేదా denailని స్వీకరించకూడదు.

ఇది SELinuxని అర్థం చేసుకోవడంలో మీకు సహాయపడటానికి నా ప్రయత్నం. ఈ కథనాన్ని చదివిన తర్వాత మీరు SELinuxతో మరింత సుఖంగా ఉంటారని నేను ఆశిస్తున్నాను.

మూలం: www.habr.com

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