Rêberek Destpêkek ji bo SELinux

Rêberek Destpêkek ji bo SELinux

Wergera gotarê ji bo xwendekarên kursê hatiye amadekirin "Ewlehiya Linux"

SELinux an Ewlekariya Enhanced Linux mekanîzmayek kontrolkirina gihîştina pêşkeftî ye ku ji hêla Ajansa Ewlekariya Neteweyî ya Dewletên Yekbûyî (NSA) ve hatî pêşve xistin da ku pêşî li destwerdanên xirab bigire. Ew modelek kontrolkirina gihîştinê ya bi zorê (an mecbûrî) (Kontrola Destûra Gihîştina Mecbûrî ya Îngilîzî, MAC) li ser modela vebijarkî (an bijartî) ya heyî (English Discretionary Access Control, DAC) pêk tîne, ango destûrên xwendin, nivîsandin, darvekirinê.

SELinux sê mod hene:

  1. Enforcing - redkirina gihîştina li ser bingeha qaîdeyên polîtîkayê.
  2. Destûrdar - girtina tomarek kiryarên ku siyasetê binpê dike, ku dê di moda bicîhkirinê de were qedexe kirin.
  3. Bêmecel - Bi tevahî neçalakkirina SELinux.

Bi xwerû mîheng di nav de ne /etc/selinux/config

Guhertina modên SELinux

Ji bo ku hûn moda heyî bibînin, birevin

$ getenforce

Ji bo guheztina modê berbi destûr fermana jêrîn bicîh bikin

$ setenforce 0

an, ji bo guhertina modê ji destûra li ser bicihkirin, îdam kirin

$ setenforce 1

Heke hûn hewce ne ku SELinux bi tevahî neçalak bikin, wê hingê ev tenê bi pelê veavakirinê dikare were kirin

$ vi /etc/selinux/config

Ji bo neçalakkirinê, pîvana SELINUX bi vî rengî biguhezînin:

SELINUX=disabled

Sazkirina SELinux

Her pel û pêvajo bi çarçoveyek SELinux ve hatî nîşankirin, ku agahdariya zêde wekî bikarhêner, rol, celeb, hwd vedihewîne. Ger ev cara yekem e ku hûn SELinux-ê çalak dikin, hûn ê pêşî hewce bikin ku konteks û etîketan mîheng bikin. Pêvajoya destnîşankirina etîket û kontekstê wekî nîşankirin tê zanîn. Ji bo destpêkirina nîşankirinê, di pelê veavakirinê de em modê diguhezînin destûra.

$ vi /etc/selinux/config
SELINUX=permissive

Piştî sazkirina modê destûra, di kokê de bi navê pelek veşartî ya vala biafirîne autorelabel

$ touch /.autorelabel

û komputerê ji nû ve bidin destpêkirin

$ init 6

Nîşe: Em modê bikar tînin destûra ji bo nîşankirinê, ji ber bikaranîna modê bicihkirin dibe ku di dema rebootkirinê de pergalê têk bibe.

Xem neke ger dakêşandin li ser hin pelan asê bibe, nîşankirin demek digire. Piştî ku nîşankirin qediya û pergala we hate boot kirin, hûn dikarin biçin pelê veavakirinê û modê saz bikin bicihkirinû her weha rêve bike:

$ setenforce 1

We niha SELinux li ser komputera xwe bi serfirazî çalak kir.

Şopandina têketin

Dibe ku hûn di dema nîşankirinê de an jî dema ku pergalê dixebite rastî hin xeletiyan hatibin. Ji bo ku hûn kontrol bikin ka SELinux-a we rast dixebite û ger ew gihîştina tu port, serîlêdan, hwd asteng nake, hûn hewce ne ku li têketinan binihêrin. Têketina SELinux tê de ye /var/log/audit/audit.log, lê hûn ne hewce ne ku hûn hemî tiştan bixwînin da ku xeletiyan bibînin. Hûn dikarin amûra audit2why bikar bînin da ku xeletiyan bibînin. Fermana jêrîn bicîh bikin:

$ audit2why < /var/log/audit/audit.log

Wekî encamek, hûn ê navnîşek xeletiyan bistînin. Ger di têketinê de xeletî tunebin, wê hingê tu peyam nayên xuyang kirin.

Veavakirina Siyaseta SELinux

Siyaseta SELinux komek qaîdeyên ku mekanîzmaya ewlehiyê ya SELinux rêve dike ye. Siyasetek ji bo jîngehek taybetî komek rêzik diyar dike. Naha em ê fêr bibin ka meriv çawa polîtîkayan mîheng dike da ku destûr bide gihîştina karûbarên qedexe.

1. Nirxên mentiqî (biguherîne)

Switch (booleans) dihêle hûn di dema xebitandinê de beşên polîtîkayê biguherînin, bêyî ku hûn polîtîkayên nû biafirînin. Ew dihêlin hûn bêyî nûvekirin an berhevkirina polîtîkayên SELinux-ê guhartinan bikin.

