Idin File dina Linux

Halo sadayana. Kami aktip nuju damel sareng parantos nyiapkeun seueur peluncuran anu kuat dina Januari. Diantara anu sanésna, pendaptaran parantos diumumkeun pikeun aliran énggal tina kursus karesep sadayana. "Linux Administrator". Dina antisipasi peluncuran, urang tradisional babagi tarjamahan tina bahan mangpaat.

Idin File dina Linux

Idin file nawiskeun alternatif anu aman pikeun executable SUID, tapi sigana rada ngabingungkeun dina mimitina.


Urang sadayana terang yén binari Kidul anu kaputusan goréng tina sudut pandang kaamanan. Untungna, lamun aplikasi Anjeun merlukeun sababaraha hak husus kawates, aya cara leuwih efisien disebut idin file.

Kuring bakal ngahemat waktos anjeun upami anjeun hoyong nyingkahan maca tulisan di luhur sacara rinci: Intina, idin file ngamungkinkeun prosés anu dijalankeun salaku akar sahingga diidinan ngalakukeun hiji hal pikeun nahan kamampuan anu tangtu, terbatas. daptar ieunalika aranjeunna leupaskeun hak husus sarta dijalankeun ku pamaké unprivileged. Ieu ngandung harti yén lamun panyerang junun kompromi hiji prosés maké buffer overflow atawa mangpaat séjén, maranéhna moal bisa ngamangpaatkeun nanaon lian ti hak husus minimal tangtu yén prosés sabenerna diperlukeun.

Idin anu saé pikeun jasa anu biasana dijalankeun salaku akar, tapi kumaha upami utilitas garis paréntah? Kabeneran, ieu ogé dirojong upami anjeun gaduh utilitas anu leres dipasang. Upami Anjeun keur make Ubuntu, Anjeun bakal contona butuh pakét libcap2-bin. Anjeun ogé kedah ngajalankeun kernel anu henteu kuno (tina versi 2.6.24).

Pungsi ieu ngidinan idin pikeun dikaitkeun jeung file laksana, sarupa jeung nyetel bit SUID, tapi ngan pikeun set husus tina idin. Utiliti setcap dipaké pikeun nambahkeun jeung mupus idin ti file.

Léngkah munggaran nyaéta milih idin anu anjeun peryogikeun. Demi tulisan ieu, kuring nganggap yén aya alat diagnostik jaringan anu disebut tracewalk, anu kedah tiasa dianggo sockets atah. Ieu biasana ngabutuhkeun aplikasi pikeun dijalankeun salaku akar, tapi nalika ningali éta daptar tétéla ngan idin diperlukeun CAP_NET_RAW.

Anggap anjeun dina diréktori dimana binér ayana tracewalk, anjeun tiasa nambihan idin sapertos kieu:

sudo setcap cap_net_raw=eip tracewalk

Abaikan sufiks pikeun ayeuna =eip Pikeun resolusi, kuring bakal ngobrol ngeunaan éta dina sababaraha detik. Catet yén nami idin aya dina hurup leutik. Anjeun ayeuna tiasa mariksa upami anjeun parantos ngonpigurasikeun idin kalayan leres sareng:

setcap -v cap_new_raw=eip tracewalk

Atanapi anjeun tiasa daptar sadaya idin anu disetél pikeun laksana anu dipasihkeun:

getcap tracewalk

Pikeun rujukan, anjeun ogé tiasa ngahapus sadaya idin ti executable kalayan:

setcap -r tracewalk

Dina titik ieu, anjeun kedah tiasa ngajalankeun executable salaku pamaké unprivileged, sarta kudu bisa digawekeun ku sockets atah, tapi teu boga salah sahiji hak husus sejenna nu pamaké root.

Janten naon hartosna ahiran aneh ieu? =eip? Ieu merlukeun sababaraha pamahaman sipat idin. Unggal prosés ngagaduhan tilu sét idin − éféktif, inheritable tur diwenangkeun:

  • Éféktif Idin nyaéta jalma anu nangtukeun naon anu sabenerna tiasa dilakukeun ku prosés. Contona, teu bisa nungkulan sockets atah lamun CAP_NET_RAW teu aya dina set éféktif.
  • Aya idin nyaéta jalma anu prosés diidinan gaduh upami naroskeun aranjeunna nganggo telepon anu cocog. Aranjeunna nyegah prosés a sabenerna ngalakukeun nanaon iwal ieu husus ditulis pikeun ménta idin ceuk. Hal ieu ngamungkinkeun prosés bisa ditulis pikeun nambahkeun idin kritis kana set éféktif ngan pikeun periode nalika aranjeunna sabenerna diperlukeun.
  • Bisa diwariskeun idin anu maranéhanana anu bisa diwariskeun dina set diaksés tina prosés anak spawned. Salila bedah fork() atawa clone() prosés anak sok dibéré salinan idin prosés indungna saprak éta masih ngajalankeun laksana sarua dina titik éta. Hiji set inheritable dipaké nalika exec() (atanapi sarimbag) disebut pikeun ngagentos file anu tiasa dieksekusi ku anu sanés. Dina titik ieu, set sadia prosés urang masked ku set inheritable pikeun ménta set diaksés nu bakal dipaké pikeun prosés anyar.

