RHEL udělení práv aplikaci

RHEL udělení práv aplikaci
« kdy: 18. 02. 2019, 14:18:14 »
Ahoj, řeším následující situaci: Pod ne-root účtem potřebuji na RHEL 7 spustit binárku, která otevírá nízký port. To jí systém nedovolí, jelikož pro otevření nízkých portů musí mít aplikace vyšší práva. Jaký je správný postup, jak přidělit nějaké binárce/uživateli (nevím na koho by se to mělo správně nastavit) vyšší práva? Hledal jsem na Google, ale rady jsou různé (SELinux, setcap apod.) a nevím co je best practise od Red Hatu.

Díky


Re:RHEL udělení práv aplikaci
« Odpověď #1 kdy: 18. 02. 2019, 14:31:19 »
přes sudo můžete nastavit, aby konkrétní uživatel mohl pouštět konkrétní jednu aplikaci pod rootem (bude ji muset pouštět "sudo binárka_či_skript")

Re:RHEL udělení práv aplikaci
« Odpověď #2 kdy: 18. 02. 2019, 14:35:16 »
presne tak.. vo visudo nastavit povolenie pre konkretneho pouzivatela pustat tento skript s pravami sudo.

Re:RHEL udělení práv aplikaci
« Odpověď #3 kdy: 18. 02. 2019, 16:31:50 »
Ahoj,

řeším následující situaci: Pod ne-root účtem potřebuji na RHEL 7 spustit binárku, která otevírá nízký port.
Prosim mohl bys byt konkretnejsi? Svoji binarku, nebo nejakou systemovou binarku? Pouzivas ji pravidelne nebo jenom jednorazove?

Pokud je to nejaka tvoje utilita, poustis ji jenom jednorazove pro nejake zvlastni pripady nebo nemas zdrojaky a jenom potrebujes aby to nejak zafungovalo tak asi nejjednodusseji pres setcap jak jsi zminil:
setcap cap_net_bind_service=+ep /path/somebinary

U systemove binarky musis mit na pameti, ze dalsi systemovy update ("yum update") muze prava na binarce prenastavit zpet, tak jak byla a musis proto zajistit aby capability zustala nastavena i po update takove package. V tom by na RHEL7 mohl pomoci yum-plugin-post-transaction-actions, kde muzete vytvorit soubor v /etc/yum/post-actions/, se souborem akci, ktere se maji provest po instalaci toho ktereho balicku. Napriklad /etc/yum/post-actions/low-port-runners:
/usr/bin/ncat:any:setcap cap_net_bind_service=+ep /usr/bin/ncat


Pokud je to tvuj kod, tak doporucuji zauvazovat, jestli by nestalo zato z toho udelat plnohodnotneho demona coz obvykle zahrnuje veci jako:
- spusteni jako root ze systemd (nebo System5 init.d)
- zavreni standardniho vstupu a vystupu a odpoutani se od parent procesu
- otevreni portu
- vzdani se prav roota a zmena prav na nejakeho neprivilegovaneho uzivatele dedikovaneho teto sluzbe (jako napr. "apache"), nebo nebo generickeho (jako napr. "nobody")


Hledal jsem na Google, ale rady jsou různé (SELinux, setcap apod.) a nevím co je best practise od Red Hatu.
Chapu ... vyber vhodneho postupu se muze lisit od situace. Napriklad pokud budes potrebovat service, ktery uz v RHEL je v targetted policy a mas zapnuty SElinux, jako napriklad budes chit aby apache poslouchal take na portu 81, budes to asi muset povolit i v SElinuxu - pokud to jde tak v konfiguraci (semanage port -a -t http_port_t -p tcp 81), v horsim pripade custom policy module vytvoreny pomoci audit2allow.



přes sudo můžete nastavit, aby konkrétní uživatel mohl pouštět konkrétní jednu aplikaci pod rootem (bude ji muset pouštět "sudo binárka_či_skript")
Spoustet binarku pres sudo se efektivne rovna spoustet ji jako root. Muze to byt nejjednodussi cesta. Ale zaroven to z bezpecnostniho hlediska muze byt problem, protoze po cely beh programu ma binarka prava jako root.
Oproti tomu zminovane linux capabilities (setcap) daji procesu pravo jen na to co by normalne mohl jen root (zde poslouchat na portu nizsim nez 1024). Zaroven ale zbytek prav zustane na urovni normalniho uzivatele, takze spatne napsany kod nebude treba mozne exploitovat na to, aby precetl hashe hesel v /etc/shadow.

Existuji samozrejme jeste jine cesty, jako napriklad spustit binarku na nejakem vysokem portu, a zaridit presmerovani at uz na sitove vrstve pomoci iptables port forwarding, nebo na aplikacni vrstve - napriklad apache mod_proxy module.

Michal