Nimûne:
Em bibêjin ku em dixwazin pelrêça malê ya bikarhênerek bi FTP xwendin/nivîsandin parve bikin, û me berê jî ew parve kiriye, lê gava ku em hewl didin ku bigihîjin wê, em tiştek nabînin. Ji ber ku siyaseta SELinux rê nade ku servera FTP bi pelrêça malê bikarhênerê bixwîne û binivîse. Pêdivî ye ku em siyasetê biguhezînin da ku servera FTP bikaribe xwe bigihîne pelrêçanên malê. Ka em bibînin ka ji bo vê yekê guheztinek hene an na

$ semanage boolean -l

Ev ferman dê guhêzbarên berdest digel rewşa wan a heyî (vekêşandin an nekêşandin) û ravekirinê navnîş bike. Hûn dikarin lêgerîna xwe bi lê zêdekirina grep paqij bikin da ku encamên tenê ftp-ê bibînin:

$ semanage boolean -l | grep ftp

û hûn ê jêrîn bibînin

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Ev guhêrbar neçalak e, ji ber vê yekê em ê wê çalak bikin setsebool $ setsebool ftp_home_dir on

Naha daemonê me yê ftp dê bikaribe xwe bigihîne pelrêça malê ya bikarhêner.
Nîşe: Her weha hûn dikarin bi kirina navnîşek guhezbarên berdest bêyî ravekirinê bistînin getsebool -a

2. Etîket û konteks

Ev awayê herî gelemperî ye ku ji bo pêkanîna siyaseta SELinux. Her pel, peldank, pêvajo û port bi çarçoveya SELinux-ê ve têne nîşankirin:

  • Ji bo pel û peldankan, etîket wekî taybetmendiyên dirêjkirî li ser pergala pelan têne hilanîn û bi fermana jêrîn têne dîtin:
    $ ls -Z /etc/httpd
  • Ji bo pêvajo û portan, nîşankirin ji hêla kernelê ve tê rêvebirin, û hûn dikarin van nîşanan wekî jêrîn bibînin:

pêvajoya

$ ps –auxZ | grep httpd

bender

$ netstat -anpZ | grep httpd

Nimûne:
Naha werin em li mînakekê binihêrin da ku etîket û çarçoveyê çêtir fam bikin. Ka em bêjin em serverek webê heye ku, li şûna pelrêçek /var/www/html/ использует /home/dan/html/. SELinux dê vê yekê wekî binpêkirina siyasetê bihesibîne û hûn ê nikaribin rûpelên xwe yên malperê bibînin. Ev ji ber ku me çarçoweya ewlehiyê ya ku bi pelên HTML-ê ve girêdayî ye saz nekiriye. Ji bo dîtina çarçoveya ewlehiyê ya xwerû, emrê jêrîn bikar bînin:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Li vir em hatin httpd_sys_content_t wekî çarçoveyek ji bo pelên html. Pêdivî ye ku em vê çarçoweya ewlehiyê ji bo pelrêça xweya heyî saz bikin, ku niha çarçoveyek jêrîn heye:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Fermanek alternatîf ji bo kontrolkirina çarçoveya ewlehiyê ya pel an pelrêçek:

$ semanage fcontext -l | grep '/var/www'

Gava ku me çarçoweya ewlehiyê ya rast dît, em ê semanage jî bikar bînin da ku çarçoveyê biguhezînin. Ji bo guhertina çarçoweya /home/dan/html, emrên jêrîn bimeşînin:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Piştî ku kontekst bi karanîna semanageê tê guheztin, fermana restorecon dê çarçoweya xwerû ya pel û peldankan bar bike. Pêşkêşkara meya webê naha dê bikaribe pelan ji peldankê bixwîne /home/dan/htmlji ber ku çarçoveya ewlehiyê ji bo vê peldankê hatiye guhertin httpd_sys_content_t.

3. Polîtîkayên herêmî çêbikin

Dibe ku rewş hebin ku rêbazên jorîn ji we re ne kêrî we ne û hûn di audit.log de xeletiyan (avc/inkarkirin) bi dest bixin. Dema ku ev yek dibe, hûn hewce ne ku hûn polîtîkaya herêmî çêbikin. Hûn dikarin hemî xeletiyan bi karanîna audit2why bibînin, wekî ku li jor hatî destnîşan kirin.

Hûn dikarin siyasetek herêmî biafirînin ku xeletiyan çareser bikin. Mînakî, em xeletiyek bi httpd (apache) an smbd (samba) re têkildar distînin, em xeletiyan digirin û ji wan re siyasetek diafirînin:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Ev e http_policy и smb_policy navên polîtîkayên herêmî yên ku me afirandine ne. Naha divê em van polîtîkayên herêmî yên hatine afirandin di siyaseta SELinux a heyî de bar bikin. Ev dikare bi vî rengî were kirin:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Polîtîkayên me yên herêmî hatine dakêşandin û divê em êdî di audit.log de avc an denail negirin.

Ev hewldana min bû ku ji we re bibe alîkar ku hûn SELinux fam bikin. Ez hêvî dikim ku piştî xwendina vê gotarê hûn ê bi SELinux rehettir hîs bikin.

Source: www.habr.com

Add a comment