Jadi utilitas setcap ngamungkinkeun urang pikeun nambahkeun idin tilu susunan ieu bebas pikeun laksana dibikeun. Catet yén harti grup diinterpretasi rada béda pikeun idin file:

  • Aya idin file nyaéta jalma anu salawasna sadia pikeun file laksana, sanajan prosés indungna nu disebut teu boga aranjeunna. Aranjeunna biasa disebut "dipaksa" idin.
  • diwariskeun idin file nangtukeun topeng tambahan nu ogé bisa dipaké pikeun miceun idin ti set prosés nelepon urang. Aranjeunna nerapkeun salian ti set warisan prosés nelepon urang, jadi idin diwariskeun ngan lamun aya dina duanana susunan.
  • Éféktif idin file sabenerna ngan saeutik tunggal, teu set, sarta lamun diatur, eta hartina sakabéh set sadia ogé disalin kana set éféktif prosés anyar urang. Ieu bisa dipaké pikeun nambahkeun idin kana prosés nu teu husus ditulis pikeun ménta aranjeunna. Kusabab éta sakedik, upami anjeun nyetél éta pikeun idin naon waé, éta kedah disetel pikeun sadaya idin. Anjeun tiasa nganggap éta salaku bit warisan sabab dianggo pikeun ngamungkinkeun idin dianggo ku aplikasi anu henteu ngadukung aranjeunna.

Nalika nangtukeun idin via setcap tilu hurup e, i и p tingal éféktif, inheritable tur diaksés susunan masing-masing. Janten, spésifikasi sateuacana:

sudo setcap cap_net_raw=eip tracewalk

... nunjukkeun yén resolusi CAP_NET_RAW kudu ditambahkeun kana susunan sadia tur inheritable sarta yén bit éféktif ogé kudu diatur. Ieu bakal override sagala idin saméméhna disetel dina file. Pikeun nyetel sababaraha idin sakaligus, paké daptar anu dipisahkeun koma:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Panungtun idin ngabahas sadayana ieu dina leuwih jéntré, tapi mudahan pos ieu geus demystified naon lumangsung saeutik. Aya ngan sababaraha caveats na trik ditinggalkeun nyebut.

Kahiji, kamampuan file henteu tiasa dianggo sareng symlink - anjeun kedah nerapkeunana kana file binér sorangan (nyaéta udagan symlink).

Kadua, aranjeunna henteu tiasa dianggo sareng naskah anu diinterpretasi. Contona, upami anjeun gaduh skrip Python anu anjeun hoyong masihan idin, anjeun kedah napelkeun ka juru Python sorangan. Jelas ieu mangrupikeun masalah kaamanan poténsial sabab sadaya skrip anu dieksekusi sareng juru basa éta bakal ngagaduhan idin anu ditangtukeun, sanaos ieu masih langkung saé tibatan ngajantenkeun SUID. The workaround paling umum sigana nulis hiji laksana misah dina C atawa sarimbag nu bisa ngalakukeun operasi perlu jeung nelepon deui ti naskah. Ieu sami sareng pendekatan anu dianggo ku Wireshark anu ngagunakeun binér /usr/bin/dumpcap pikeun ngalakukeun operasi husus:

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

Katilu, idin file ditumpurkeun upami anjeun nganggo variabel lingkungan LD_LIBRARY_PATH alesan kaamanan atra(1). Sami manglaku ka LD_PRELOAD, sajauh anu abdi terang.

1. Kusabab hiji lawan écés bisa ngaganti salah sahiji perpustakaan baku sarta pamakéan LD_LIBRARY_PATHmaksa perpustakaan na disebut dina leuwih sering dipake tinimbang kana sistem hiji, sarta ku kituna boga kode sawenang sorangan dieksekusi kalawan hak husus sarua salaku aplikasi nelepon.

Éta hungkul. Rincian langkung seueur ngeunaan program kursus tiasa dipendakan di webinar, anu bakal lumangsung dina 24 Januari.

sumber: www.habr.com

Tambahkeun komentar