Fórum Ubuntu CZ/SK

Ostatní => Ubuntu Server => Téma založeno: urgo272 22 Září 2014, 09:21:59

Název: Zabezpečení produkčního web serveru
Přispěvatel: urgo272 22 Září 2014, 09:21:59
Ahoj všem,

chci poprosit o pár rad ohledně produkčního web serveru co se zabezpečení týče. V tuto chvíli jsem udělal pár základních věcí :

/etc/php5/apache2/php.ini

display_errors = Off

expose_php = Off

disable_functions = shell_exec, exec, system, passthru, proc_close, proc_open, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, dl, popen, pclose, chown, disk_free_space, disk_total_space, diskfreespace, fileinode, max_execution_time, set_time_limit, highlight_file, show_source, phpinfo, chgrp, symlink

allow_url_fopen = Off

allow_url_include = Off

Máte nějaké typy co je třeba upravit / vypnout dále ?

Díky moc


Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: Petr Merlin Vaněček 22 Září 2014, 09:41:26
Určitě bych ještě ošetřil /tmp na spuštění cizího kódu
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: urgo272 22 Září 2014, 10:03:45
Určitě bych ještě ošetřil /tmp na spuštění cizího kódu

Ahoj, díky moc za typ, jen /tmp/ promiň za hlopou otázku, furt se učim, ale myslíš něco jako chmod 0666 /tmp/
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: Petr Merlin Vaněček 22 Září 2014, 10:22:42
No takhle úplně ne.

Jde o to, aby pokud někdo stáhne svůj kód do /tmp, aby se mu nepodařilo jej spustit.
Pokud uděláš jen 0666 na /tmp, už nebude tato maska na podadresáři. Úplně nejlepší je připojit /tmp jako particii bez práva spuštění.

Pokud už nemáš prostor, na hdd, kde particii vytvořit, udělej to přes mount obrazu.
Psal jsem o tom zde (http://lomitkari.cz/2014/06/26/jak-zabezpecit-tmp/)
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: urgo272 22 Září 2014, 11:02:05
No takhle úplně ne.

Jde o to, aby pokud někdo stáhne svůj kód do /tmp, aby se mu nepodařilo jej spustit.
Pokud uděláš jen 0666 na /tmp, už nebude tato maska na podadresáři. Úplně nejlepší je připojit /tmp jako particii bez práva spuštění.

Pokud už nemáš prostor, na hdd, kde particii vytvořit, udělej to přes mount obrazu.
Psal jsem o tom zde (http://lomitkari.cz/2014/06/26/jak-zabezpecit-tmp/)

Díky moc za super návod ;-) jen jedna věc:

# rm -rf /tmp


Jak jsem odebral adresář /tmp, tak už ho nenamountuju...

mount: přípojný bod /tmp neexistuje


A když jsem se chtěl kouknut tak

Nelze vytvořit dočasný adresář /tmp/mc-root: Adresář nebo soubor neexistuje (2)
Dočasné soubory se nebudou vytvářet
Stiskněte libovolnou klávesu pro pokračování...

A stále nic...
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: jmp 22 Září 2014, 12:12:01
vytvořte /tmp a nastavte tato oprávnění: drwxrwxrwt

EDIT: smazat /tmp jako takové je chyba - chce to promazat jen jeho obsah...
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: urgo272 22 Září 2014, 13:40:42
vytvořte /tmp a nastavte tato oprávnění: drwxrwxrwt

EDIT: smazat /tmp jako takové je chyba - chce to promazat jen jeho obsah...

Super díky za radu,

takže jsem to nakonec udělal takhle:

# dd if=/dev/zero of=/home/tmp.img bs=1024 count=1000000
# mke2fs /home/tmp.img
# echo "/home/tmp.img /tmp ext2 loop,noexec,nosuid,rw 0 0" >>/etc/fstab
# rm -rf /tmp
# mkdir /tmp
# chmod +t /tmp
# mount /tmp
# chmod 0777 /tmp

Doufam že jsem si tim nic nezprasil :-D, je to tak ok ?
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: jmp 22 Září 2014, 14:04:49
ještě sticky bit pro /tmp
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: ntz_reloaded 22 Září 2014, 14:06:35
ne, to je dost divoky .. nechapu co delas a jakej to ma smysl ..

mas proste udelat prazdnej adresar tmp a dat mu prava 1777 .. nemam ubu, ale predpokladam, ze v ubu to bude stejny:

Kód: [Vybrat]
# rpm -qf /tmp/
filesystem-13.1-3.1.2.x86_64

^^ ne, ze tam mate rpm, ale ze /tmp bude asi patrit nejakemu baliku
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: jmp 22 Září 2014, 14:09:47
možná proto, že pokud to bude do /tmp extra mountované, tak je možné tomu fs dát noexec (pokud to jde i jinak na dílčí část filesystému, tak o tom nevím...)

EDIT: a koukám jestě nosuid
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: ntz_reloaded 22 Září 2014, 14:19:23
nevim co resite .. apache nepujde mimo svuj DocumentRoot a ServerRoot .. /tmp muzete nechat kompletne na pokoji .. neni potreba ho "molestit" ;)
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: urgo272 22 Září 2014, 14:30:06
možná proto, že pokud to bude do /tmp extra mountované, tak je možné tomu fs dát noexec (pokud to jde i jinak na dílčí část filesystému, tak o tom nevím...)

