అందరికి వందనాలు. మేము చురుకుగా పనిలోకి ప్రవేశిస్తున్నాము మరియు జనవరిలో ఇప్పటికే అనేక శక్తివంతమైన లాంచ్లను సిద్ధం చేస్తున్నాము. ఇతరులలో, ప్రతి ఒక్కరికి ఇష్టమైన కోర్సు యొక్క కొత్త స్ట్రీమ్ కోసం నమోదు ప్రకటించబడింది.
ఫైల్ అనుమతులు SUID ఎక్జిక్యూటబుల్స్కు సురక్షితమైన ప్రత్యామ్నాయాన్ని అందిస్తాయి, అయితే మొదట కొంచెం గందరగోళంగా అనిపించవచ్చు.
బైనరీలు అని మనందరికీ తెలుసు
మీరు పై కథనాన్ని వివరంగా చదవకుండా ఉండాలనుకుంటే నేను మీకు కొంత సమయాన్ని ఆదా చేస్తాను: ముఖ్యంగా, ఫైల్ అనుమతులు రూట్గా రన్ అయ్యే ప్రక్రియలను అనుమతిస్తాయి మరియు నిర్దిష్ట సామర్థ్యాలను నిలుపుకోవడానికి ఏదైనా చేయడానికి అనుమతించబడతాయి, పరిమితం
సాధారణంగా ఎల్లప్పుడూ రూట్గా అమలు చేసే సేవలకు అనుమతులు గొప్పవి, అయితే కమాండ్ లైన్ యుటిలిటీల గురించి ఏమిటి? అదృష్టవశాత్తూ, మీరు సరైన యుటిలిటీలను ఇన్స్టాల్ చేసినట్లయితే ఇది కూడా మద్దతు ఇస్తుంది. మీరు ఉబుంటును ఉపయోగిస్తుంటే, ఉదాహరణకు మీకు ప్యాకేజీ అవసరం libcap2-bin
. మీరు నాన్ ఆర్కైక్ కెర్నల్ను కూడా అమలు చేయాలి (వెర్షన్ నుండి 2.6.24).
ఈ ఫంక్షన్లు SUID బిట్ను సెట్ చేయడం లాంటి ఎక్జిక్యూటబుల్ ఫైల్లతో అనుమతులను అనుబంధించడానికి అనుమతిస్తాయి, కానీ నిర్దిష్ట అనుమతుల కోసం మాత్రమే. వినియోగ setcap
ఫైల్ నుండి అనుమతులను జోడించడానికి మరియు తీసివేయడానికి ఉపయోగించబడుతుంది.
మీకు అవసరమైన అనుమతులను ఎంచుకోవడం మొదటి దశ. ఈ కథనం కొరకు, నెట్వర్క్ డయాగ్నస్టిక్ టూల్ అని పిలవబడేదని నేను ఊహిస్తున్నాను tracewalk
, ఇది ఉపయోగించగలగాలి CAP_NET_RAW
.
మీరు బైనరీ ఉన్న డైరెక్టరీలో ఉన్నారని ఊహిస్తూ tracewalk
, మీరు ఈ అనుమతిని ఇలా జోడించవచ్చు:
sudo setcap cap_net_raw=eip tracewalk
ప్రస్తుతానికి ప్రత్యయాన్ని విస్మరించండి =eip
పరిష్కారం కోసం, నేను దాని గురించి కొన్ని సెకన్లలో మాట్లాడతాను. అనుమతి పేరు చిన్న అక్షరంలో ఉందని గమనించండి. మీరు దీనితో అనుమతులను సరిగ్గా కాన్ఫిగర్ చేసారో లేదో ఇప్పుడు మీరు తనిఖీ చేయవచ్చు:
setcap -v cap_new_raw=eip tracewalk
లేదా మీరు ఇచ్చిన ఎక్జిక్యూటబుల్ కోసం సెట్ చేసిన అన్ని అనుమతులను జాబితా చేయవచ్చు:
getcap tracewalk
సూచన కోసం, మీరు దీనితో ఎక్జిక్యూటబుల్ నుండి అన్ని అనుమతులను కూడా తీసివేయవచ్చు:
setcap -r tracewalk
ఈ సమయంలో, మీరు ఎక్జిక్యూటబుల్ని అన్ప్రివిలేజ్డ్ యూజర్గా రన్ చేయగలగాలి మరియు అది ముడి సాకెట్లతో పని చేయగలగాలి, కానీ రూట్ యూజర్కు ఉన్న ఇతర అధికారాలు ఏవీ ఉండకూడదు.
కాబట్టి ఈ వింత ప్రత్యయం అంటే ఏమిటి? =eip
? దీనికి అనుమతుల స్వభావం గురించి కొంత అవగాహన అవసరం. ప్రతి ప్రక్రియకు మూడు సెట్ల అనుమతులు ఉంటాయి - సమర్థవంతమైన, వారసత్వంగా మరియు అనుమతించబడిన:
- ప్రభావవంతమైనది అనుమతులు అనేది ఒక ప్రక్రియ వాస్తవానికి ఏమి చేయగలదో నిర్వచించేవి. ఉదాహరణకు, ఒకవేళ అది ముడి సాకెట్లతో వ్యవహరించదు
CAP_NET_RAW
సమర్థవంతమైన సెట్లో లేదు. - అందుబాటులో ఉంది అనుమతులు అనేవి తగిన కాల్ని ఉపయోగించి ప్రాసెస్ని అభ్యర్థిస్తే వాటిని కలిగి ఉండటానికి అనుమతించబడతాయి. చెప్పబడిన అనుమతిని అభ్యర్థించడానికి ప్రత్యేకంగా వ్రాయబడితే తప్ప, వారు ప్రక్రియను వాస్తవంగా ఏమీ చేయకుండా నిరోధిస్తారు. ఇది క్లిష్టమైన అనుమతులను ప్రభావవంతమైన సెట్కు జోడించడానికి ప్రక్రియలను వ్రాయడానికి అనుమతిస్తుంది, అవి వాస్తవానికి అవసరమైన కాలానికి మాత్రమే.
- వారసత్వంగా అనుమతులు అనేవి స్పాన్డ్ చైల్డ్ ప్రాసెస్ యొక్క యాక్సెస్ చేయగల సెట్లో వారసత్వంగా పొందగలిగేవి. శస్త్రచికిత్స సమయంలో
fork()
లేదాclone()
చైల్డ్ ప్రాసెస్కు ఎల్లప్పుడూ పేరెంట్ ప్రాసెస్ యొక్క అనుమతుల కాపీ ఇవ్వబడుతుంది, ఎందుకంటే ఇది ఇప్పటికీ అదే ఎక్జిక్యూటబుల్ను అమలు చేస్తోంది. వారసత్వంగా వచ్చే సెట్ ఎప్పుడు ఉపయోగించబడుతుందిexec()
(లేదా సమానమైనది) ఎక్జిక్యూటబుల్ ఫైల్ను మరొక దానితో భర్తీ చేయడానికి అంటారు. ఈ సమయంలో, ప్రాసెస్ అందుబాటులో ఉన్న సెట్ కొత్త ప్రక్రియ కోసం ఉపయోగించబడే యాక్సెస్ చేయగల సెట్ను పొందేందుకు అనువంశిక సెట్ ద్వారా ముసుగు చేయబడింది.
కాబట్టి యుటిలిటీ setcap
ఇచ్చిన ఎక్జిక్యూటబుల్ కోసం ఈ మూడు సెట్ల అనుమతులను స్వతంత్రంగా జోడించడానికి మమ్మల్ని అనుమతిస్తుంది. ఫైల్ అనుమతుల కోసం సమూహాల అర్థం కొద్దిగా భిన్నంగా వివరించబడిందని గమనించండి:
- అందుబాటులో ఉంది ఫైల్ అనుమతులు అనేది ఎక్జిక్యూటబుల్ ఫైల్కు ఎల్లప్పుడూ అందుబాటులో ఉండేవి, దానికి కాల్ చేసిన పేరెంట్ ప్రాసెస్లో అవి లేకపోయినా. వాటిని "బలవంతంగా" అనుమతులు అని పిలుస్తారు.
- వారసత్వంగా ఫైల్ అనుమతులు అదనపు మాస్క్ని నిర్వచించాయి, కాలింగ్ ప్రక్రియ యొక్క సెట్ నుండి అనుమతులను తీసివేయడానికి కూడా ఉపయోగించవచ్చు. అవి కాలింగ్ ప్రక్రియ యొక్క వారసత్వ సెట్కు అదనంగా వర్తిస్తాయి, కాబట్టి అనుమతి రెండు సెట్లలో ఉన్నట్లయితే మాత్రమే వారసత్వంగా పొందబడుతుంది.
- ప్రభావవంతమైనది ఫైల్ అనుమతులు వాస్తవానికి ఒక బిట్ మాత్రమే, సెట్ కాదు మరియు సెట్ చేస్తే, అందుబాటులో ఉన్న మొత్తం సెట్ కూడా కొత్త ప్రక్రియ యొక్క ప్రభావవంతమైన సెట్లోకి కాపీ చేయబడిందని అర్థం. వాటిని అభ్యర్థించడానికి ప్రత్యేకంగా వ్రాయబడని ప్రక్రియలకు అనుమతులను జోడించడానికి ఇది ఉపయోగించబడుతుంది. ఇది ఒక బిట్ కాబట్టి, మీరు ఏదైనా అనుమతి కోసం సెట్ చేస్తే, అది తప్పనిసరిగా అన్ని అనుమతులకు సెట్ చేయబడాలి. మీరు దీన్ని లెగసీ బిట్గా భావించవచ్చు ఎందుకంటే ఇది అనుమతులను సపోర్ట్ చేయని అప్లికేషన్ల ద్వారా ఉపయోగించడానికి అనుమతించబడుతుంది.
ద్వారా అనుమతులను పేర్కొనేటప్పుడు setcap
మూడు అక్షరాలు e
, i
и p
సంబంధం సమర్థవంతమైన, వారసత్వంగా మరియు అందుబాటులో ఉంటుంది వరుసగా సెట్లు. కాబట్టి, మునుపటి వివరణ:
sudo setcap cap_net_raw=eip tracewalk
... తీర్మానం అని సూచిస్తుంది CAP_NET_RAW
తప్పనిసరిగా అందుబాటులో ఉన్న మరియు అనువంశిక సెట్లకు జోడించబడాలి మరియు ప్రభావవంతమైన బిట్ను కూడా సెట్ చేయాలి. ఇది ఫైల్పై గతంలో సెట్ చేసిన ఏవైనా అనుమతులను భర్తీ చేస్తుంది. ఒకేసారి బహుళ అనుమతులను సెట్ చేయడానికి, కామాతో వేరు చేయబడిన జాబితాను ఉపయోగించండి:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
ముందుగా, ఫైల్ సామర్థ్యాలు సిమ్లింక్లతో పని చేయవు - మీరు వాటిని బైనరీ ఫైల్కు వర్తింపజేయాలి (అంటే సిమ్లింక్ లక్ష్యం).
రెండవది, అవి అన్వయించబడిన స్క్రిప్ట్లతో పని చేయవు. ఉదాహరణకు, మీరు పైథాన్ స్క్రిప్ట్ని కలిగి ఉంటే, మీరు దానికి అనుమతిని కేటాయించాలనుకుంటే, మీరు దానిని పైథాన్ ఇంటర్ప్రెటర్కు కేటాయించాలి. సహజంగానే ఇది ఒక సంభావ్య భద్రతా సమస్య ఎందుకంటే ఆ ఇంటర్ప్రెటర్తో అమలు చేయబడిన అన్ని స్క్రిప్ట్లు పేర్కొన్న అనుమతిని కలిగి ఉంటాయి, అయినప్పటికీ ఇది SUID చేయడం కంటే మెరుగ్గా ఉంది. C లేదా తత్సమానంలో ప్రత్యేక ఎక్జిక్యూటబుల్ని వ్రాయడం అత్యంత సాధారణ పరిష్కారంగా ఉంది, అది అవసరమైన కార్యకలాపాలను నిర్వహించగలదు మరియు దానిని స్క్రిప్ట్ నుండి కాల్ చేయవచ్చు. ఇది బైనరీని ఉపయోగించే వైర్షార్క్ ఉపయోగించే విధానాన్ని పోలి ఉంటుంది /usr/bin/dumpcap
ప్రత్యేక కార్యకలాపాలను నిర్వహించడానికి:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
మూడవది, మీరు ఎన్విరాన్మెంట్ వేరియబుల్ ఉపయోగిస్తే ఫైల్ అనుమతులు నిలిపివేయబడతాయి LD_LIBRARY_PATH
స్పష్టమైన భద్రతా కారణాల కోసం(1). అదే వర్తిస్తుంది LD_PRELOAD
, నాకు తెలిసినంతవరకు.
1. దాడి చేసే వ్యక్తి ప్రామాణిక లైబ్రరీలలో ఒకదానిని స్పష్టంగా భర్తీ చేయగలడు మరియు ఉపయోగించగలడు LD_LIBRARY_PATH
దాని లైబ్రరీని సిస్టమ్ వన్కు ప్రాధాన్యతగా పిలవమని బలవంతం చేయడానికి మరియు కాలింగ్ అప్లికేషన్ వలె అదే అధికారాలతో దాని స్వంత ఏకపక్ష కోడ్ అమలు చేయబడుతుంది.
అంతే. కోర్సు ప్రోగ్రామ్ గురించి మరిన్ని వివరాలను ఇక్కడ చూడవచ్చు
మూలం: www.habr.com