Nelze vytvořit adresář v /srv běžným uživatelem

Nelze vytvořit adresář v /srv běžným uživatelem
« kdy: 18. 02. 2019, 20:22:13 »
Ahoj, mám rychlý velmi základní amatérský dotaz a prosím si o radu.

Jaký prosím navrhujete postup, abych mohl defaultním uživatelem postgresql "postgres" vrtat v adresáři /srv? Myšleno např. vytvářet tam adresáře a nahrávat tam dumpy PostgreSQL databází?

Napadají mě samé nesmysly, jak bych to jakožto amatér řešil:
  • Nastavil CHMOD na 777
  • Nastavil chown na něco jako postgres:root a změnil vlastníka z roota na postgres, což by možná systém ani nepřekousnul
  • Nějakým způsobem přidal uživatele postgres do sudoers file, což se asi dělá nějak pomocí příkazu "usermod -a sudo", jen hádám.
  • Přidal uživatele postgres do skupiny "root"
  • Možná do scriptu na začátek přidat něco jako export $PATH=$PATH:/srv/

Nejsem si jist, zda se hodí uživatele PostgreSQL databáze "postgres" (jestli to náhodou není potenciálně nebezpečné) přidávat do sudoers, ale vím, že u běžných uživatelů se to řeší nějak takhle sudo mkdir /srv/bla/bla/bla/.
Co mi prosím doporučíte? Děkuji moc za radu, jak se to správně řeší.

Jsem si vědom, že můj dotaz patří do naprostých základů jakýchkoliv systémů. Nicméně u sebe ve Windows jsem nikdy neměl potřebu se v oprávněních vrtat a na serveru jsem vždy používal roota. Momentálně ale roota vyloženě používat nechci (údajně to může vést k narušení bezpečnosti systému, pokud budu aplikace spouštět uživatelem s právy posvátné krávy).
« Poslední změna: 18. 02. 2019, 22:52:00 od Petr Krčmář »


Úplně nejbezpečněji:
1. založit nového neprivilegovaného uživatele (např. pgmaint)
2. chown pgmaint:wheel /srv (evt. pgmaint:pgmaint)
3. chmod 0750 /srv
4. su - postgres -c "createuser -s -P pgmaint"

(nebo můžete rovnou založit uživatele pgmaint s home /srv, ale pak musíte stejně pohlídat ty práva).

V tu chvíli bude mít k adresáři přístup uživatel pgmaint, a pro postgres bude superuser (takže dokáže jakoukoliv operaci s postgresem, včetně pg_dump).

Bylo by lepší, kdyby nemusel být superuserem, ale to z Vašeho dotazu není poznat.
Neumím taky posoudit, jak máte nastavený pg_hba.conf.
« Poslední změna: 18. 02. 2019, 20:45:16 od Miroslav Šilhavý »

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #2 kdy: 19. 02. 2019, 07:21:19 »
Použít ACL a přidat uživateli postgres právo zápisu do /srv – příkaz setfacl.

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #3 kdy: 19. 02. 2019, 07:47:02 »
Použít ACL a přidat uživateli postgres právo zápisu do /srv – příkaz setfacl.

To nepovažuji za dobrý nápad. Není žádný důvod, aby pg_dump volal přímo uživatel postgres. Uživatel postgres je vlastník procesu serveru a chybný krok může shodit server. Klidně práva nastavit přes ACL (i když to také nepovažuji za šťastné, protože to není univerzální postup pro různé OS a pro různé filesystémy), ale určitě užit jiného uživatele.

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #4 kdy: 19. 02. 2019, 08:21:21 »
vola sa to extended access lists..
setfacl a getfacl...


Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #5 kdy: 19. 02. 2019, 08:36:51 »
Použít ACL a přidat uživateli postgres právo zápisu do /srv – příkaz setfacl.

To nepovažuji za dobrý nápad. Není žádný důvod, aby pg_dump volal přímo uživatel postgres. Uživatel postgres je vlastník procesu serveru a chybný krok může shodit server. Klidně práva nastavit přes ACL (i když to také nepovažuji za šťastné, protože to není univerzální postup pro různé OS a pro různé filesystémy), ale určitě užit jiného uživatele.

S tim zase nesouhlasim ja. Jakkykoli jiny uzivatel nemusi mit prava do vsech objektu v DB. Takze rozhodne at to dumpuje postgres.

Co se tyce /srv, tak doporucuji udelat tam podadresar a na nem nastavit prava pro postgres. Proc? Protoze to umoznuje mit manevrovaci prostor pro dalsi veci v /srv.

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #6 kdy: 19. 02. 2019, 08:39:14 »
Použít ACL a přidat uživateli postgres právo zápisu do /srv – příkaz setfacl.

