Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem [Linux server] Zabezpečenie prístupu, "uzamknutie" procesov [PHP exec, chmod, chown, ProFTPd]

Dobrý deň,

vytváram internú administráciu herných serverov pre môj portál a rád by som sa naučil niečo nové o tom, ako určité prvky čo najlepšie zabezpečiť.
Jedná sa o webovú administráciu v php, v ktorej si môžem pridať herný server (z predpripravenej ponuky) a ten ďalej spravovať.
Do budúcna by som chcel, aby viacero administrátorov si mohlo spravovať svoje servery zvlášť, tzn. on/off serveru z webu, WebFTP a aby mali k serveru vlastný prístup na FTP.

Moje aktuálne znalosti, resp. ako by som to zatiaľ vedel spraviť:

1. Ovládanie herných serverov (on/off)
Keďže je to webová administrácia, tak cez exec spúšťam serverových daemon-ov.
Zatiaľ som sa nedočítal o inom spôsobe, ako spraviť to, že po stlačení tlačidla na webe sa server spustí.

2. Uzamknutie procesov vo svojich zložkách
Adresáre budú mať takúto štruktúru:

/
  /servers
    /hra1
      /port1
      /port2
    /hra2
      /port3
      /port4

Každý adresár (a všetko v ňom) bude mať oprávnenie 0700 a vlastného ownera (napr. 'srv27999').
Ovládanie bude tým pádom vyzerať takto


exec('sudo -u srv27999 /servers/hra1/27999/../daemon > /dev/null &'); //on
exec('sudo -u srv27999 pkill daemon'); //off

3. Zabezpečenie prístupu cez FTP
Používam ProFTPd a chcel by som mať užívateľov zrejme cez mysql, alebo tých, ktorí budú vytvorení na spúšťanie daemon-ov.
Tam v konfigurácii 'DefaultRoot ~' a každý user by mal home dir priečinok so svojim serverom.

Čítal som však, že táto forma Jail sa dá obísť. Máte teda nejaký lepší nápad?

Otázky ku všetkým bodom:
Vidíte pri tomto nejaké vylepšenia? Prípadne nejaké zlepšenie zabezpečenia?

Vopred vám ďakujem za vaše rady.

Předmět Autor Datum
1: PHP to urcite zvladne, budes vsak asi musiet upravit prava http servera 2: Neviem, co si predstav…
fleg 12.01.2018 07:56
fleg
1. Upraviť v akom smere? Čo konkrétne? 2. Uzamknúť v zmysle či sa nedá niečim vyslovene zatvoriť len…
hafo 12.01.2018 08:30
hafo
ad bod 2.: na to se používá chroot, ale je třeba, aby to aplikace (server) uměla (reps. aby byla nap…
touchwood 12.01.2018 08:47
touchwood
Tiež mi to prišlo ako nebezpečné, ale teda momentálne neviem, ako inak vytvárať užívateľov, pod ktor…
hafo 12.01.2018 09:50
hafo
to uděláš tak, že ta data předáš někam mimo apache a zpracuješ je následně skriptem v rámci např. Cr…
touchwood 12.01.2018 11:07
touchwood
Ďakujem, to je dobrý nápad.
hafo 12.01.2018 12:23
hafo
úplně neprůstřelné to taky není, protože při kompromitaci můžeš začít vytvářet nové účty, ale pokud…
touchwood 12.01.2018 12:40
touchwood
To áno, ale ak nastavím permissions na 0700 a ownera na www-data, tak sa dakto dostane k vykonávaniu…
hafo 12.01.2018 13:29
hafo
podle mě na to jdeš zgruntu špatně. Dnes se aplikace staví vícestupňově, takže web jen dělá čumendu…
touchwood 12.01.2018 13:43
touchwood
Rozumiem. Je lepšie všetko nechať na oddelenom daemon-ovi, ktorý bude robiť prácu na serveri namies…
hafo 12.01.2018 14:25
hafo
tak můžeš si to napsat v C-čku, ale myslím si, že skriptování je v tomto ohledu daleko nejmocnější. poslední
touchwood 12.01.2018 15:34
touchwood

1: PHP to urcite zvladne, budes vsak asi musiet upravit prava http servera
2: Neviem, co si predstavujes pod pojmom uzamknutie, system prava predsa poznas, takze prava su take ako ich nastavis
3: Daj, kde si to cital, pretoze ja to tak pouzivam uz roky a nejako som ani nezapocul o tom, zeby bol system jailu v proftpd prekonany. Samozrejme da sa to zase osetrit aj pravami.

1. Upraviť v akom smere? Čo konkrétne?
2. Uzamknúť v zmysle či sa nedá niečim vyslovene zatvoriť len do toho adresáru, že nebude mať práva na ostatné priečinky. Napr. cez samp server v pawn sa dá nascriptovať si to, aby si sa dostal aj k iným súborom, než tým, čo sú v zložke a môže to narobiť paseku. Samozrejme ostatné priečinky sa dá okamžite zablokovať cez tieto práva, ale čo napr. keď nechcem, aby nemohlo čítať obsah /etc a iných systémových adresárov? Bolo by v poriadku im nastaviť oprávnenie 700 (750)?
Takisto, povolenie www-data by som sa chcel spýtať, či je v poriadku:

www-data ALL=(ALL) NOPASSWD: /servers/*, /usr/sbin/useradd, /usr/sbin/userdel

3. Možno som sa pomýlil pri čítaní, ale link na diskusiu momentálne neviem poskytnúť.

úplně neprůstřelné to taky není, protože při kompromitaci můžeš začít vytvářet nové účty, ale pokud jim jako shell defaultně nastavíš /bin/false nebo /bin/badsh (tedy zakážeš interaktivní přihlášení), zamezíš tím poměrně snadné kompromitaci celého systému.

To áno, ale ak nastavím permissions na 0700 a ownera na www-data, tak sa dakto dostane k vykonávaniu príkazov v php jedine pod www-data (ak nepočítam sudo skupinu a root). Čiže musím mať ošetrený web, aby trebárs niekto nevykonal takéto dačo.

$cmd = "name; hack_cmd";
exec("app ".$cmd);

Stačí pri tom kontrolovať, či tam niekto nevkladá ; alebo aj niečo iné?

Budem sa snažiť najmä, aby sa užívateľ nedostal k tomu, aby jeho vstup sa vkladal do exec()

podle mě na to jdeš zgruntu špatně.

Dnes se aplikace staví vícestupňově, takže web jen dělá čumendu a sbírá data, která uloží na určené místo.
Samotnou černou práci odvádí démon, který s webovými službami nemá a nesmí mít nic společného. V tvém případě to může být bashový/perlový/... skript, který poběží "na pozadí" a s webem nebude mít společného nic jiného, než vytažení dat, která uložil web (vytvořit/smazat usera, spustit příkaz - to ovšem můžeš udělat už rovnou v samotném skriptu a tím snížit případnou plochu pro útok, ...) a podle svého programování tyto akce bude provádět sám.

Ano, má to malou chybku - není to okamžité, bude to mírně pomalejší a s prodlevou. Ale bude to řádově bezpečnější. Cesta, kterou jdeš ty, je cesta k hacku.

Zpět do poradny Odpovědět na původní otázku Nahoru