డెమన్ chroot వైఫల్యాన్ని నమోదు చేస్తుంది, ప్రొఫైల్ ఇప్పటికే ఉదారంగా కనిపిస్తుంది, కాబట్టి ఆకర్షణీయమైన పరిష్కారం మార్గ నియమాన్ని విస్తరించి మళ్లీ ప్రారంభించడం. అది సాధారణంగా ఏమీ మార్చదు, ఎందుకంటే chroot ప్రొఫైల్ ఎప్పుడూ అప్పగించలేని ప్రత్యేక హక్కు ద్వారా నియంత్రించబడుతుంది. ఏ పొరను తాకాలో నిర్ణయించడానికి మూడు తనిఖీలు అవసరం, అవి చవకైనవి: ప్రక్రియ ఏమి ఉంచుకోవడానికి అనుమతించబడింది, విధానం ఏమి అనుమతిస్తుంది, మరియు ఆ రెండూ ముఖ్యమయ్యే మునుపు ప్రారంభకుడు ఏమి తొలగించాడు.

రెండు వేర్వేరు ద్వారాలు, వాటిలో ఒకటి మాత్రమే AppArmor కి చెందుతుంది

chroot కు ప్రక్రియ నడుస్తున్న వినియోగదారు నామావకాశంలో CAP_SYS_CHROOT అవసరం. ఇది సాధారణ Linux ప్రత్యేక హక్కు, పిలుపు మార్గాలతో ఏమీ చేయకముందే కర్నెల్ దీన్ని తనిఖీ చేస్తుంది. దానికి భిన్నంగా, అమలు చేసే AppArmor ప్రొఫైల్ ప్రక్రియ దాన్ని కలిగి ఉన్నప్పటికీ ఆ సామర్థ్యాన్ని తిరస్కరించవచ్చు, ఎందుకంటే తప్పనిసరి విధానం ఆధారాలకు బదులుగా కాకుండా వాటికి అదనంగా పరిగణించబడుతుంది. ఈ భేదం ఆచరణలో ముఖ్యం: రెండు పొరలు వేర్వేరు ఫైళ్లలో నివసిస్తాయి, సాధారణంగా వేర్వేరు వ్యక్తులు నిర్వహిస్తారు.

ఆ రెండు ద్వారాలు ఒకే errno తో విఫలమవుతాయి. రెండూ EPERM ను ఉత్పత్తి చేస్తాయి, రెండూ డెమన్ లాగ్‌లో సాధారణ అనుమతి ఫిర్యాదుగా కనిపిస్తాయి, అందుకే ప్రొఫైల్ విషయాలను ఊహించడం చాలా సమయాన్ని వృథా చేస్తుంది. మీరు జోడించబోతున్న మార్గ నియమం chroot విజయవంతమైన తర్వాత ఫైల్ యాక్సెస్‌ను నియంత్రిస్తుంది; ఆ చర్య అసలు అనుమతించబడుతుందా అనే దానికి దానికి సంబంధం లేదు.

మూడవ ద్వారం రెండింటికీ పైన ఉంది. సేవా నిర్వాహకుడు లేదా రేపర్ ప్రక్రియను దాని సరిహద్దు సమితిలో ఆ సామర్థ్యం లేకుండా ప్రారంభించినట్లయితే, ఏ AppArmor మార్పు దాన్ని తిరిగి తీసుకురాలేదు, ప్రొఫైల్‌కు సామర్థ్యాలను జోడించడం కర్నెల్ నెరవేర్చని ఉద్దేశాన్ని మాత్రమే నమోదు చేస్తుంది.

విధానాన్ని మార్చే ముందు ప్రత్యేక హక్కుల స్థితిని చదవండి

మీరు క్రియాశీలంగా భావించే కాన్ఫిగరేషన్ నుండి కాకుండా నడుస్తున్న ప్రక్రియ నుండి ప్రారంభించండి. స్థితి ఫైల్ ఐదు సామర్థ్య ముసుగులు మరియు no-new-privileges జెండాను చూపుతుంది, అవి వేర్వేరు ప్రశ్నలకు సమాధానం ఇస్తాయి:

grep -E '^(CapInh|CapPrm|CapEff|CapBnd|CapAmb|NoNewPrivs):' /proc/$(pidof openvpn)/status
sudo aa-status | grep -i openvpn

