Hogyan érdemes Linux felhasználókat létrehozni egy szerveren?
Nem nagyon foglalkoztam üzemeltetéssel eddig (ezután is csak saját célra fogok, nem kell megijedni). Dereng valami, hogy érdemes külön felhasználót létrehozni az alkalmazásoknak, amik a szerveren fognak futni. Pl adatbázisok általában létrehozzák a saját felhasználóikat (postgres, neo4j, stb.). Így ha megtörik a szervert, akkor postgres felhasználóval tudnak csak shell command-eket kiadi, nem root-al, ami gondolom előnyösebb. Gondolom webszervereknél, samba szervernél, ssh-nál, stb. ugyanilyen veszély fennáll. Úgy sejtem, hogy ez egy hatalmas témakör, és talán még a best practice-ek felsorolása sem fér bele ebbe a fórumba, szóval örülnék linkeknek.
Illetve a konkrét kérdés most nekem az lenne, hogy nodejs-t pm2-vel hogyan tudnám fellőni úgy, hogy ne root jogokkal fusson? Láttam már olyat, hogy magába a js kódban kellett azt hiszem a process-nél megadni az uid-t és gid-t. Ez nekem nem jön be, szívesebben kötném parancssorból indításnál felhasznáóhoz és csoporthoz az alkalmazás, ha ez lehetséges.
■ Illetve a konkrét kérdés most nekem az lenne, hogy nodejs-t pm2-vel hogyan tudnám fellőni úgy, hogy ne root jogokkal fusson? Láttam már olyat, hogy magába a js kódban kellett azt hiszem a process-nél megadni az uid-t és gid-t. Ez nekem nem jön be, szívesebben kötném parancssorból indításnál felhasznáóhoz és csoporthoz az alkalmazás, ha ez lehetséges.
Ha nem root felhasználóval
A postgresql-t például a következőképp lehet szerverindításkor adott felhasználó jogaival futtatni:
Olvasgatok én is. CentOS-en
Elvileg valami ilyesmi kellene nekem: `pm2 startup -u www`, ahhoz, hogy www jogkörökkel indítson minden nodejs appot. Ennyi talán elég is. Van még olyan feature, hogy belőni egy-egy app-nál config fájlban, hogy milyen felhasználó futtassa, de az már nem működik, legalábbis másfél éve volt vita róla, hogy nem lesz ilyen. Na majd tesztelem ezt. Ha nem sikerül a process-eket www felhasználóként futtatni, akkor valszeg váltok vissza forever-re, ami sokkal fapadosabb, de legalább tud ilyen feature-t. Root-ként futtatva más is azt mondja, hogy nem biztonságos.
Nem tudom, hogy a pm2 elviseli e, ha nem root-ként indítom, mert egy csomó helyre ír logokat. Ez is egy lehetőség végülis. Kipróbálom, aztán max átírom az init.d scriptet vagy micsodát, ami indítja. Nem találtam init.d-ben amúgy annak idején, de nem néztem körül alaposan.
Szervereket valamilyen
Nem CentOS-ről van szó, azt
15.04-től az Ubuntu is
És honnan fogom tudni, hogy
Systemd jobb annyival, hogy érdemes lenne váltani másik verzióra? Nekem talán fontosabb, hogy x évig legyen support a verzióra, és a 14.04 LTS.
Ha rendszerszinten
A systemd láthatóan a de facto initrendszer lesz a belátható jövőben, míg az Upstart mögött a Canonical állt, és most, hogy végül az Ubuntu is systemd-re váltott, szerintem meg vannak számlálva a napjai. Ezért talán érdemesebb a systemd megismerésébe időt fektetni, de ezen kívül az Upstart is használható rendszer.
14.04-re sajna nem lehet
Igen, ezt elfelejtettem
Puppet
Ja néztem én is, hogy gondok
Igazából nekem nem számít az se, ha nem 80-as porton van, úgyis könyvjelzőbe teszem majd az oldalt vagy kezdőlapra. Szóval nálam ez nem szempont, másnak meg nem tervezem üzemeltetni az oldalát, ahol fontos lenne, hogy ne kelljen portot írni. Gondolkodtam rajta, hogy veszek saját domain-t meg esetleg statikus IP-t, de pénzkidobás lenne. Elég a dinamikus IP valami noip domain névvel, nem üzleti célra lesz. Az nginx-nek van még más előnye? Elsősorban biztonsági szempontból érdekelne. A nagyobb teljesítmény statikus kiszolgálásban nálam most szintén nem szempont. Olyasmiket írtak, hogy ddos ellen véd valamennyire, de mivel úgyis szeretnék fail2ban-t vagy ilyesmit használni, ezért talán ez sem szempont. Talán még erre se lesz szükségem, ha VPN mögé teszem az egészet, és úgy csatlakozok rá. Legalábbis azt mondják, hogy az kb olyasmi, mintha belső hálóra csatlakoznék. Az az egy baja van, hogy bonyolult, én meg lusta vagyok. xD
nginx
Egy olyan szoftver, ami
Konkrétan ez a része érdekelne egy kicsit kibontva. Nálam az nginx-et egyedül a biztonság indokolná, nincsenek terhelésből fakadó problémáim, és ezen a szerveren nem is lesznek. Próbálok utánakeresni, hátha találok valamit.
szerk:
Közben próbáltam utánanézni ennek a reverse proxy témának. Talán érdekes lehet, hogy nodejs-ben is írtak jópárat. Ez kapta a legtöbb csillagot: https://github.com/OptimalBits/redbird. Összehasonlító teszteket nem láttam nginx-el, de nyugodtan nevezhetjük ezt is célszoftvernek, és akkor ugyanott vagyunk.
Maga a nodejs egyébként valóban nem szervernek készült, az express (és társai) viszont igen. Szóval ha össze akarunk hasonlítani valamit, akkor az express-t és/vagy a redbird-öt lehetne az nginx-el, és nem a nodejs-t.
Maga a nodejs egyébként
A HTTP implementáció a Node része, nem?
Igaz, benéztem.
Ahogy nézem, a pm2 úgy van
pm2
úgy van megcsinálva, hogy userenként fusson. Tehát ne rootként futtasd a process managert :).Mi egyébként most
supervisord
-t használunk (régebben pedigmonit
-ot), minden service saját userként fut, lokálisnode
-ja van minden servicenek (nvm
-mel, tehát minden service olyan verzión futhat, amilyen verzión szeretne), az egész előtt egynginx
proxy (és aminek kívülről is látszania kell, az látszik kívülről is). Az egész gombócansible
-lel van deployolva, így a konfiguráció is egy helyen van (jelszavak, stb), így a forráskódban sehol sincsenek érzékeny adatok. Kb. az az architektúra, amit janoszen is felvázolt egyébként.Hát én konkrétan így
Ezt nem lehet elérni a tűzfalon port nyitással, port forward-al? Minek kell erre plusz egy nginx? Azt látom én is, hogy sokan node + nginx felállást választják, de továbbra sem értem, hogy ez miért annyival előnyösebb, mint node-ot csak magában futtatni, illetve, hogy erre nekem szükségem van e egy itthoni alkalmazásnál, amit csak én használok, nagyon esetleg részleteket, pl blogot megosztok másokkal is egy dyndns-es weboldalon.
Az sem tiszta, hogyha az
Ennek leginkább az az értelme, hogy ha valamelyik alkalmazásban hiba van, akkor minél kevesebb joggal rendelkezik, annál kisebb lehet az okozott kár.
Jól sejtem, hogy a take
Abból kiindulva, hogy a root-ként futtatás mennyire veszélyes, gyanítom, hogy y felhasználó jogait kapja majd, viszont akkor nem értem, hogy az ownership mire való. Talán arra, hogy más ne nézhesse meg a te fájljaidat? :D Az a része továbbra sem világos, hogy akkor most az init script indítók root jogosultsággal indulnak, és utána ezt használják fel, hogy különböző felhasználók nevében futtassanak alkalmazásokat? Szóval ha y felhasználó beregisztrál egy init scriptet, akkor az init script indító y nevében fogja mondjuk reboot-nál elindítani a scriptet? Ugyanez igaz a process manager-ekre, mint pl a pm2?
Az a része továbbra sem
Igen, az init rootként fut, te pedig megmondhatod, hogy milyen felhasználóként indítsa el a rábízott folyamatokat.
A fájljogosultságok rendszerét érted?
Az attól függ, hogy az mi :D
Mivel Unixon a fájlrendszer
Nem ismerem a pm2-t, és nem
Hát nagyjából annyit csinál,
Ezt systemd-vel vagy
Újabb adalék ehhez az nginx +
Biztonsági szempontból volt DDOS, amire sebezhető volt, de már évekkel ezelőtt javították. Persze lehetséges, hogy nginx megfog biztonsági hibákat, amik nodejs-re jellemzőek, viszont az is lehetséges, hogy behoz a rendszerbe nginx-re jellemző biztonsági hibákat. Úgyhogy nekem ez sem érv. Ha lesz reverse proxy, akkor nodejitsu vagy redbird féle lesz. Nem szeretnék keverni technológiákat.
Ennek a felhasználós témának még nézek utána. Találtam pár érdekes dolgot a témában, pl itt külön user futtatja a nodejs processeket meg a pm2-t is: https://nodeswat.com/blog/setting-up-a-secure-node-js-web-application/. Nem tetszik a megoldás, mert systemd-t használ a felhasználó beállítására a pm2 helyett, de legalább látszik, hogy lehetséges a dolog.