ሰላም ሁላችሁም። በንቃት ወደ ሥራ እየገባን ነው እና በጥር ወር ብዙ ኃይለኛ ማስጀመሪያዎችን እያዘጋጀን ነው። ከሌሎች መካከል፣ ለሁሉም ሰው ተወዳጅ ኮርስ አዲስ ዥረት ምዝገባ ታውቋል።
የፋይል ፈቃዶች ለ 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 ወይም ተመጣጣኝ መፃፍ ነው። ይህ ሁለትዮሽ ከሚጠቀም Wireshark ከሚጠቀምበት አካሄድ ጋር ተመሳሳይ ነው። /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
ቤተ መፃህፍቱን ከስርአቱ አንድ ተብሎ እንዲጠራ ማስገደድ እና ስለዚህ የራሱ የዘፈቀደ ኮድ እንደ የጥሪ መተግበሪያ ተመሳሳይ መብቶች እንዲተገበር ማስገደድ።
ይኼው ነው. ስለ ኮርስ ፕሮግራሙ ተጨማሪ ዝርዝሮች በ ላይ ይገኛሉ
ምንጭ: hab.com