CapEff అనేది పిలుపుకు ముఖ్యమైన సమితి: CapBnd లో ఉండి CapEff లో లేని సామర్థ్యం పైపరిమితి ద్వారా అనుమతించబడుతుంది, ప్రస్తుతం ఉంచబడదు. బైనరీ సాధారణ setuid అర్థంలో ప్రత్యేక హక్కు పొందనప్పుడు CapAmb ముఖ్యం, ఎందుకంటే పరిసర సామర్థ్యాలు ఫైల్ సామర్థ్యాలు లేకుండా exec ద్వారా సేవ ప్రత్యేక హక్కును నిలుపుకునే మార్గం. CapInh exec ద్వారా వారసత్వంగా వచ్చే బిట్లను ఉంచుతుంది, కానీ అమలయ్యే ఫైల్ వారసత్వ సమితి అనుమతించినప్పుడే, కాబట్టి అక్కడి బిట్ ఒంటరిగా ఏమీ ఇవ్వదు.

తర్వాత ఏ ప్రొఫైల్ నిజంగా జోడించబడిందో నిర్ధారించండి. ప్రక్రియ మీరు ఊహించని ప్రొఫైల్ పేరుతో నియంత్రించబడవచ్చు, ముఖ్యంగా పంపిణీ తన unit మరియు ప్రొఫైల్‌ను కలిపి అందించినప్పుడు, /proc/PID/attr/current చదవడం దాన్ని ఒకే వరుసలో పరిష్కరిస్తుంది. కర్నెల్ నివేదించే ప్రొఫైల్‌తో మీరు మార్చిన ఫైల్‌ను పోల్చడం కారణాన్ని సరిచేయడానికి, ఎవరూ లోడ్ చేయని ఫైల్‌ను మార్చడానికి మధ్య ఉన్న భేదం.

తనిఖీ జాడ చెప్పినప్పుడు మాత్రమే సామర్థ్య నియమాన్ని జోడించండి

కర్నెల్ మరియు తనిఖీ రికార్డులు తిరస్కరించిన పొరను పేర్కొంటాయి. capable చర్యతో మరియు sys_chroot పేరుతో వచ్చే తిరస్కరణను, దాన్ని ఉత్పత్తి చేసిన ప్రొఫైల్‌తో పాటు వెతకండి. అలాంటి రికార్డు ఉంటే, ప్రక్రియ ఇప్పటికే ఆ సామర్థ్యాన్ని కలిగి ఉంది, AppArmor దాన్ని తిరస్కరించింది, లక్ష్య మార్పు నిజమైన ప్రొఫైల్ లోపల ఒక సామర్థ్య నియమం:

capability sys_chroot,

దాన్ని నిజంగా జోడించబడిన ప్రొఫైల్‌లో శకలంగా ఉంచండి, సంబంధం లేని ట్యుటోరియల్ నుండి నియమాన్ని కాపీ చేయడం బదులు apparmor.d ప్రొఫైల్ సూచన తో కీలక పదాన్ని సరిచూసుకోండి. దాన్ని పంచుకున్న include లో పెట్టడం ఆ ఫైల్‌ను లోడ్ చేసే ప్రతి నియంత్రిత ప్రోగ్రామ్‌కు ఇస్తుంది, ప్రొఫైల్‌ను complain మోడ్‌కు మార్చడం ఈ సమస్యను పరిష్కరించడం బదులు తదుపరి తిరస్కరణను దాచుతుంది. ప్రొఫైల్ నియమం విధాన తిరస్కరణను తొలగిస్తుంది; అది ప్రత్యేక హక్కును సృష్టించదు, కాబట్టి తన ప్రభావ సమితిలో CAP_SYS_CHROOT ఎప్పుడూ లేని ప్రక్రియ నియమం ఉన్నా విఫలమవుతుంది.

తనిఖీ రికార్డు ఎలాంటి AppArmor తిరస్కరణను చూపకపోతే, ప్రొఫైల్ మార్చడం ఆపండి. మీరు ఆధారాల సమస్యను ఎదుర్కొంటున్నారు, మిగిలిన పని unit లో లేదా తల్లి ప్రక్రియలో ఉంది, విధాన భాషలో కాదు.

సేవా నిర్వాహకుడు తన సొంత పైపరిమితిని ఉంచుకుంటాడు

systemd ప్రతి సేవకు ఒక సామర్థ్య సరిహద్దు సమితిని నిర్ణయిస్తుంది, అప్రమేయంగా ఆ సమితి ఇరుకైనది. అక్కడ మినహాయించిన ఏదైనా ప్రొఫైల్ ఏమి చెప్పినా ప్రక్రియకు అందుబాటులో ఉండదు, అందుకే కఠినీకరించిన unit లు డెమన్‌ను చేతితో ప్రారంభించినప్పుడు పనిచేసిన చర్యలో విఫలమవవచ్చు. సంబంధిత ఆదేశాలు unit లో సులభంగా చదవగలిగేవి, అప్లికేషనే వైఫల్యాన్ని నివేదించినప్పుడు సులభంగా మరచిపోయేవి. పంపిణీ ప్యాకేజీ అందించే drop-in లు ఎవరూ కాన్ఫిగర్ చేసినట్లు గుర్తులేని పైపరిమితికి సాధారణ మూలం.

