Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam,
jakie macie zdanie na temat izolacji serwerów dns, httpd, mysql. Kiedy wystarczy zamknąć dany serwer w klatce chroot, a kiedy należy do tego zaprzęgnąć LXC?
Offline
To zależy od konkretnej maszyny, na pojedynczym serwerze spokojnie wystarczy ACL jak np Apparmor albo Selinux, względnie Grsec ACL.
Jak ktoś koniecznie chce chrooty, to też ma kilka opcji, jest standardowy chroot, który już dawno wyczerpał większość swoich zalet, i praktycznie nie wykracza poza to, co można osiągnąć Apparmorem czy SElinuxem, jest Chroot wzmocniony funkcjami Grsec:
CONFIG_GRKERNSEC_CHROOT=y CONFIG_GRKERNSEC_CHROOT_MOUNT=y CONFIG_GRKERNSEC_CHROOT_DOUBLE=y CONFIG_GRKERNSEC_CHROOT_PIVOT=y CONFIG_GRKERNSEC_CHROOT_CHDIR=y CONFIG_GRKERNSEC_CHROOT_CHMOD=y CONFIG_GRKERNSEC_CHROOT_FCHDIR=y CONFIG_GRKERNSEC_CHROOT_MKNOD=y CONFIG_GRKERNSEC_CHROOT_SHMAT=y CONFIG_GRKERNSEC_CHROOT_UNIX=y CONFIG_GRKERNSEC_CHROOT_FINDTASK=y CONFIG_GRKERNSEC_CHROOT_NICE=y CONFIG_GRKERNSEC_CHROOT_SYSCTL=y CONFIG_GRKERNSEC_CHROOT_CAPS=y # CONFIG_GRKERNSEC_CHROOT_INITRD is not set CONFIG_GRKERNSEC_CHROOT_EXECLOG=y
które z niego robią klatkę twardszą, niż LXC, i wreszcie jest wirtualizacja.
Ja osobiście zazwyczaj używam Grsec/Apparmor, i jeszcze problemów z tymi modułami nie miałem, powyżej tego brałbym od razu wirtualizację KVM, zamiast zawracać sobie głowę chrootami na sterydach w typie LXC.
Pozdro
;-)
Offline
Istnieje spora szansa, że potencjalnemu włamywaczowi, który dostanie się do kontenera LXC, uda się wejść na główny system?
Offline
Troszkę trudniej, niż chroot, trochę łatwiej, niż chroot+grsec.
przy czym to zależny od konkretnych dziur i podatności w systemie,
nawet w wirtualizacji XEN i KVM pojawiały się dziury, pozwalające się wbić na roota gospodarza z poziomu systemu gościa.
Jak naprawdę chcesz bezpieczny serwer, to tylko grsec, który z systemem ACL RBAC działa powyżej konta root, ograniczając również uprawnienia roota.
SElinuxa czy Apparmora zazwyczaj można wyłączyć z poziomu konta root.
Co prawda w Selinuxie da się obciąć konto root do poziomu zbliżonego do Grsec RBAC, ale gimnastyki w SElinxie z tym jest tyle, ze już wolałbym się prawą piętą za lewym uchem podrapać.
Natomiast moda na LXC czy wirtualizację wzięła się z tego, że w systemie "cukierkowej ochrony" serwery nieraz obrywały, chroot problemu nie rozwiązywał, i LXC czy OpenVZ też do końca sprawy nie rozwiązuje, choć poprawia bezpieczeństwo względem standardowego systemu.
Przy wirtualizacji czy kontenerach masz nie jeden "cukierkowy system" tylko dwa, gospodarza i gościa.
Roboty z tym 3 razy więcej niż z grseciem, a rezultat w mojej opinii mniejszy niż z Grsec z sensownym Grsec- ACL+Apparmor (profile dla "krytycznych usług")+cgroup (zasoby systemowe).
Wtedy globalna polityka bezpieczeństwa, której nie można zmienić z konta root bez uzyskania roli admin w RBAC, jest realizowana przez grsec, bardziej szczegółowe profile ze śliaśnymi zmiennymi i regexami można dla poszczególnych programów robić w Apparmorze, a pamięć, procek, dysk - to już Cgroup.
Ostatnio edytowany przez Jacekalex (2014-07-10 10:58:07)
Offline
[quote=Pavlo950]A ja mam pytanie: po co?
Jeśli ma się trochę lepszą maszynę, to czy nie lepiej wykorzystać pełną wirtualizację, np qemu?[/quote]
Myślę, że lepiej i to w firmie stosujemy. Jednak mam braki w kwestii lxc, grsec itd., bo nigdy nie miałem potrzeby tego stosować, teraz też nie -od tak, robię testy na kebabie od ovh.
A gdy na jednym serwerze pracuje wiele aplikacji (np. nginx+phpfpm, mysql)+do tego logują się na niego zwykli użytkownicy, aby przesyłać pliki do stron; czy zastosowanie chroot+grsec dla każdej z aplikacji z osobna oraz dodatkowy chroot+grsec dla samych użytkowników oraz całkowite porzucenie lxc wydaje się dobrym rozwiązaniem?
Ostatnio edytowany przez HaPe (2014-07-10 10:55:50)
Offline
Chroot? to przeniesienie roota do innego katalogu głównego.
Jak koniecznie chcesz, to owszem, można, robiąc globalny system ACL osiągasz podobny efekt, przy odpowiedniej szczegółowości polityki.
Chroot z grseciem obcina tonę różnych możliwości eskalacji uprawnień.
Skąd się wzięła taka straszna moda na wirtualizacje czy LXC?
Z systemu plików /proc i /sys, gdzie można się dostać do różnych ustawień systemowych i procesów roota.
Grseciem da się to obciąć nawet skuteczniej, niż przy LXC/OpenVZ,
i to nawet bez RBAC/ACL.
Chroot chroniony przez grsec:
Debian Jessie czw lip 10 11:03:36 localhost : / root ~> whoami root Debian Jessie czw lip 10 11:03:41 localhost : / root ~> ping dns ping: icmp open socket: Operation not permitted Debian Jessie czw lip 10 11:03:59 localhost : / root ~> ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 25573 0.0 0.0 19712 3628 ? S 11:03 0:00 /bin/bash -i root 25777 0.0 0.0 19080 2640 ? R+ 11:05 0:00 ps aux Debian Jessie czw lip 10 11:05:13 localhost : / root ~> touch test Debian Jessie czw lip 10 11:05:56 localhost : / root ~> chattr +i test chattr: Operacja niedozwolona podczas ustawiania flag test root ~> chmod 4755 test chmod: nie można zmienić uprawnień do „test”: Brak dostępu
Wyłączone - chattr, ustawianie bitów suid i sgid, socketów icmp, zakaz montowania z poziomu chroota, i kilka innych przyjemności.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-07-10 11:11:29)
Offline
Robiąc odrębnego chroota na aplikacje web (nginx, php) lepiej skopiować tylko potrzebne liby, binarki czy lepiej postawić przez debootstrap debiana w debianie i na nim z paczek zainstalować odpowiednią aplikację? Stosując debootstrap w pewnym stopniu ułatwiam sobie pracę w systemie, ponieważ nie ma potrzeby kopiowania plików, co jest dobre w przypadku wykonania ewentualnych aktualizacji.
Offline
Jak chcesz, możesz kopiować liby -jailkit tutaj sprawdza się grzecznie, możesz skopiować system, i aktualizować go bezpośrednio w chroocie.
Wtedy masz cięższe te chrooty, i większe ryzyko, bo w całym systemie jest więcej softu, niż w systemie typu absolutne minimum, a miej softu, to też mniej dróg ataku.
Możliwości masz setki, różnych skryptów automatyzujących też.
Serwer jest tylko tak bezpieczny i stabilny, jak jego Administrator kumaty,
całość zależy od tego, jak wszystko zaprojektujesz i skonfigurujesz.
Offline
HaPe - ubuntu bardzo dobrze wspiera LXC. Z chrootem bedziesz mial duzooo roboty. LXC bardzo dobrze sie sprawdza z grsec, rbackiem i apparmorem, ktory nadzoruje prace programow za pomoca LXC, ktory pokaze ci to wklepujac aa-status, dlatego bralbym ubuntu bo maja wlasne templatki pod LXC. Jezeli nie bedziesz nikomu dawal roota w lxc to nie bedziesz mial zadnych problemow. Niestety do nie dawna z LXC mozna bylo wyjsc do hosta tym ktorzy mieli roota w lxc. Ja bym szedl w ta strone tym bardziej, ze projekt zapowiada sie interesujaco, napewno bedzie wsparcie ze strony devow Grsecurity dla LXC co zreszta wspominali cos tam na Twiterze, wiec chyba nie ma sie nad czym zastanawiac. Nastepnie instalowany jest minimalistyczny system, w ktorym nie ma nawet nano, wiec burdelu tam nie uswiadczysz. Mozesz robisz snapshoty i je powielac, nie ma co sie pier... z chrootem, ktorego przeznaczenie nie sluzylo do separacji z dostepem do shella jak to autor napisal. Dodam, ze instalacja pod ubuntu jest trywialna, poradzisz sobie bez problemu.
P.S
Jest jeszcze vserver-grsecurity :D
Ostatnio edytowany przez bryn1u (2014-07-10 23:55:12)
Offline
Dzięki za wsparcie, testy jutro :)
PS Twoim zdaniem, robiąc zwykły shell dla znajomych, aplikacje różnego typu zamykam w kontenerach lxc dla bezpieczeństwa, zaś dla samych użytkowników logujących się do serwera zastosować jaila czy odrębny lxc?
Co będzie bardziej praktyczne: folder ze stronami www w kontenerze lxc z nginx, a użytkownikom w ich katalogach domowych porobię dowiązania czy pliki stron w katalogach domowych, a do kontenera lxc dowiążę odpowiednio foldery z stronami z /home?
Do zarządzania vhostami napisałem sobie coś w stylu satana z rootnode. User jest w stanie samemu je dodawać.
Ostatnio edytowany przez HaPe (2014-07-11 00:06:12)
Offline
884
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 00:54:41)
Offline
Pogubiles się trochę. Nie wiem co maszyna myśli mówiąc jaila. Ja uzwam jaila pod FreeBSD i dla mnie nie ma lepszego rozwiązania. Zrób lxc dla uzykownikow wraz z www drugi lxc dla samych baz MySQL.
Offline
Jeśli dla userów stworzę odrębny lxc to czy będę mógł dla nich też stosować reguły rbac?
Offline
nie wiem czy rbac nie jest wspolny dla wszystkich. Nie daje sobie reki obciac. Po drugie RBAC obsluguje tylko userow a nie grupy, wiec dla kazdego usera bedziesz musial pisac nowa regulke albo powielac od starego usera.
___
Tutaj masz moj temat z grsec development powinno ci dac odpowiedz.
http://forums.grsecurity.net/viewtopic.php?f=5&t=3912
Offline
nie wiem czy rbac nie jest wspolny dla wszystkich. Nie daje sobie reki obciac. Po drugie RBAC obsluguje tylko userow a nie grupy, wiec dla kazdego usera bedziesz musial pisac nowa regulke albo powielac od starego usera.[/quote]
Rola domyślna dla wszystkich:
http://en.wikibooks.org/wiki/Grsecurity/The_RBAC_System#Default_Role
Rola dla grupy:
http://en.wikibooks.org/wiki/Grsecurity/The_RBAC_System#Group_Roles
[b]RTFM[/b]
Kłopot polega tylko na tym, że grsec ze względów bezpieczeństwa nie obsługuje zmiennych $USER i $HOME w RBAC.
Inna sprawa, że to problem dla kogoś, kto nie wie o istnieniu standardowych uprawnień i ACL w Linuxie, i chce stosować RBAC, jakby nie było poleceń [b]chmod[/b], [b]setfacl[/b] i [b]chattr[/b].
Do tego można dla pacjentów wyłączyć:Kod:
CAP_FOWNER CAP_SETPCAP CAP_LINUX_IMMUTABLE CAP_CHOWN CAP_SETUID CAP_SETGID CAP_SYS_ADMINw roli Default,
i ustawićKod:
umask 0077w [b]/etc/profile[/b] wtedy żaden pacjent nawet kijem od szczotki nie ruszy plików innego pacjenta.
W ogóle dla pacjentów najlepiej wyłączyć zdecydowaną większość, o ile nie wszystkie uprawnienia capabilities.
Sznurki:
http://en.wikibooks.org/wiki/Grsecurity/The_RBAC_System#Capability_Restrictions
http://www.gentoo.org/proj/pl/hardened/capabilities.xml
W RBAC i Apparmorze dla każdego procesu z osobna można wyłączać capabilities, można też dla każdej binarki na dyziu ustalić osobne uprawnienia capabilities używając poleceniaKod:
setcapnp:
Kod:
ls -l `which tcpdump` -rwxr-xr-x 1 root root 942720 06-14 03:10 /usr/sbin/tcpdump getcap `which tcpdump` /usr/sbin/tcpdump = cap_net_raw+epJak pacjenci mają np trzy dostępne powłoki systemowe, bash, zsh i csh, to można też te powłoki ogarnąć profilami Apparmora, w którym można się bawić regexami zgodnymi z pcre, zmienną [b]${HOME}[/b] czy instrukcją [b]owner[/b].
Mając razem Apparmora i RBAC, macie taką plastelinę, że można cuda robić, a konfiguracja jest jakieś 5 razy prostsza, niż SElinuxa. ;)
Pozdro
;-)Ostatnio edytowany przez Jacekalex (2014-07-11 15:26:05)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
Czyli w praktyce jednocześnie możemy sotoswać grsecurity (rbac) oraz apparmor?
Offline
Oczywiście, Grsecurity istnieje obok domyślnego system LSM a nie zamiast.
LSM - czyli Linux Security Modules, tam można używać Apparmora, Smack, Tomoyo lub SElinuxa.
Jedyny wyjątek, to użycie [SElinuxa|TOMOYO] i RBAC, nie polecany (choć możliwy),
bo po prostu jest z tym ciężki bajzel, dublują się poszczególne właściwości i oba systemy mogą się łatwo tak zapętlić, że system operacyjny potem jest nie do użytku.
Sznurek:
http://en.wikibooks.org/wiki/Grsecurity/The_RBAC_System#Limitations_of_Any_Access_Control_System
Elegancko można zrobić globalną domyślną politykę w RBAC, a dla poszczególnych procesów dopieścić ją szczegółowo profilami Apparmora, które zapewniają dużo większą elastycznosć, niż RBAC, ale praktycznie nie ma w Apparmorze łatwej opcji globalnej polityki dla całego systemu.
Przy okazji na poziomie RBAC możemy mocno ograniczyć, ale nie wyeliminować całkowicie możliwości zarządzania polityką apparmora przez roota.
Po prostu zarządzanie Apparmorm może wymagać roli Admin w RBAC,
a do niej potrzebne jest osobne hasło, obrabiane i przechowywane przez Grsecurity.
Należy tylko pamiętać, ze obecnie Apparmor sięgnął wersji 3.0 w jaju, ale userspace jest w wersji Apparmor 2.4 (niezależnie od numerka), także działa tam tylko podstawowa funkcjonalność, nie działa przez to jeszcze między innymi network_rules i ipc_rules.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-07-11 15:49:10)
Offline
Zapytam jeszcze o cgroup. Czy istnieje możliwość takiego ustawienia limitu pamięci, aby polecenie free w kontenerze lxc zwracało przyznany limit a nie wolumen pamięci, który przypisany jest do całego serwera?
Offline
W LXC z tym może być problem, bo to nowy "chroot na sterydach",
w KVM maszyna wie tylko o takiej pamięci, jaką dostała przy uruchomieniu.
Względnie w zwykłym durnym chroocie możesz nie montować /proc,
i masz taki rezultat:
free -m Error: /proc must be mounted To mount /proc at boot you need an /etc/fstab line like: proc /proc proc defaults In the meantime, run "mount proc /proc -t proc"
Możesz też zablokować w RBAC dostęp do pliku /proc/meminfo, z takim samym skutkiem.
Wtedy system w LXC w ogóle nie będzie wiedział, ile ma RAM.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-07-13 15:35:58)
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00117 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.138.32.53' WHERE u.id=1 |
0.00083 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.138.32.53', 1732825593) |
0.00020 | SELECT * FROM punbb_online WHERE logged<1732825293 |
0.00062 | SELECT topic_id FROM punbb_posts WHERE id=271287 |
0.00108 | SELECT id FROM punbb_posts WHERE topic_id=26112 ORDER BY posted |
0.00058 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26112 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00086 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26112 ORDER BY p.id LIMIT 0,25 |
0.00083 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26112 |
Total query time: 0.00635 s |