Mostanában itthon tesztelgetésre létesítettem egy ubuntu alapú szervert, és felmerült egy probléma...
Előre is: apache2 php5 mysql szokásos telepítés van fent.
Az apache www-data userként fut.
Ezek mellett a legegyszerűbbnek nekem a pure-ftpd-mysql tűnt az eléréshez, így phpmyadminban gyorsan egyszerűen létre tudok hozni virtuális usereket mindenfajta hasznos beállítással.
Pure-ftpd-vel megadhatom az adatbázisban, hogy milyen uid-vel és gid-vel hozza létre a fájlokat alapból egy virtuális user esetén.
A kérdésem, hogy ezt hogyan szokták kisebb hosting cégeknél? Minden honlap uid és gid alapján itt www-data? Így a wordpress és társai által igényelt írhatóság ugye meg van oldva...
Esetleg ha lenne ezeknek a usereknek saját accountjuk is a gépen, akkot uid a saját felhasználójuk, gid pedig a www-data? Ebben az esetben viszont ha feltöltenek, akkor a www-data groupnak is kell írási jogot adni ugye... (ha már itt vagyunk, pure-ftpd-mysql esetén hol állítom be, hogy a file creation umask a csoport írását is engedélyezze?)
Melyik megoldás a jobb, népszerűbb? (tudom, hogy szolgáltatás szinten nem ugyan azt nyújtja a kettő...)
Illetve ha a felhasználóimnak ftp helyett sftp hozzáférést szeretnék inkább csak nyújtani, az megoldható virtuális userekkel?
Sftp esetén hogy adom meg a "default" umask-ot amivel létrehozza a fájlokat a szerver?
Összefoglalva, mi a "legjobb" megoldás egy apache szerveren futó virtuális oldalak külső eléréséhez, úgy, hogy a mappák az apache user által írhatóak legyenek (kielégítve a modern cms-ek igényeit), ugyanakkor egy alapvető biztonsági szintet is garantáljunk?
Természetesen leírás linkeket is szívesen fogadok.
- 2134 megtekintés
Hozzászólások
Nalunk az egyik szerveren (1-2 fejleszto fer hozza a weblaphoz) ennyi volt:
pure-pw usermod webuser -f /etc/pure-ftpd/pureftpd.passwd -u 48 -g 48 -d /var/www/html/ -m
Persze engedelyezni kellett pure-ftp sajat virtualis userkezelo allomanyat, -u 48 es g 48 az apache uid/gid.
Ezzel gyorsan lehet hozzaadni par usert.
Tobb user eseten (mondjuk, 10 folott, esetleg apache+fastcgi eseten, nemcsak fejlesztok, hanem a site tulajai is), mar mysql-bol authentikal, minden user kulon uid-vel rendelkezik es az apache user tagja a aktualis user csoportjanak is.
Szoval sztem tesztre es gyorsan az elso megoldas megfelelo.
- A hozzászóláshoz be kell jelentkezni
"ha már itt vagyunk, pure-ftpd-mysql esetén hol állítom be, hogy a file creation umask a csoport írását is engedélyezze?"
A pure-ftpd-nek van egy -U (--umask) kapcsolója:
-U umask files:umask dirs
Change the mask for creation of new files and directories.
The default are 133 (files are readable -but not writable- by other users)
and 022 (same thing for directory, with the execute bit on).
If new files should only be readable by the user, use 177:077.
If you want uploaded files to be executable, use 022:022 (files will be readable by other people)
or 077:077 (files will only be readable by their owner).
"Esetleg ha lenne ezeknek a usereknek saját accountjuk is a gépen, akkot uid a saját felhasználójuk, gid pedig a www-data?"
Nem kötelező saját accountjuknak lenni a gépen, adhatsz meg (a /etc/passwd állományban) nem létezőt uid-t is.
"Összefoglalva, mi a "legjobb" megoldás egy apache szerveren futó virtuális oldalak külső eléréséhez, úgy, hogy a mappák az apache user által írhatóak legyenek (kielégítve a modern cms-ek igényeit), ugyanakkor egy alapvető biztonsági szintet is garantáljunk?"
A kulcsszó: chroot. Ha ezt beállítod a pure-ftpd-ben akkor a különböző felhasználók nem tudnak kilépni a saját home mappájukból más felhasználók mappáiba (hacsak nem egymás almappáiról van szó).
Apache esetén is van szeparálásra lehetőség - kezdve az előbb említett fastcgi-s megoldástól kezdve, a hosszadalmasabb manuális chrooton keresztül, a Balabit-féle jailer-szkripten át, a mod_chroot, mod_security, mod_privileges, mpm-itk bővítményekkel bezáróan.
Itt ragadnám meg az alkalmat: ki melyiket részesíti előnyben? Tud-e valaki erre az utóbbi dologra kellemesen kezelhető módszert?
"Illetve ha a felhasználóimnak ftp helyett sftp hozzáférést szeretnék inkább csak nyújtani, az megoldható virtuális userekkel?"
Itt is lehet dutyiba zárni - lásd például: Jailkit
- A hozzászóláshoz be kell jelentkezni
Ezek alapján egy web hostingnál ftp eléréssel például egy jó megoldás virtuális usereket létrehozni, és a "virtuális" apache szerverek fájljait a www-data tulajdonába rakni, illetve az ftp uid-t is www-data-ra állítani? Ugye ebben az esetben a www-data 1000 alatti uid-t használ, amit a pure-ftpd alapból nem enged belépni, hacsak nem állítom ezt át...
- A hozzászóláshoz be kell jelentkezni
A csúnyábbik (nem biztonságos) megoldás az, hogy a tárhelyen levő fájloknak virtuális hosztonként adsz valami (a /etc/passwd állományban) nem létező 1000 feletti virtuális user ID-ket (mondjuk 7010-et, 7080-at, stb... így a PureFTPD igényeit is kielégíted), és www-data csoportot. Ha a csoport jogosult olvasni és futtatni az adott állományt, akkor a weben is elérhető lesz (a probléma ezzel az, hogy a PHP-n keresztül így elérhető más felhasználók állományai is, sőt ha a csoportnak van írási jogosultsága...).
A szebbik megoldás az, hogy virtuális hosztonként adsz egy felhasználót és egy csoportot az állományoknak, ezt mind a PureFTPD-ben, mind az Apache-nál a virtuális hoszt beállításainál beállítod. Ehhez viszont szükséged lesz egy olyan Apache modulra ami képes lekezelni ezt (erről beszéltem az előző hozzászólásomban az Apache szétszeparálása kapcsán).
- A hozzászóláshoz be kell jelentkezni
Az elso megoldas problemajara mennyire stabil megoldas a php openbasdir?
- A hozzászóláshoz be kell jelentkezni
openbasedirnél pl nincs curl followlocation=true asszem. amugy én így használom
- A hozzászóláshoz be kell jelentkezni
Másik nagy hátránya a mod_php használatának az, hogy egy modul futtatja az összes felhasználó PHP programjait, ezért, ha a kedves badboy ír egy olyan programot, ami valamely oknál fogva működésképtelenné teszi a mod_php-t, akkor az én PHP programom futása is megakad.
Forrás: Weblabor - PHP futtatása FastCGI módban
Tehát hiába az open_basedir, ha az egyik virtuális hoszton üzemelő hibás PHP-kód kifekteti a mod_php-t, ezzel gondot okozva a többi virtuális hoszton levő oldalnak.
- A hozzászóláshoz be kell jelentkezni
Nálunk élesben megy úgy, hogy linux user, group alapján vannak tárhelyek kiosztva. Proftpd van, az ezekkel az id-kel van beállítva szintén. Apache vhostok is ugyanezzel az azonosítókkal működnek, mod_itk-val lehet beállítani. Alapból minden file, könyvtár csak user jogosultsággal van beállítva, group és other 0-án van.
Vhostonként persze open_basedir is be van állítva.
Nincs ütközés apache, FTP között.
Adalék, hogy kvótázást sima file kvótával csinálunk a tárhelyre, emellett a proftpd sajátja is állítható.
- A hozzászóláshoz be kell jelentkezni
ugyanakkor egy alapvető biztonsági szintet is garantáljunk?
Őszinte leszek: szerintem az alapvető biztonsági szinthez hozzátartozik, hogy a webszerver (tehát php-ből sem a user kódja) nem tud írni olyan helyre, ahonnan a webszerver kódot hajlandó futtatni. Ergó a php kódokat a usernek kelljen feltennie, és legyenek külön könyvtárak, amikbe írhat a php/webszerver, amiből viszont nem futtatunk kódot. Ebbe beleértve mindennemű temp könyvtárat is. Persze ez fáj azoknak, akik mindenféle php-generáló php programokat akarnak használni, hogy weben keresztül lehessen túrni a site tartalmát...
Ezen felül ha az egész webszervert berakod egy chroot-ba, hogy a php kód ne tudjon a gép egyéb dolgaiban keresgélni, az tovább javíthat a helyzeten. A chrootot tartalmazó fájlrendszer meg vagy legyen read-only (esetleg bind,ro), vagy nosuid,nodev. Ezt megfejelni egy iptables OUTPUT filterrel, ami a webszerver által használt uid-del nem enged kifele random forgalmakat, már egészen ütésálló rendszert tud eredményezni.
- A hozzászóláshoz be kell jelentkezni