పైపరిమితిని పెంచడం మరియు సామర్థ్యాన్ని ఇవ్వడం రెండు మార్పులు, ఒకటి కాదు. సరిహద్దు సమితిలోని నమోదు ప్రక్రియ ఆ సామర్థ్యాన్ని ఉంచుకోవచ్చని చెబుతుంది; అది దాన్ని ప్రభావ సమితికి జోడించదు, మిగతావన్నీ సరిపోయినా NoNewPrivs తర్వాతి ఉన్నతిని విజయవంతం కాకుండా నిరోధించవచ్చు. చర్యకు అవసరమైనది మాత్రమే జోడించండి, మిగిలిన కఠినీకరణను అలాగే ఉంచండి, ఒకే పిలుపు దాటడానికి అన్ని సామర్థ్యాలను ఇచ్చే చిన్న మార్గాన్ని ఎదిరించండి.

ఇక్కడ క్రమం కూడా ముఖ్యం. మొదట unit పైపరిమితిని మార్చండి, CapEff ఇప్పుడు ఆ బిట్‌ను కలిగి ఉందా నిర్ధారించండి, ఆ తర్వాతే AppArmor ఇంకా తిరస్కరిస్తుందా నిర్ణయించండి. రెండు మార్పులను ఒకేసారి చేస్తే, వైఫల్యం కొనసాగితే మీరు మళ్లీ ఊహించాల్సి వస్తుంది.

తిరస్కరణ తొలగిన తర్వాత, జైలును కూడా పరిశీలించండి

విజయవంతమైన chroot మూలాన్ని కదిలిస్తుంది, కాబట్టి డెమన్ తర్వాత తాకే ప్రతి మార్గం కొత్త చెట్టు లోపల పరిష్కరించబడుతుంది. గైర్హాజరైన కాన్ఫిగరేషన్, లేని పరికర నోడ్ లేదా కాపీ చేయని ధృవపత్ర డైరెక్టరీ ఇప్పుడు ఫైల్ లోపంగా కనిపిస్తాయి, ఆ లోపం సామర్థ్య సమస్య కాదు, అమరిక సమస్య. మరో విస్తృత అనుమతిని జోడించడం బదులు తదుపరి సంఘటనను చదవండి. ఈ కదలిక సాపేక్ష మార్గం అర్థాన్ని కూడా మారుస్తుంది, అందుకే కఠినీకరణ మార్గదర్శకాలు డెమన్ కాన్ఫిగరేషన్‌లో సంపూర్ణ మార్గాలను నొక్కి చెబుతాయి.

chroot ఏమి చేయదో గుర్తుంచుకోవడం కూడా సహాయపడుతుంది. ఇది మార్గ సరిహద్దు, sandbox కాదు: ప్రత్యేక హక్కును నిలుపుకున్న ప్రక్రియ దాని నుండి తప్పించుకోవచ్చు, అందుకే సామర్థ్యం సాధారణంగా పిలుపు తర్వాత విడిచిపెట్టబడుతుంది, నియంత్రణ డెమన్ చుట్టూ ఉండాలి. AppArmor ప్రొఫైల్, సామర్థ్య సరిహద్దు సమితి మరియు ఫైల్ సిస్టమ్ పరిమితులను కలిపి ఉంచుకోవడమే ఈ వ్యాయామం లక్ష్యం, సేవ ప్రారంభమైన తర్వాత తొలగించాల్సిన మిగిలిన భాగం కాదు.

నిర్ణయ నియమం చిన్నది. తనిఖీ రికార్డు AppArmor ను పేర్కొంటే, జోడించబడిన ప్రొఫైల్‌కు ఒక సామర్థ్య నియమాన్ని జోడించండి. ప్రభావ సమితి ఖాళీగా ఉంటే, unit పైపరిమితిని మరియు ప్రత్యేక హక్కు విడిచిపెట్టే క్రమాన్ని సరిచేయండి. ప్రొఫైల్ మీరు మార్చినది కాకపోతే, మార్చడం ఆపి నిజమైనదాన్ని కనుగొనండి.

సంబంధిత వ్యాసాలు