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… nový
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úť.

ad bod 2.: na to se používá chroot, ale je třeba, aby to aplikace (server) uměla (reps. aby byla napsaná tak, že to zvládne)

edit: to myslíš vážně, že webové službě dáváš možnost vytvářet uživatele?!

ú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