EDIT: a koukám jěstě nosuid

Ok, takže ještě přidam sticky bit, a mělo by to bejt ok ? Nebo ted jsem vážně nervozní z toho tempu jestli jsem to nedomršil :D failtoban, nějak nastavujete, nebo necháváte v default  ?
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: ntz_reloaded 22 Září 2014, 14:43:53
nevim co resite .. apache nepujde mimo svuj DocumentRoot a ServerRoot .. /tmp muzete nechat kompletne na pokoji .. neni potreba ho "molestit" ;)
znovu .. proc mucis /tmp kdyz je to uplne zbytecny ????

opakuji .. httpd bezi v takovem semi-chrootu v ServerRoot a nikam jinam sahat nebude ..
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: Petr Merlin Vaněček 22 Září 2014, 15:43:55
nevim co resite .. apache nepujde mimo svuj DocumentRoot a ServerRoot .. /tmp muzete nechat kompletne na pokoji .. neni potreba ho "molestit" ;)
znovu .. proc mucis /tmp kdyz je to uplne zbytecny ????

opakuji .. httpd bezi v takovem semi-chrootu v ServerRoot a nikam jinam sahat nebude ..

Tak to se pleteš - do /tmp si php defaultně schovává uploadované soubory.
A bohužel že nebude mít +x /tmp neznamená, že to samé bude mít i adresář vytvořený v php ... si to zkus ;)
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: urgo272 22 Září 2014, 17:03:04
nevim co resite .. apache nepujde mimo svuj DocumentRoot a ServerRoot .. /tmp muzete nechat kompletne na pokoji .. neni potreba ho "molestit" ;)
znovu .. proc mucis /tmp kdyz je to uplne zbytecny ????

opakuji .. httpd bezi v takovem semi-chrootu v ServerRoot a nikam jinam sahat nebude ..

No tak teda jak :-D je tenhle postup ok ? nebo je to k ničemu...

# dd if=/dev/zero of=/home/tmp.img bs=1024 count=1000000
# mke2fs /home/tmp.img
# echo "/home/tmp.img /tmp ext2 loop,noexec,nosuid,rw 0 0" >>/etc/fstab
# rm -rf /tmp
# mkdir /tmp
# chmod +t /tmp
# mount /tmp
# chmod 0777 /tmp

Tak to se pleteš - do /tmp si php defaultně schovává uploadované soubory.
A bohužel že nebude mít +x /tmp neznamená, že to samé bude mít i adresář vytvořený v php ... si to zkus ;)

Co jiný vychytávky, na co si dát pozor, co poladit na produkčnim serveru...
Název: Re:Zabezpečení produkčního web serveru
Přispěvatel: ntz_reloaded 22 Září 2014, 17:42:55
hmm .. zajimava poznamka ..

nicmene to co delate mi nepripada uplne standardni .. teda alespon nikde jsem to nevidel .. a pokud chces neco spustit z noexec filesystemu, tak to bude platit jen pro ten shell ..

Kód: [Vybrat]
# dd if=/dev/zero of=/root/fs bs=1M count=1 &>/dev/null

# losetup --find --show /root/fs
/dev/loop0


# mkfs.ext4 /dev/loop0 &>/dev/null


# mount -vv -o noexec /dev/loop0 /mnt/tmp/
mount: /dev/loop0 mounted on /mnt/tmp.


# echo -e 'echo ahoj' > /mnt/tmp/ahoj


# chmod +x /mnt/tmp/ahoj

# /mnt/tmp/ahoj
bash: /mnt/tmp/ahoj: Permission denied


# bash /mnt/tmp/ahoj
ahoj

Jako ten soubor muze bejt porad includnutej a kdyz ho zavolas z jine PWD, tak to spustit normalne jde, takze to ochrana je spis takova pseudo ..