Izinin fayil a cikin Linux

Assalamu alaikum. Muna shiga cikin aiki sosai kuma mun riga mun shirya ƙaddamarwa masu ƙarfi da yawa a cikin Janairu. Daga cikin wasu, an sanar da yin rajista don sabon rafi na kwas ɗin da kowa ya fi so. "Linux Administrator". A cikin tsammanin ƙaddamarwa, a al'ada muna raba fassarorin abubuwa masu amfani.

Izinin fayil a cikin Linux

Izinin fayil yana ba da amintaccen madadin SUID masu aiwatarwa, amma yana iya zama kamar ɗan ruɗani da farko.


Dukanmu mun san cewa binaries KUDU su ne mummunan yanke shawara daga yanayin tsaro. Abin farin ciki, idan aikace-aikacenku yana buƙatar wasu gata masu iyaka, akwai hanya mafi inganci da ake kira izinin fayil.

Zan adana ku ɗan lokaci idan kuna son guje wa karanta labarin da ke sama daki-daki: Mahimmanci, izinin fayil yana ba da izinin tafiyar matakai waɗanda ke gudana azaman tushen sabili da haka an ba su damar yin wani abu don riƙe wasu iyakoki, iyakance. wannan lissafinlokacin da suka sauke gata kuma mai amfani mara amfani ke tafiyar da su. Wannan yana nufin cewa idan mai kai hari ya sami damar yin sulhu da tsari ta amfani da buffer ambaliya ko wani amfani, ba za su iya cin gajiyar wani abu ba sai wasu ƙananan gata waɗanda tsarin ke buƙata.

Izini suna da kyau ga ayyukan da galibi ke gudana azaman tushen, amma menene game da abubuwan amfani da layin umarni? Sa'ar al'amarin shine, ana kuma goyan bayan wannan idan an shigar da kayan aikin da suka dace. Idan kuna amfani da Ubuntu, zaku buƙaci fakitin libcap2-bin. Hakanan kuna buƙatar gudanar da kernel wanda ba archaic ba (daga sigar 2.6.24).

Waɗannan ayyuka suna ba da izinin haɗin izini tare da fayilolin aiwatarwa, kama da saita bit SUID, amma don takamaiman saitin izini kawai. Amfani setcap ana amfani da shi don ƙarawa da cire izini daga fayil.

Mataki na farko shine zaɓi izinin da kuke buƙata. Saboda wannan labarin, ina ɗauka cewa akwai kayan aikin bincike na hanyar sadarwa da ake kira tracewalk, wanda ya kamata a yi amfani da shi danyen kwasfa. Wannan yawanci yana buƙatar aikace-aikacen a gudanar da shi azaman tushen tushe, amma lokacin dubawa jerin sai ya zama izni kawai ake bukata CAP_NET_RAW.

Zaton kuna cikin kundin adireshi inda binary yake tracewalk, za ku iya ƙara wannan izinin kamar haka:

sudo setcap cap_net_raw=eip tracewalk

Yi watsi da kari a yanzu =eip don ƙuduri, zan yi magana game da hakan a cikin daƙiƙa biyu. Lura cewa sunan izini yana cikin ƙananan haruffa. Yanzu zaku iya bincika idan kun saita izini daidai da:

setcap -v cap_new_raw=eip tracewalk

Ko za ku iya jera duk izini da aka saita don aiwatarwa:

getcap tracewalk

Don tunani, Hakanan zaka iya cire duk izini daga masu aiwatarwa tare da:

setcap -r tracewalk

A wannan gaba, ya kamata ku sami damar aiwatar da aiwatarwa azaman mai amfani mara amfani, kuma yakamata kuyi aiki tare da ƙwanƙwasa ƙwanƙwasa, amma ba shi da kowane gata da tushen mai amfani yake da shi.

To me wannan bakon kari yake nufi? =eip? Wannan yana buƙatar wasu fahimtar yanayin izini. Kowane tsari yana da saiti uku na izini - tasiri, gado da kuma halatta:

  • Mai tasiri Izini sune waɗanda ke ayyana abin da tsari zai iya yi a zahiri. Misali, ba zai iya yin hulɗa da danyen kwasfa ba idan CAP_NET_RAW baya cikin ingantaccen saiti.
  • Akwai izini sune waɗanda aka ba da izinin tsari idan ya buƙace su ta amfani da kiran da ya dace. Suna hana tsari daga ainihin yin wani abu sai dai idan an rubuta shi musamman don neman izini. Wannan yana ba da damar rubuta matakai don ƙara izini mai mahimmanci zuwa ingantaccen saiti kawai na tsawon lokacin da ake buƙatar su.
  • Gado izini su ne waɗanda za a iya gada a cikin tsarin da aka samu na tsarin yaro. Yayin tiyata fork() ko clone() tsarin yaro koyaushe ana ba da kwafin izinin tsarin iyaye tunda har yanzu yana gudana iri ɗaya wanda za'a iya aiwatarwa a wannan lokacin. Ana amfani da saitin gado lokacin da exec() (ko makamancin haka) ana kiransa don maye gurbin fayil ɗin aiwatarwa da wani. A wannan gaba, saitin tsarin da ake da shi yana rufe shi ta hanyar saitin gado don samun damar da za a yi amfani da shi don sabon tsari.