To nepovažuji za dobrý nápad. Není žádný důvod, aby pg_dump volal přímo uživatel postgres. Uživatel postgres je vlastník procesu serveru a chybný krok může shodit server. Klidně práva nastavit přes ACL (i když to také nepovažuji za šťastné, protože to není univerzální postup pro různé OS a pro různé filesystémy), ale určitě užit jiného uživatele.

S tim zase nesouhlasim ja. Jakkykoli jiny uzivatel nemusi mit prava do vsech objektu v DB. Takze rozhodne at to dumpuje postgres.

Co se tyce /srv, tak doporucuji udelat tam podadresar a na nem nastavit prava pro postgres. Proc? Protoze to umoznuje mit manevrovaci prostor pro dalsi veci v /srv.

Postgres = vlastník procesu, i právo dump
Pgmaint = pouze právo dump
Obyč user = právo ostatních prací (klidně přes ACL), např. práci s dumpy.

Co mi na tom vadí je zneužívat proces serveru k pracem, to se prostě nemá dělat.

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #7 kdy: 19. 02. 2019, 21:47:44 »
Pgmaint = pouze právo dump
Jenže scientific tam nechce ty databáze dumpovat (což by ostatně bylo rozumné dělat do jiného adresáře než /srv), ale chce je naopak obnovovat.

Co mi na tom vadí je zneužívat proces serveru k pracem, to se prostě nemá dělat.
Jenže to, že postgres je uživatel pouze pro proces serveru, jste si vymyslel vy – samotnými autory PostgreSQL tak chápán není. Já s vámi souhlasím, že principiálně čisté řešení je takové, kdy server běží pod uživatelským účtem, který se k ničemu jinému nepoužívá. Ovšem neradil bych to, že má prokopávat tuto perfektně čistou cestu, někomu, kdo se potřebuje na takovéhle věci ptát na diskusním fóru. V tomto případě bych upřednostnil řešení, které sice není principiálně úplně čisté, ale je standardní.

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #8 kdy: 19. 02. 2019, 22:59:28 »
Ano, chci vytvářet dumpy. /srv/path/to/zalohovani/ je nezbytné.
Chápu správně, že tedy nejlepší až moc přehnaně dokonalé řešení navrhuje @Miroslav Šilhavý , zatímco uživatel @Filip Jirsák doporučuje standardní řešení, které je z hlediska bezpečnosti v pořádku a zcela běžné. A klidně můžu zálohovací skript spouštět uživatelem postgres a mohu ho nastavit vlastníkem /srv/path/to/zalohovani/ .

Chápu vás správně?

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #9 kdy: 20. 02. 2019, 06:58:50 »
Chápu správně, že tedy nejlepší až moc přehnaně dokonalé řešení navrhuje @Miroslav Šilhavý , zatímco uživatel @Filip Jirsák doporučuje standardní řešení, které je z hlediska bezpečnosti v pořádku a zcela běžné.

Běžné určitě není, protože ACL je něco, co nemusíte mít k dispozici, co není zajištěno, že bude za všech okolností a na všech systémech a na všech filesystémech fungovat. Stačí chybně provedené kopírování nebo přesunutí dat a máte po ACL.

Moje řešení je dalek jednodušší na správu - jednou nastavíte a můžete na to zapomenout. Kdyby došlo k nějaké chybě, výsledkem bude odepření přístupu (nikdo se k datům nedostane).

Filipovo řešení má problém v tom, že může nastat několik situací, kdy selže, a výsledkem nebude odepření přístupu, ale naopak to, že se k datům dostane i někdo cizí. Výsledkem také může být to, že se někomu podaří Vám podstrčit script nebo data, které spustíte pod uživatelem postgres a tím shodíte celý databázový server.

Založit uživatele, založit roli v postgresu = odhadem dvě minuty práce? Toto je celé, co potřebujete udělat:

Kód: [Vybrat]
adduser --disabled-password pgmaint
chown pgmaint:pgmaint /srv
chmod 0750 /srv

su - posgres -c "createuser -s -P pgmaint"
echo "localhost:*:*:pgmaint:<heslo>" > ~pgmaint/.pgpass
chown pgmaint:pgmaint ~pgmaint/.pgpass
chmod 0600 ~pgmaint/.pgpass

