Iespējas ļauj novērtēt dažas svarīgas sistēmas privilēģijas atsevišķā pavedienā, kas atšķiras no pašreizējā procesa. Tādā veidā jums nav jāpalaiž programma kā root, lai tā piekļūtu noteiktām sistēmas daļām.
Kā risinājums, kas izriet no vajadzībām, POSIX.1e 25. sadaļa ir par šo problēmu. Šajā sadaļā un vairāk definēto privilēģiju izstrāde ir pabeigta, izlaižot Linux kodola versiju 2.6.26. Šeit ir viss, kas jums jāzina par Linux kodola iespējām.
Izpratne par iespēju API loģiku
Autorizācijas kontrole sistēmās, kuru pamatā ir Unix, sastāv no diviem posmiem:
- Ja aktīvās lietojumprogrammas pašreizējais īpašnieks (faktiskais lietotāja ID, EUID) ir nulle, sistēma nepārbauda autorizāciju.
- Ja EUID vērtība atšķiras no nulles, sistēma veic kontroles procesu saskaņā ar attiecīgās lietotnes faktiskā lietotāja un grupas pilnvarām.
Dažām lietojumprogrammām darbības laikā ir nepieciešamas plašākas privilēģijas (SUID, SGIT biti). Kā raksturīgāko piemēru jūs varat iedomāties lietojumprogramma passwd. Tādējādi lietotāji sistēmā var mainīt savas paroles. Tomēr, lai rakstītu uz
/etc/shadow failu, kurā glabājas šifrētās paroles, jāstrādā ar root lietotāja tiesībām (t.i. lietotāja ID = 0).Lai atrisinātu šo problēmu, lietojumprogrammai passwd ir SUID bits. Neatkarīgi no tā, kurš lietotājs palaiž šo lietojumprogrammu, aktīvais īpašnieks (EUID) vienmēr būs root:
ls -l /usr/bin/passwd
# Izvade
-rwsr-xr-x. 1 saknes sakne 32552, 2021. gada 23. jūlijs /usr/bin/passwd
Šķiet, ka spēja palaist SUID lietojumprogrammas tradicionālajā Unix autentifikācijas modelī problēmu ir atrisinājusi. Tomēr kritiskas kļūdas lietojumprogrammās ar SUID bitiem paver iespējas palaist nevēlamus kodus lietotājiem, kuriem sistēmā ir visas pilnvaras. Ideālai lietojumprogrammai jāspēj darboties bez root lietotāja tiesībām, ja iespējams.
Problēma nebeidzas tikai ar SUID bitu. Jums ir jābūt arī root lietotāja tiesībām, ja vēlaties klausīties a priviliģēts TCP vai UDP ports mazāk nekā 1024 sistēmās, kuru pamatā ir Unix. Piemēram, lai varētu klausīties tīmekļa servera TCP 80 portu, lietojumprogramma ir jāpalaiž kā saknes lietotājs.
Gadu gaitā ir saprasts, cik postoši ir palaist programmatūru, kas nodrošina tīkla vides pakalpojumus ar pilnībā autorizētu lietotāja kontu. Kā pagaidu risinājums tika pieņemts, ka tikai noteikta un mazāka programmas daļa klausās priviliģētajā portā kā root, un pēc tam maina aktīvo lietotāja ID uz citu lietotāju turpmākajiem procesiem (piemēram, neviens lietotājs ar ierobežotām tiesībām).
Šī sistēma, kas ir izmantota gadiem ilgi, ir labi darbojusies ar savu vienkāršību un joprojām tiek izmantota efektīvi. Tomēr mūsdienās ir iespējams iegūt dažas papildu iespējas, kas raksturīgas lietojumprogrammai, izmantojot Linux iespēju API, bez nepieciešamības pēc root tiesībām, izņemot iepriekš minēto sistēma.
Linux iespēju modelis, paskaidrots!
Jūs varat atrast visplašāko iespēju API ieviešanu Linux kodolā. Mūsdienu Linux distribūcijas arī cenšas pēc iespējas vairāk izmantot šo jauno modeli visā sistēmā.
Piemēram, lai ping lietojumprogramma darbotos, tai jāspēj atvērt RAW ligzdas, kuras parasti ir rezervētas tikai root lietotājiem. Vecajos Linux izplatījumos problēma ir SUID bita piešķiršana lietojumprogrammai, lai parastie lietotāji to varētu izmantot. Šajās versijās, kad no lietojumprogrammas noņemat SUID bitu un mēģināt palaist lietojumprogrammu kā parasts lietotājs, tiek parādīts šāds kļūdas ziņojums:
ping 8.8.8.8
# Izvade
ping: icmp atvērta ligzda: darbība nav atļauta
Tā kā mūsdienu Linux izplatījumos ping lietojumprogrammai, iespējams, nav SUID bita:
ls -l /bin/ping
# Izvade
-rwxr-xr-x. 1 saknes sakne 95232 2021. gada 25. jūlijs /bin/ping
Tomēr jūs varat veiksmīgi palaist lietojumprogrammu kā parasts lietotājs. Mehānisms, kas to padara iespējamu, ir tas, ka ping lietojumprogrammai ir īpašas iespējas CAP_NET_RAW.
Lietojumprogrammas papildu iespējas varat uzzināt, izmantojot getcap komandu šādi:
sudo getcap /bin/ping
# Izvade
/bin/ping cap_net_raw=ep
Ja komanda getcap atgriež tukšu atbildi, varat manuāli iestatīt šo vērtību, izmantojot:
sudo setcap cap_net_raw+ep /bin/ping
Procesu spēju modelis
Linux ieviešanā katra procesa iespējas ir sagrupētas trīs sadaļās:
Spēja | Paziņojums, apgalvojums |
atļauts | Šajā klasterī ir attiecīgā procesa atļauto papildu iespēju saraksts. Atļaujas piešķiršana nenozīmē, ka to tajā laikā var aktīvi izmantot. Šeit ir iespējams iekļaut pilnvaras efektīvajā spēju komplektā ar papildu darbību. |
efektīvs | Tas parāda saistītā procesa pašlaik aktīvo iespēju sarakstu. Ar palīgfunkcijām, kas regulē prasmju sistēmu, ir iespējams atteikties vai atgūt kādu prasmi. Tomēr jebkurā gadījumā to var izdarīt tikai starp tiem, kas jau ir pilnvaroti atļautajā grupā. |
mantojams | Kad lietojumprogramma sāk jaunu procesu, tikko sāktais process parāda to iespēju sarakstu, kuras tā pārmantos no atļautā saraksta. |
Atļauto, efektīvo un pārmantojamo iespēju saraksts procesu palaišanai jebkurā laikā tiek parādīts rindās kā bitmaska CapPrm, CapEff, un CapInh failā /proc/
Piemēram, mēģiniet nolasīt savas palaistās čaulas lietojumprogrammas vērtības no /proc/self/status fails:
kaķis /proc/sevi/statuss | grep Cap
# Izvade
Kapitāls: 000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
Failu iespēju modelis operētājsistēmā Linux
Failu iespēju sistēmas darbība ir atkarīga no priekšnoteikuma, ka šos rekvizītus var saglabāt virtuālās failu sistēmas (VFS) slānī. Līdzīgi kā procesa modelī, failu iespējas ietilpst trīs sadaļās:
1. Atļauts
Sistēma nosaka procesa atļautās iespējas, kad šajā klasterī tiek palaists atbilstošais izpildāmais fails.
2. Efektīvs
Atšķirībā no procesa iespēju modeļa, šajā galvenē tiek saglabāts tikai viens bits: aktīvs vai neaktīvs. Ja bits ir aktīvs, faila atļautajā sarakstā definētās iespējas ir automātiski tiek pārsūtīts uz attiecīgā procesa efektīvo iespēju sarakstu, kad tiek palaists šis fails un tiek palaists process izveidots. Ja bits nav aktīvs, automātiskā failā atļauto iespēju pārsūtīšana uz darbības procesu netiek veikta.
Taču, ja attiecīgās lietojumprogrammas kods ir integrēts spēju sistēmā, tas ar sistēmas izsaukumiem var aktivizēt atļaujas faila atļautajā kopā. Šīs darbības galvenais mērķis ir nodrošināt, ka vecās lietojumprogrammas, kurās nav iekļautas sistēmas specifiskas iespējas kods, izstrāde programmatūras koda līmenī var darboties ar iespēju sistēmu bez nepieciešamības pēc pirmkoda izmaiņas.
Jūs varētu domāt, ka labāk uzrakstītas lietojumprogrammas izmantos iespējas tikai tad, kad tas būs nepieciešams. Ja bits ir aktīvs, visas atļautā saraksta iespējas kļūst aktīvas, startējot lietojumprogrammu.
3. Mantojama
Tāpat kā procesa modelī, tiek palaists attiecīgais fails un notiek process. Ja pēc tam procesa ietvaros tiek palaista cita lietojumprogramma, tā tiek iekļauta jaunā procesa atļautajā sarakstā. Rezumējot, tas norāda mantojamo spēju sarakstu.
Iespējas loma Linux sistēmā
Palaižot noteiktu procesu kā parasts lietotājs, jums nav nekādu privilēģiju. Rezultātā jūs varat piekļūt tikai tiem nodalījumiem, kurus sistēma atļauj parastajiem lietotājiem. Galvenais iemesls tam ir pastiprināt sistēmas drošību un īstenot šādus pasākumus.
Ļaujot visiem lietotājiem piekļūt visiem resursiem, var rasties nopietna drošības ievainojamība. Cilvēkiem, kuri izmanto sistēmu ļaunprātīgiem nolūkiem, būs ļoti viegli izmantot sistēmas ievainojamības. Linux iespējas noder šādos jautājumos. Varat viegli uzlabot savu lietojumprogrammu drošību, izmantojot iespējas API, ko nodrošina kodols.
Linux iespējas ir tikai viena no problēmām, kas jāapdomā, lai veiktu ļoti jaudīgas metodes, piemēram, saknes lietotāja sadalīšanu. atļaujas, dažādu atļauju piešķiršana priviliģētiem lietotājiem un dažādu piesardzības pasākumu veikšana saistībā ar atvērtiem portiem interneta pakalpojumos ar Linux serveri.
Uzlabojiet sava Linux servera drošību, veicot šīs 7 nostiprināšanas darbības
Lasiet Tālāk
Saistītās tēmas
- Linux
- Programmēšana
- Linux kodols
- Operētājsistēma
Par autoru

Inženieris un programmatūras izstrādātājs, kurš ir matemātikas un tehnoloģiju cienītājs. Viņam vienmēr ir patikuši datori, matemātika un fizika. Viņš ir izstrādājis spēļu dzinēju projektus, kā arī mašīnmācīšanos, mākslīgos neironu tīklus un lineārās algebras bibliotēkas. Turklāt turpina strādāt pie mašīnmācības un lineārām matricām.
Abonējiet mūsu biļetenu
Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!
Noklikšķiniet šeit, lai abonētu