Don haka mai amfani setcap yana ba mu damar ƙara izinin waɗannan saiti uku daban-daban don aiwatarwa. Lura cewa an fassara ma'anar ƙungiyoyi daban-daban don izinin fayil:

  • Akwai Izinin fayil sune waɗanda koyaushe suke samuwa ga fayil mai aiwatarwa, ko da tsarin iyaye wanda ya kira shi ba shi da su. A da ana kiran su izini “tilastawa”.
  • Gado Izinin fayil yana bayyana ƙarin abin rufe fuska wanda kuma za'a iya amfani dashi don cire izini daga tsarin tsarin kiran. Suna amfani da ƙari ga tsarin tsarin da aka gada, don haka izinin ana gado ne kawai idan ya kasance a cikin duka saitin.
  • Mai tasiri Izinin fayil a haƙiƙa guda ɗaya ne, ba saiti ba ne, kuma idan an saita, yana nufin cewa duk saitin da ke akwai kuma ana kwafi shi cikin ingantaccen saitin sabon tsari. Ana iya amfani da wannan don ƙara izini zuwa matakan da ba a rubuta musamman don neman su ba. Tun da bit guda ne, idan kun saita shi don kowane izini, dole ne a saita shi don duk izini. Kuna iya tunaninsa a matsayin ɗan gado saboda ana amfani da shi don ba da izinin yin amfani da izini ta aikace-aikacen da ba su goyan bayan su ba.

Lokacin ƙayyade izini ta hanyar setcap haruffa uku e, i и p koma zuwa tasiri, gado kuma mai isa ya kafa bi da bi. Don haka, ƙayyadaddun farko:

sudo setcap cap_net_raw=eip tracewalk

... ya nuna cewa ƙuduri CAP_NET_RAW dole ne a ƙara zuwa abubuwan da ake da su da waɗanda za a iya gada kuma dole ne a saita ingantaccen bit. Wannan zai soke duk wani izini da aka saita a baya akan fayil ɗin. Don saita izini da yawa a lokaci ɗaya, yi amfani da jerin waƙafi:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Jagorar izini ya tattauna duk waɗannan dalla-dalla, amma da fatan wannan post ɗin ya taƙaita abin da ke faruwa kaɗan. Akwai 'yan korafe-korafe da dabaru da suka rage don ambata.

Na farko, iyawar fayil ba sa aiki tare da symlinks - dole ne ka yi amfani da su zuwa fayil ɗin binary kanta (watau maƙasudin alamar alamar).

Na biyu, ba sa aiki da rubutun da aka fassara. Misali, idan kana da rubutun Python wanda kake son sanya izini gare shi, dole ne ka sanya shi ga mai fassarar Python da kansa. Babu shakka wannan lamari ne mai yuwuwar tsaro saboda duk rubutun da aka aiwatar tare da wannan mai fassarar za su sami takamaiman izini, kodayake har yanzu wannan ya fi yin SUID. Mafi na kowa aikin da alama shine rubuta wani keɓantaccen aiwatarwa a cikin C ko daidai wanda zai iya aiwatar da ayyukan da suka dace kuma ya kira shi daga rubutun. Wannan yayi kama da tsarin da Wireshark ke amfani da shi wanda ke amfani da binary /usr/bin/dumpcap don aiwatar da ayyuka masu gata:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

Na uku, ana kashe izinin fayil idan kuna amfani da canjin yanayi LD_LIBRARY_PATH saboda dalilai na tsaro a bayyane(1). Hakanan ya shafi LD_PRELOAD, kamar yadda na sani.

1. Tunda mai hari zai iya maye gurbin ɗaya daga cikin daidaitattun ɗakunan karatu da amfani LD_LIBRARY_PATHdon tilasta kiran ɗakin karatu nata a fi son tsarin ɗaya, don haka yana da nasa lambar sabani da aka aiwatar tare da gata iri ɗaya da aikace-aikacen kira.

Shi ke nan. Ana iya samun ƙarin cikakkun bayanai game da shirin kwas a webinar, wanda zai gudana a ranar 24 ga Janairu.

source: www.habr.com

Add a comment