Uživatel pgmaint pak bude moci zakládat v postgresu role, zakládat databáze, rušit je, dělat dumpy, natahovat dumpy. Ale neohrozí samotný proces posgresu, neohrozí datové soubory postgresu.
« Poslední změna: 20. 02. 2019, 07:01:27 od Miroslav Šilhavý »

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #10 kdy: 20. 02. 2019, 07:11:52 »
Ano, chci vytvářet dumpy. /srv/path/to/zalohovani/ je nezbytné.
Chápu správně, že tedy nejlepší až moc přehnaně dokonalé řešení navrhuje @Miroslav Šilhavý , zatímco uživatel @Filip Jirsák doporučuje standardní řešení, které je z hlediska bezpečnosti v pořádku a zcela běžné. A klidně můžu zálohovací skript spouštět uživatelem postgres a mohu ho nastavit vlastníkem /srv/path/to/zalohovani/ .

Chápu vás správně?
To bezpečné/standardní se vztahuje k tomu, jestli použít uživatele postgres nebo jiného uživatele. To, zda použijete řešení přes skupinu nebo ACL s tím nesouvisí – obojí můžete udělat jak s uživatelem postgres tak s jiným uživatelem.

Vilith

  • *****
  • 660
    • Zobrazit profil
Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #11 kdy: 20. 02. 2019, 07:18:05 »
Reseni popsane Silhavym mi funguje uz mnoho let na ruznych serverech a nevidim v tom zadny problem

Casto ani nevytvarim specialniho uzivatele, pokud je server dedikovany jen pro DB a nikdo jiny na nej nema pristup

Nekdy ta jednoducha reseni jsou dostatecna

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #12 kdy: 20. 02. 2019, 07:31:03 »
To bezpečné/standardní se vztahuje k tomu, jestli použít uživatele postgres nebo jiného uživatele. To, zda použijete řešení přes skupinu nebo ACL s tím nesouvisí – obojí můžete udělat jak s uživatelem postgres tak s jiným uživatelem.

Ještě jsem chtěl doplnit, že to řešení Miroslava Šilhavého bych nenazýval přehnaně dokonalým – používat dedikované uživatele pro jednu konkrétní činnost je dobré řešení a často je to relativně snadné, jako v tomto případě. Abych to nazýval „přehnané“, musela by tam být ještě spousta dalších opatření. Jenom jsem upozorňoval na to, že to použití jiného uživatele jde nad rámec toho, s čím počítá např. oficiální dokumentace PostgreSQL, protože tam se počítá s jedním uživatelem postgres, který slouží jak k běhu serveru, tak pro jeho správu. Takže pokud použijete uživatele dva (nebo více), musíte na to myslet i v budoucnosti a používat toho správného uživatele pro konkrétní činnosti.

Re:Nelze vytvořit adresář v /srv běžným uživatelem
« Odpověď #13 kdy: 20. 02. 2019, 07:31:30 »
Běžné určitě není, protože ACL je něco, co nemusíte mít k dispozici, co není zajištěno, že bude za všech okolností a na všech systémech a na všech filesystémech fungovat. Stačí chybně provedené kopírování nebo přesunutí dat a máte po ACL.
Pokud se bavíme o Linuxu, tam, už je ACL standardem hezkých pár let. A v tomto případě se ACL nastavuje na jeden jediný adresář /srv, takže nějaké kopírování nebo přesouvání tohoto adresáře bude mít stejný problém i s řešením přes skupinu – pokud ten adresář vytvoříte znova, budete muset znova ta práva nastavit.

Mimochodem ta ACL se do Linuxu zavedla právě proto, aby se obešlo omezení na jednoho vlastníka a jednu skupinu. Pokud potřebujete přidat oprávnění jednomu dalšímu uživateli, dá se to přes skupinu obejít. Pokud by těch uživatelů bylo víc a některým potřebujete povolit zápis a jiným jenom čtení, s klasickými oprávněními pro uživatele, skupinu a ostatní jste v koncích.

Filipovo řešení má problém v tom, že může nastat několik situací, kdy selže, a výsledkem nebude odepření přístupu, ale naopak to, že se k datům dostane i někdo cizí. Výsledkem také může být to, že se někomu podaří Vám podstrčit script nebo data, které spustíte pod uživatelem postgres a tím shodíte celý databázový server.
Nikoli, ACL přidávají oprávnění dalším uživatelům na úrovni jádra operačního systému. Pokud byste ten disk vyndal a přimontoval do 15 let starého systému, kde nebude podpora ACL, neznamená to, že by k datům dostal přístup někdo další – ACL tam nebudou, tím pádem nebudou mít k datům přístup ti uživatelé, kteří jej měli pomocí ACL a přístup zůstane omezeným pouze na ty uživatele, kteří jsou přímo vlastníky nebo ve skupině. Okruh uživatelů by se tedy zúžil.

Vilith

  • *****
  • 660
    • Zobrazit profil