በሊኑክስ ውስጥ የፋይል ፈቃዶች

ሰላም ሁላችሁም። በንቃት ወደ ሥራ እየገባን ነው እና በጥር ወር ብዙ ኃይለኛ ማስጀመሪያዎችን እያዘጋጀን ነው። ከሌሎች መካከል፣ ለሁሉም ሰው ተወዳጅ ኮርስ አዲስ ዥረት ምዝገባ ታውቋል። "ሊኑክስ አስተዳዳሪ". ማስጀመሪያውን በመጠባበቅ፣ በተለምዶ ጠቃሚ የሆኑ ቁሳቁሶችን ትርጉሞችን እናጋራለን።

በሊኑክስ ውስጥ የፋይል ፈቃዶች

የፋይል ፈቃዶች ለ 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ቤተ መፃህፍቱን ከስርአቱ አንድ ተብሎ እንዲጠራ ማስገደድ እና ስለዚህ የራሱ የዘፈቀደ ኮድ እንደ የጥሪ መተግበሪያ ተመሳሳይ መብቶች እንዲተገበር ማስገደድ።

ይኼው ነው. ስለ ኮርስ ፕሮግራሙ ተጨማሪ ዝርዝሮች በ ላይ ይገኛሉ በጃንዋሪ 24 የሚካሄደው webinar።

ምንጭ: hab.com

አስተያየት ያክሉ