Portál AbcLinuxu, 16. dubna 2024 18:41


Dotaz: Omezení čtení souborů vyjma uživatelova home

22.3.2008 00:31 happymaster23 | skóre: 9
Omezení čtení souborů vyjma uživatelova home
Přečteno: 583×
Odpovědět | Admin
Zdravím,

v systému mám uživatele, kteří jsou zde pouze proto, aby se pomocí nich (FTP) nahrál do jejich home obsah webu. Tato skupina má (měla by mít) maximálně omezený přístup. Aby nemohli číst soubory přes FTP mimo jejich home mám vyřešeno pomocí nastavení FTP serveru, který je nad jejich home nepustí. Doteď je to OK, nicméně tihle uživatelé můžou pomocí skriptů (php obvykle), číst obsah celého filesystému a to jednoduchým způsobem. Nejdřív si z globální proměnné $_SERVER zjistí, kde se jejich home ve filesystému nachází a potom už není problém pomocí jednoduchého skriptu (include "../../../etc/něco";) číst soubory co jsou v /proc či /etc atd. Z podstaty to je v pořádku, protože tyhle soubory mají nastavená práva tak, že je můžou číst všichni. Taky si nejsem jistý, na kolik je tohle nebezpečné, nicméně zkoušel jsem si tímto způsobem zobrazit nějaké systémové soubory na komerčních hostincích a tady jsem narazil - nefungovalo to. I proto si myslím, že není úplně vhodné, aby si každý mohl zobrazovat soubory jako /etc/passwd, apod.

Měnit práva všech systémových souborů (tak aby je nemohli číst others) je asi jako jít se vzduchovkou na tank a to nemluvě o tom, že by díky tomu spousta věcí přestala fungovat. Proto se ptám - existuje nějaké jednoduché elegantní řešení, aby skripty, které nahrají běžní uživatelé nemohli číst data odjinud než z uživatelova home?

Díky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

AraxoN avatar 22.3.2008 01:00 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Omezení čtení souborů vyjma uživatelova home
Odpovědět | | Sbalit | Link | Blokovat | Admin
Riešenie pre PHP sa volá open_basedir a dá sa nastaviť pre každý adresár, či virtual host zvlášť (aby si užívatelia navzájom nešmejdili po adresároch):
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/www
    <Directory /var/www/example.com/www>
        Options Indexes FollowSymLinks
        Order allow,deny
        Allow from all
        php_admin_value open_basedir /var/www/example.com
        AllowOverride AuthConfig FileInfo Indexes Limit
    </Directory>
    ErrorLog /var/www/example.com/logs/www.example.com-error.log
    CustomLog /var/www/example.com/logs/www.example.com-access.log combined env=!nologreq
</VirtualHost>
Pre iné jazyky než PHP je to potrebné riešiť zvlášť. Okrem toho PHP defaultne povoľuje spúšťanie príkazov ako napríklad cat, či ls, a pre tie už open_basedir neplatí, takže je dobré volania všetkých externých príkazov z PHP potom úplne zakázať.
23.3.2008 00:45 happymaster23 | skóre: 9
Rozbalit Rozbalit vše Re: Omezení čtení souborů vyjma uživatelova home
Díky za odpověď,

hned zítra to vyzkouším.

Jak se v php dá zakázat volání externích příkazů? Něco málo jsem hledal (netvrdím, že důkladně) a nic moc jsem nenašel. Snad jen něco ve smyslu disable_functions = . Nastavit safe_mode by asi bylo moc restriktivní, že?
AraxoN avatar 23.3.2008 01:15 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Omezení čtení souborů vyjma uživatelova home
Safe mód bude v budúcej verzii (PHP6) odstránený a odporúčal by som nezvykať si na neho. Zakázať volania príkazov shellu sa dá práve cez disable_functions, kde je minimálne treba vymenovať všetky funkcie, ktorých popis začína slovami "Execute ...", napríklad odtiaľto: Program Execution Functions. Pozor ale - aj iné moduly a funkcie môžu obsahovať nechcené fičúry, ako napr. tento.

Všetko toto rieši ale len PHP skripty, ak tam bude napr. Perl, tak ten treba riešiť zvlášť (nemám tušenie ako, keďže perl nie je môj obľúbený). Istým riešením by bolo prevádzkovať Apache v konfigurácii per-user, kedy je ku každému virtuálnemu hostu pridelený user, pod ktorým sa požiadavky vykonávajú. To by riešilo problém komplexne, bohužiaľ väčšina týchto per-user rozšírení nie je práve v stable vetve (aspoň naposledy čo som pozeral).
22.3.2008 10:48 Dramon | skóre: 14
Rozbalit Rozbalit vše Re: Omezení čtení souborů vyjma uživatelova home
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejen na tento problém je určen SELinux, který Apache, potažmo PHP skript, nepustí nikam, kde nejsou správné bezpečnostní kontexty. Což je ve výchozím nastavení složka www serveru a jinak nic. Dají se povolit uživatelské adresáře. Pokus o čtení čehokoliv jiného je odmítnut
Pokud používáš distribuci, kde SELinux nativně není, tak může být oříšek jej tam aplikovat. Možná AppArmor má stejné možnosti, nevím, neznám jej.
22.3.2008 10:55 fixinko | skóre: 15 | Bratislava
Rozbalit Rozbalit vše Re: Omezení čtení souborů vyjma uživatelova home
SELinux riesi len to, aby apache necital nic ine, co je v jeho TE, ale to aby si uzivatelia lozili po adresaroch (vramci apacha) riesi safe_mode pripadne open_basedir...
22.3.2008 11:11 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Omezení čtení souborů vyjma uživatelova home
AppArmor není tak obecný jako SELinux, ale pro mnoho účelů (včetně tohoto) by stačil. Navíc právě pro Apache má zajímavé rozšíření subprofilů (hats), které umožňují odlišná oprávnění v závislosti na URL.
23.3.2008 00:51 happymaster23 | skóre: 9
Rozbalit Rozbalit vše Re: Omezení čtení souborů vyjma uživatelova home
Díky za odpovědi,

distribuci se SELinuxem používám (CentOS 5), nicméně jsem ho na dobu neurčitou přepnul do tolerantního módu, protože jsem měnil výchozí adresáře pro Apache, MySQL a instaloval ProFTPd a pro to všechno se do SELinuxu musí přidat pravidla, čemuž jsem zatím nijak moc nepřišel na kloub (resp. snažil jsem se to řešit zde).

Stejně si ale myslím (jako fixinko), že by tady stejně SELinux nepomohl, protože to nečte Apache, ale přímo ten skript toho uživatele.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.