<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.witalis.net</title>
	<atom:link href="http://blog.witalis.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.witalis.net</link>
	<description>technotes</description>
	<lastBuildDate>Sun, 15 Aug 2010 11:58:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>LVM2 &#8211; snapshot merge</title>
		<link>http://blog.witalis.net/?p=452</link>
		<comments>http://blog.witalis.net/?p=452#comments</comments>
		<pubDate>Sun, 15 Aug 2010 11:57:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[lvm]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=452</guid>
		<description><![CDATA[Efekt przerwy urlopowej wyraźnie wpłynął na częstotliwość pojawiania się nowych wpisów. Na rozłąkę z tą blogową ciszą niech posłuży temat dotyczący LVM i jego usprawnienia w zakresie snapshotów&#8230;

Często na łamach bloga nawiązywałem do systemu ZFS, w którym to snapshoty i ich zapisywalne odpowiedniki czyli clone&#8217;y były szybkie i bardzo użyteczne. Użyteczność ich w systemie OpenSolaris [...]]]></description>
			<content:encoded><![CDATA[<p>Efekt przerwy urlopowej wyraźnie wpłynął na częstotliwość pojawiania się nowych wpisów. Na rozłąkę z tą blogową ciszą niech posłuży temat dotyczący LVM i jego usprawnienia w zakresie snapshotów&#8230;<br />
<span id="more-452"></span><br />
Często na łamach bloga nawiązywałem do systemu ZFS, w którym to snapshoty i ich zapisywalne odpowiedniki czyli clone&#8217;y były szybkie i bardzo użyteczne. Użyteczność ich w systemie OpenSolaris podkreślało rozwiązanie boot enviroment (beadm), które umożliwiało łatwe przywrócenie stanu systemu do tego sprzed update&#8217;a (patrz. pkg image-update). Wraz z wprowadzeniem dystrybucji Fedora 13, doczekaliśmy się i w systemie Linux podobnej funkcjonalności promowanej wraz z eksperymentalnym jeszcze systemem plików Btrfs [1]. Mało jednak wspomniane jest o rozwiązaniu tego problemu z systemem LVM, chodzi tutaj o rozszerzenie ,,merge&#8221; umożliwiające cofnięcie stanu wolumenu do wybranego snapshot&#8217;a. Funkcjonalność ta pojawia się wraz z wprowadzeniem kernel&#8217;a 2.6.33.<br />
Wyobraźmy sobie sytuację kiedy chcemy zabezpieczyć systemu przed ważnym update&#8217;em, tak aby w razie niepowodzenia łatwo przywrócić stan systemu sprzed zmiany.<br />
Zanim rozpoczeniemy ww. update&#8217;em wykonamy snapshot&#8217;a wolumenu, którego dotyczyć będzie zmiana:</p>
<pre><span style="color: #ff9900;"># touch /etc/before-update</span></pre>
<pre><span style="color: #ff9900;"># lvcreate -L 2G -s -n snap1 vg_fedora13/lv_root 

</span></pre>
<p>następnie wykonujemy ww. update, który dla uproszczenia zilustrowałem jako skasowanie pliku /etc/before-update ;)</p>
<pre><span style="color: #ff9900;"># rm /etc/before-update

</span></pre>
<p>po restarcie systemu okazuje się, że musimy szybko cofnąc zmiany:</p>
<pre><span style="color: #ff9900;"># lvconvert --merge vg_fedora13/snap1</span></pre>
<pre><span style="color: #ff9900;">Can't merge over open origin volume</span></pre>
<pre><span style="color: #ff9900;">Merging of snapshot snap1 will start next activation.

</span></pre>
<p>komunikat informuje, że operacji na podmontowanym systemie plików jest niemożliwia w związku z tym restartujemy system i sprawdzamy:</p>
<pre><span style="color: #ff9900;"># ls /etc/before-update </span></pre>
<pre><span style="color: #ff9900;">/etc/before-update 

</span></pre>
<p>operacja się udała mamy stan systemu sprzed zmian. Jednak kolejny snapshot kończy się komunikatem:</p>
<pre><span style="color: #ff9900;">Snapshots of an origin that has a merging snapshot is not supported. 

</span></pre>
<p>wówczas wystarczy aktywować ponownie dany wolumen:</p>
<pre><span style="color: #ff9900;">lvchange -ay vg_fedora13/lv_root 

</span></pre>
<p>Tym prostym sposobem otrzymujemy szybkie narzędzie do cofania zmian, należy jednak pamiętać o tym, że dla LVM wykonywanie snapshot&#8217;ów i ich utrzymywanie może odbijać się negatywnie na szybkości działania w przeciwieństwie do systemu ZFS i Btrfs opartych o rozwiązanie COW i pewnie ta idea przyświecała twórcom wspomianego narzędzia dla Fedory.</p>
<p>[1] <a href="http://fedoraproject.org/wiki/Features/SystemRollbackWithBtrfs" target="_blank">http://fedoraproject.org/wiki/Features/SystemRollbackWithBtrfs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=452</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SELinux &#8211; materiały konferencyjne</title>
		<link>http://blog.witalis.net/?p=443</link>
		<comments>http://blog.witalis.net/?p=443#comments</comments>
		<pubDate>Thu, 08 Jul 2010 20:11:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[selinux]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=443</guid>
		<description><![CDATA[Tegoroczna konferencja Red Hat Summit dobiegła końca, pozostał po niej ślad w postaci prezentacji i nagrań wideo dostępnych pod adresem: http://www.redhat.com/promo/summit/2010/presentations/. Tematy, które królowały na konferencji to z pewnością długo oczekiwana wersja RHEL 6 oraz platforma RHEV, jednak nie obyło się też bez omówienia technologii SELinux.

Kontynuując serię wpisów o SELinux warto wspomnieć o prezentacji, która [...]]]></description>
			<content:encoded><![CDATA[<p>Tegoroczna konferencja Red Hat Summit dobiegła końca, pozostał po niej ślad w postaci prezentacji i nagrań wideo dostępnych pod adresem: <a href="http://www.redhat.com/promo/summit/2010/presentations/">http://www.redhat.com/promo/summit/2010/presentations/</a>. Tematy, które królowały na konferencji to z pewnością długo oczekiwana wersja RHEL 6 oraz platforma RHEV, jednak nie obyło się też bez omówienia technologii SELinux.</p>
<p><span id="more-443"></span></p>
<p>Kontynuując serię wpisów o SELinux warto wspomnieć o prezentacji, która opisuje nowości w tym zakresie dla RHEL 6:</p>
<p><a href="http://www.redhat.com/promo/summit/2010/presentations/summit/whats-next/thurs/dwalsh-2-gpa/GrandfathersSELinux.pdf" target="_blank">http://www.redhat.com/promo/summit/2010/presentations/summit/whats-next/thurs/dwalsh-2-gpa/GrandfathersSELinux.pdf</a></p>
<p>Kolejna prezentacja to podstawy  SELinux&#8217;a ujęte w ciekawej formie:</p>
<p><a href="http://www.redhat.com/promo/summit/2010/presentations/summit/decoding-the-code/wed/tcameron-1020-selinux/SELinuxMereMortals.pdf " target="_blank">http://www.redhat.com/promo/summit/2010/presentations/summit/decoding-the-code/wed/tcameron-1020-selinux/SELinuxMereMortals.pdf </a></p>
<p>Na sam koniec porcja dla tych, którzy chcą przećwiczyć sobie obsługę SELinux&#8217;a:</p>
<p><a href="http://www.redhat.com/promo/summit/2010/presentations/taste_of_training/Summit_2010_SELinux.pdf" target="_blank">http://www.redhat.com/promo/summit/2010/presentations/taste_of_training/Summit_2010_SELinux.pdf</a></p>
<p>Autorem ww. prezentacji jest Dan Walsh, jego adres bloga znajdziecie w boksie ,,Czytane&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=443</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SELinux &#8211; confined users</title>
		<link>http://blog.witalis.net/?p=423</link>
		<comments>http://blog.witalis.net/?p=423#comments</comments>
		<pubDate>Sat, 26 Jun 2010 18:39:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[selinux]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=423</guid>
		<description><![CDATA[Kolejny wpis z serii SELinux w tytule. Poprzedni wpis koncentrował się na ograniczaniu działania konkretnej aplikacji, tym razem na celownik trafiają użytkownicy.
Począwszy od Fedory 9 mamy do czynienia z pojęciem confined users, są to użytkownicy, którzy przypisani mają konkretne role, a one z kolei są ściśle kontrolowane przez SELinux. Wyróżniamy w systemie Fedora 13 następujących [...]]]></description>
			<content:encoded><![CDATA[<p>Kolejny wpis z serii SELinux w tytule. Poprzedni wpis koncentrował się na ograniczaniu działania konkretnej aplikacji, tym razem na celownik trafiają użytkownicy.</p>
<p><span id="more-423"></span>Począwszy od Fedory 9 mamy do czynienia z pojęciem confined users, są to użytkownicy, którzy przypisani mają konkretne role, a one z kolei są ściśle kontrolowane przez SELinux. Wyróżniamy w systemie Fedora 13 następujących ..confined users&#8221;:</p>
<ul>
<li>guest_u</li>
<li>xguest_u</li>
<li>user_u</li>
<li>staff_u</li>
<li>sysadm_u</li>
<li>git_shell_u</li>
</ul>
<p>Użytkownik, który mam przypisaną rolę guest_r, może się zalogować do systemu, natomiast nie może wykonywać programów w swoim katalogu domowym, nie może wykonywać programów typu suid (nie przełączy się np. poprzez su), nie może nawiązywać połączeń sieciowych. Rozszerzeniem roli guest_r jest rola xguest_r, jak nie trudno zgadnąć może zalogować się do serwera X-ów oraz może łączyć się ze światem za pomocą tylko i wyłączenie przeglądarki firefox. Reszta ról omówiona jest pod adresem [1]. Zostaje tylko rola git_shell_u i ją też zapewne łatwo zaklasyfikować, jasności nabierze po wykonaniu polecenia:</p>
<pre><span style="color: #ff9900;">sesearch --allow -s git_shell_t 

</span></pre>
<p>zaprezentuje ono wszystkie reguły allow dla danego typu.</p>
<p>Przypisanie konkretnej roli do istniejącego konta wykonać można następująco:</p>
<pre><span style="color: #ff9900;">usermod -Z guest_u nazwa_uzytkownika

</span></pre>
<p>sprawdzenie czy przypisanie się powiodło:</p>
<pre><span style="color: #ff9900;">semanage login -l

</span></pre>
<p>Rola guest_r jest dobrym punktem wyjścia do tworzenia nowych ról np. poprzez dodawania kolejnych uprawnień. Załóżmy, że nasz nieszczęśnik z rolą guest_r ma mieć możliwość nawiązywania połączeń na portach http (m.in. 80, 443).  Do tego celu podobnie jak w przykładzie aplikacji w poprzednim wpisie wykorzystamy tryb permissive oraz audit.log. Po próbie połączenie wygenerowany został wpis audytu na bazie którego stworzymy nowy moduł rozszerzający uprawnienia guest_r:</p>
<pre><span style="color: #ff9900;">cat /var/log/audit/audit.log | audit2allow -m guestenh &gt; guestenh.te

</span></pre>
<p>po skompilowaniu i dodaniu modułu, użytkownik z guest_r będzie mógł ustawiać połączenia do portów zdefiniowanych jako http_port_t. Należy pamiętać, że tym sposobem rozszerzyliśmy sobie niebezpiecznie std. rolę guest_r, korzystniej jest stworzyć nową rolę na bazie roli guest_r. Uczynić tą można najprościej graficzną nakładką na SELinux&#8217;a system-config-selinux.</p>
<p>Opisywana rola guest_u znacząco ogranicza poczynania nieuprawnionych użytkowników, można ją dowolnie rozbudowywać. Stanowi ona dobry punkt wyjściowy do stworzenia użytkownika typu kiosk ( patrz. komputery ogólnie dostępne dla wszystkich )  lub też służyć może do bezpiecznego surfowania po internecie (patrz. xguest_u) np. złośliwy kod pobrany z internetu nie będzie miał szansy się wykonać, podobnie jak kilka wydawać by się mogło std. poleceń:</p>
<pre><span style="color: #ff9900;">[guest@fedora13 ~]$ id -Z</span></pre>
<pre><span style="color: #ff9900;">guest_u:guest_r:guest_t:s0</span></pre>
<pre><span style="color: #ff9900;">[guest@fedora13 ~]$ w</span></pre>
<pre><span style="color: #ff9900;">Segmentation fault (core dumped)</span></pre>
<pre><span style="color: #ff9900;">[guest@fedora13 ~]$ top</span></pre>
<pre><span style="color: #ff9900;">Segmentation fault (core dumped)</span></pre>
<pre><span style="color: #ff9900;">[guest@fedora13 ~]$ dmesg</span></pre>
<pre><span style="color: #ff9900;">klogctl: Permission denied</span></pre>
<pre><span style="color: #ff9900;">[guest@fedora13 ~]$ less /var/log/messages</span></pre>
<pre><span style="color: #ff9900;">/var/log/messages: Permission denied</span></pre>
<pre><span style="color: #ff9900;">[guest@fedora13 ~]$ su - </span></pre>
<pre><span style="color: #ff9900;">Command not found.

 </span></pre>
<p>[1]  <a href="http://fedoraproject.org/wiki/Test_Day:2009-10-20" target="_blank">http://fedoraproject.org/wiki/Test_Day:2009-10-20</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=423</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SELinux &#8211; tworzenie własnej polityki</title>
		<link>http://blog.witalis.net/?p=367</link>
		<comments>http://blog.witalis.net/?p=367#comments</comments>
		<pubDate>Fri, 18 Jun 2010 12:30:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[selinux]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=367</guid>
		<description><![CDATA[SELinux umożliwia lepszą kontrolę nad aplikacjami, bez ingerencji w kod danej aplikacji – tak najogólniej brzmi jedno z głównych założeń zaimplementowanego w Linux’ie mechanizmu zabezpieczeń. Sposób realizacji owej lepszej kontroli nad aplikacjami opiera się o implementację MAC (Mandatory Access Control). Otóż każdemu obiektowi w systemie (plik, proces, port etc.) jest przypisany do konkretny typ (label) [...]]]></description>
			<content:encoded><![CDATA[<p>SELinux umożliwia lepszą kontrolę nad aplikacjami, bez ingerencji w kod danej aplikacji – tak najogólniej brzmi jedno z głównych założeń zaimplementowanego w Linux’ie mechanizmu zabezpieczeń. Sposób realizacji owej lepszej kontroli nad aplikacjami opiera się o implementację MAC (Mandatory Access Control). Otóż każdemu obiektowi w systemie (plik, proces, port etc.) jest przypisany do konkretny typ (label) mając tak zdefiniowaną listę możemy napisać polityki, które np. konkretnemu procesowi (dla przeglądarki www firefox_t) dadzą dostęp do zapisu tylko do określonych plików (np. domowe pliki użytkowników user_home_t) bez względu na uprawnienia dostępu DAC (rwx). Postaram się przedstawić sposób tworzenia polityki dla prostego skryptu oraz opisać korzyści płynące z tego tytułu…</p>
<p><span id="more-367"></span></p>
<p>SELinux najlepiej się ma w dystrybucjach ,,redhatopodobnych” Fedora, RedHat, CentOS. Na bazie tych dystrybucji i oferowanych przez nie narzędzi zbuduję politykę, która ograniczy ,,szkodliwe” działanie pewnego skryptu. Za nim jednak przejdę do tworzenia polityki opiszę krótki scenariusz jak może dość do nadużycia z owym tajemniczym skryptem w tle.</p>
<p>Załóżmy sytuację, w której nasz skrypt generuje poufny raport, który dostępny ma być tylko dla wybranych osób. Raport zapisywany jest tylko w wybranych katalogach domowych użytkowników. Co więcej autor skryptu poszedł po najmniejszej linii oporu określając root’a jako użytkownika z poziomu, którego można tylko uruchamiać skrypt. Załóżmy, że wychodzi nowa wersja skryptu do pobrania z internetu, w tej chwili do gry wchodzi napastnik, który kieruje administratora na spreparowaną stronę zawierającą dziurawą wersję skryptu. W efekcie napastnik, który jest autorem dziurawej wersji skryptu uzyskuje dostęp do poufnego raportu, który zapisuje się też w jego domowym katalogu oraz  zdobywa hasła np. z pliku /etc/shadow. W tradycyjnym podejściu bez uciekania się do SELinux’a taka sztuka się powiedzie, co jednak się stanie, gdy opiszemy działanie skryptu przy pomocy konkretnej polityki…</p>
<p>Przystępując do napisania polityki możemy skorzystać z narzędzia sepolgen:</p>
<pre><span style="color: #ff9900;"># sepolgen -t 3 getresults

</span></pre>
<p>getresults to nazwa skryptu/programu.</p>
<p>Wynikiem polecenia sepolgen bedą cztery pliki, główny plik zawierający polityki i który to będziemy edytować to getresults.te.</p>
<p>Skrypt getresult będzie działał w domenie (typ) getresults_t a plik wykonywalny będzie oznaczony label’em getresults_exec_t:</p>
<pre><span style="color: #ff9900;">type getresults_t;</span></pre>
<pre><span style="color: #ff9900;">type getresults_exec_t;</span></pre>
<pre><span style="color: #ff9900;">application_domain(getresults_t, getresults_exec_t);

</span><span style="color: #ff9900;"> </span></pre>
<p>standardowo użytkownik root jak i zresztą każdy inny użytkownik działa w domenie unconfined_t, zatem po uruchomieniu powinien taki proces powinien przejść do domeny skryptu getresults_t:</p>
<pre><span style="color: #ff9900;">role unconfined_r types getresults_t;</span></pre>
<pre><span style="color: #ff9900;">type_transition unconfined_t getresults_exec_t:process getresults_t;</span></pre>
<pre><span style="color: #ff9900;">allow unconfined_t getresults_t:process transition;

</span><span style="color: #ff9900;"> </span></pre>
<p>skrypt getresults wyniki powinien zapisywać w katalogu ( i plikach) oznaczonych label&#8217;em getresults_t:</p>
<pre><span style="color: #ff9900;">allow getresults_t getresults_t:file { write getattr open create };</span>
<span style="color: #ff9900;">allow getresults_t getresults_t:dir { write add_name };

</span><span style="color: #ff9900;"> </span></pre>
<p>użytkownik root niestety nie jest w stanie zmienić katalogu na nowy label getresults_t w tym celu należy:</p>
<pre><span style="color: #ff9900;">allow getresults_t getresults_t:file { write getattr open create };</span>
<span style="color: #ff9900;">allow getresults_t getresults_t:dir { write add_name };</span>
<span style="color: #ff9900;"> </span>
</pre>
<p>wspomniane w pliku inne domeny (np. unconfined_t) muszą być uwzględnione w:</p>
<pre><span style="color: #ff9900;">require {
type unconfined_t;
type proc_t;
type user_devpts_t;
type fs_t;
}

</span></pre>
<p>tak przygotowane politykę możemy przekompilować i dodać do zestawu:</p>
<pre><span style="color: #ff9900;"># make -f /usr/share/selinux/devel/Makefile &amp;&amp; semodule -i getresults.pp</span>
<span style="color: #ff9900;">
</span><span style="color: #ff9900;"> </span></pre>
<p>następnie przełączamy SELinux’a w tryb Permissive (tj. raportuje i nie blokuje):</p>
<pre><span style="color: #ff9900;"># setenforce 0

</span><span style="color: #ff9900;"> </span></pre>
<p>analizujemy plik audytu /var/log/audit/audit.log po uruchomieniu skryptu getresults, jeżeli zauważymy jakieś informacje o blokadach wówczas:</p>
<pre><span style="color: #ff9900;"># audit2allow -i /var/log/audit/audit.log</span>
<span style="color: #ff9900;"> </span><span style="color: #ff9900;"> </span></pre>
<p>wygeneruje nam potrzebne wpisy do poprawnego zadziałania, dopisujemy je do pliku getresults.te oraz podnosimy wersję:</p>
<pre><span style="color: #ff9900;">policy_module(getresults,1.0.1)

</span></pre>
<p>oraz przekompilowujemy i upgrade’ujemy politykę:</p>
<pre><span style="color: #ff9900;"># make -f /usr/share/selinux/devel/Makefile &amp;&amp; semodule -u getresults.pp

</span><span style="color: #ff9900;"> </span></pre>
<p>ponownie uruchamiamy skrypt i analizujemy audit.log. Jeżeli nie ma już żadnych zastrzeżeń przełączamy się na tryb Enforcing:</p>
<pre><span style="color: #ff9900;"># setenforce 1</span>
<span style="color: #ff9900;"> </span><span style="color: #ff9900;">
</span><span style="color: #ff9900;"> </span></pre>
<p>Zobaczymy czy teraz skrypt getresults zapisze nam zawartość raportu i pliku shadow do nowej nieoznaczonej lokalizacji:</p>
<pre><span style="color: #ff9900;"># ./getresults
./getresults: line 4: /tmp/results: Permission denied</span>

<span style="color: #ff9900;">./getresults: line 5: /tmp/results: Permission denied</span><span style="color: #ff9900;">

</span></pre>
<p>okazuje się, że sztuka ta nawet z poziomu konta root’a się nie udaje. Skrypt zapisuje tylko dane do katalogu oznaczonego label’em getresults_t:</p>
<pre><span style="color: #ff9900;">ls -lZR
.:
drwxr-xr-x. root root unconfined_u:object_r:getresults_t:s0 results
./results:
-rw-r–r–. root root unconfined_u:object_r:getresults_t:s0 results</span>
<span style="color: #ff9900;"> </span></pre>
<p>Tym sposobem możemy się ustrzec przed błędami w programach, koszt jaki musimy ponieść to z pewnością czas na dostosowanie polityki do potrzeb konkretnej aplikacji. Na całe szczęście najpopularniejsze usługi dostępne w systemie Linux w szczególności w dystrybucjach redhatopodobnych mają już gotowy zestaw polityk. Nie mniej jednak zachęcam do zapoznania się z nimi tak, gdyż mogą nam posłużyć jako wzorce do napisania własnych polityk, które uchwycić mogą nietypowe programy w bezpiecznych domenach bez uciekania się do wyłączanie SELinux’ach lub przełączania go w tryb Permissive.</p>
<p>Zbiór informacji o SELinux:  <a href="http://selinuxproject.org/" target="_blank">http://selinuxproject.org/</a></p>
<p>Plik: <a href="http://blog.witalis.net/files/getresults.te" target="_blank">getresults.te</a></p>
<p>Skrypt: <a href="http://blog.witalis.net/files/getresults" target="_blank">getresults</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=367</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kilka sztuczek konsolowych</title>
		<link>http://blog.witalis.net/?p=359</link>
		<comments>http://blog.witalis.net/?p=359#comments</comments>
		<pubDate>Sun, 30 May 2010 12:33:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[inne]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=359</guid>
		<description><![CDATA[Tytułowe sztuczki to efekt poszukiwań wydajniejszych i szybszych metod uporania sie codziennymi zadaniami  administracyjnymi.
- pierwszy problem to jak przy pomocy ,,jednolinijkowca&#8221; a w zasadzie jednego polecenia porównać dwa katalogi:
diff -q -r /dir1 /dir2


owszem to samo zadanie można wykonać przy pomocy chociażby rsync&#8217;a lub skorzystać z systemów IDS chociażby tripwire,samhain.
- drugi problem to jak przysłać np. [...]]]></description>
			<content:encoded><![CDATA[<p>Tytułowe sztuczki to efekt poszukiwań wydajniejszych i szybszych metod uporania sie codziennymi zadaniami  administracyjnymi.</p>
<p><span id="more-359"></span>- pierwszy problem to jak przy pomocy ,,jednolinijkowca&#8221; a w zasadzie jednego polecenia porównać dwa katalogi:</p>
<pre><span style="color: #ff9900;">diff -q -r /dir1 /dir2

</span></pre>
<p>owszem to samo zadanie można wykonać przy pomocy chociażby rsync&#8217;a lub skorzystać z systemów IDS chociażby tripwire,samhain.</p>
<p>- drugi problem to jak przysłać np. plik z hostA do hostB nie wysycając całego dostępnego pasma oraz nie zużywając dużej ilości zasobów:</p>
<pre><span style="color: #ff9900;">hostA# gzip -c file.1 | pv -L &lt;limit_bajt/s&gt; &gt; /dev/tcp/&lt;hostb_ip&gt;/&lt;hostb_port&gt;</span></pre>
<pre><span style="color: #ff9900;">hostB# nc -l &lt;hostb_port | gunzip &gt; file.1

</span></pre>
<p>- trzeci problem jak w bash&#8217;u napisać skrypt, do którego argumenty podajemy w następujący sposób: &lt;nazwa_skryptu&gt; -a -b &lt;parm1&gt;:</p>
<pre><span style="color: #ff9900;">#!/bin/bash</span></pre>
<pre><span style="color: #ff9900;">
args=`getopt ab: $*`</span></pre>
<pre><span style="color: #ff9900;">
set -- $args</span></pre>
<pre><span style="color: #ff9900;">
for i do</span></pre>
<pre><span style="color: #ff9900;">
 case "$i" in</span></pre>
<pre><span style="color: #ff9900;"> -a) PARM1=1; shift ;;</span></pre>
<pre><span style="color: #ff9900;"> -b) PARM2=$2; shift; shift ;;</span></pre>
<pre><span style="color: #ff9900;"> --) shift; break ;;</span></pre>
<pre><span style="color: #ff9900;"> esac</span></pre>
<pre><span style="color: #ff9900;">
done</span></pre>
<pre><span style="color: #ff9900;">
echo "-a $PARM1"</span></pre>
<pre><span style="color: #ff9900;">echo "-b $PARM2"

</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=359</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache plus mod_security w wersji chroot</title>
		<link>http://blog.witalis.net/?p=354</link>
		<comments>http://blog.witalis.net/?p=354#comments</comments>
		<pubDate>Thu, 27 May 2010 17:39:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[inne]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[chroot]]></category>
		<category><![CDATA[mod_security]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=354</guid>
		<description><![CDATA[Jednym ze sposobów ochrony systemów jest wyizolowanie konkretnej usługi sieciowej, która w przypadku zdyskredytowania daje potencjalnemu napastnikowi niewielkie pole działania do przejęcia kontroli nad systemem. Owo wyizolowanie określane mianem chroot, jail w przypadku serwera Apache możemy wykonać przy pomocy modułu mod_security kojarzonego z firewall&#8217;em protokołu HTTP.

Chroot&#8217;owanie popularnych usług nie jest zadaniem łatwym, wymagane jest poznanie [...]]]></description>
			<content:encoded><![CDATA[<p>Jednym ze sposobów ochrony systemów jest wyizolowanie konkretnej usługi sieciowej, która w przypadku zdyskredytowania daje potencjalnemu napastnikowi niewielkie pole działania do przejęcia kontroli nad systemem. Owo wyizolowanie określane mianem chroot, jail w przypadku serwera Apache możemy wykonać przy pomocy modułu mod_security kojarzonego z firewall&#8217;em protokołu HTTP.</p>
<p><span id="more-354"></span></p>
<p>Chroot&#8217;owanie popularnych usług nie jest zadaniem łatwym, wymagane jest poznanie specyfiki działania konkretnego daemon&#8217;a, aby dostarczyć minimalne warunki do jego pracy. Czynności sprowadzają się do utworzenia nadrzędnego katalogu, który stanowić będzie przestrzeń root dla wybranej usługi, przegranie do utworzonego drzewa katalogów potrzebnych plików binarnych, wybranych bibliotek oraz podstawowych plików systemowych. Zrealizowanie takiej instalacji nastręcza często wielu kłopotów. Z pomocą przychodzi moduł mod_security, którego mało kto podejrzewa, że umożliwia on zrealizowanie szybkiego i łatwego chroot&#8217;a, do podstawowej instalacji wystarcza wpis:</p>
<pre><span style="color: #ff9900;">SecChrootDir /chroot

</span></pre>
<p>Minimalna konfiguracja mod_security jest możliwa dzięki odpowiedniemu podejściu, otóż  tuż po załadowaniu wszystkich wymaganych bibliotek i otwarciu deskryptorów plików m.in. log&#8217;u  dopiero wtedy apache przełącza się na zdefiniowane środowisko chroot. Oczywiście wymagane jest dodatkowo stworzenie lokacji m.in. dla pliku z numerem pid w gałęzi /chroot, takiej jak podana jest w pliku konfiguracyjnym i ew. wykonanie symlinka do lokalizacji pierwotnej, tj. do tej zawartej w pliku uruchomieniowym (np. /etc/initd./httpd) do poprawnego zastopowania usługi.</p>
<p>Tak zdefiniowana konfiguracja pozwalana na dostarczenia treści statycznej w przypadku zastosowania PHP w najpopularniejszym wydaniu dla Apache czyli mod_php, możemy natknąć się na kilka problemów:</p>
<p>- problem z resolve&#8217;owaniem nazw DNS&#8217;owych</p>
<p>problem ten da się łatwo okiełznać wystarczy dograć odpowiednie dynamiczne biblioteki, jakie biblioteki ? to łatwo dojedziemy korzystając z poleceń ldd lub/i strace. Dodatkowo do etc w /chroot dograć należy pliki hosts oraz resolv.conf  [1]</p>
<p>- problem z wysyłką mail&#8217;i</p>
<p>wystarczy skorzystać z mini-sendmail&#8217;a [2] specjalnie dostosowanego do środowiska chroot, umieścić go std. w lokalizacji /chroot/usr/sbin/sendmail. Sam  mini-sendmail nie wystarczy należy dograć do etc w /chroot pliki passwd (wystarczy wpis dot. samego apache&#8217;a), dodatkowo należy do bin  w /chroot dograć domyślną powłokę sh wraz z wymaganymi bibliotekami [1]</p>
<p>- problem z restartem apache&#8217;a w szczególności opcji graceful</p>
<p>niestety tego problemu nie udało mi się rozwiązać, może ktoś chętny podzieli się rozwiązaniem ? ;)</p>
<p>Informacje o występujących problemach standardowo znajdziemy w pliku error_log apache&#8217;a.</p>
<p>Tym prostym sposobem możemy w znaczący podnieść poziom bezpieczeństwa naszego systemu, oczywiście zachęcam dodatkowo do skorzystania z szeregu opcji filtrowania ruchu HTTP, do tego do czego mod_security przede wszystkim został stworzony.</p>
<p>[1] lista wymaganych bibliotek dla systemu CentOS 5.x i386, nie jest to z pewnościa minimalna wersja</p>
<pre><span style="color: #ff9900;">ld-2.5.so</span></pre>
<pre><span style="color: #ff9900;">ld-linux.so.2-&gt;ld-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libacl.so.1-&gt;libacl.so.1.1.0</span></pre>
<pre><span style="color: #ff9900;">libacl.so.1.1.0</span></pre>
<pre><span style="color: #ff9900;">libattr.so.1-&gt;libattr.so.1.1.0</span></pre>
<pre><span style="color: #ff9900;">libattr.so.1.1.0</span></pre>
<pre><span style="color: #ff9900;">libc-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libc.so.6-&gt;libc-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libdl-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libdl.so.2-&gt;libdl-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libnss_dns-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libnss_dns.so.2-&gt;libnss_dns-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libnss_files-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libnss_files.so.2-&gt;libnss_files-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libpthread-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libpthread.so.0-&gt;libpthread-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libresolv-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libresolv.so.2-&gt;libresolv-2.5.so</span></pre>
<pre><span style="color: #ff9900;">librt-2.5.so</span></pre>
<pre><span style="color: #ff9900;">librt.so.1-&gt;librt-2.5.so</span></pre>
<pre><span style="color: #ff9900;">libselinux.so.1</span></pre>
<pre><span style="color: #ff9900;">libsepol.so.1</span></pre>
<pre><span style="color: #ff9900;">libtermcap.so.2-&gt;libtermcap.so.2.0.8</span></pre>
<pre><span style="color: #ff9900;">libtermcap.so.2.0.8

</span></pre>
<p>[2] <a href="http://www.acme.com/software/mini_sendmail/" target="_blank">http://www.acme.com/software/mini_sendmail/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=354</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fwknop &#8211; dostęp do chronionych zasobów</title>
		<link>http://blog.witalis.net/?p=340</link>
		<comments>http://blog.witalis.net/?p=340#comments</comments>
		<pubDate>Sun, 16 May 2010 10:44:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[*bsd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[fwknop]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=340</guid>
		<description><![CDATA[Sposobów na dostęp do chronionych zasobów jest wiele wśród nich otwarte na zewnątrz porty (sic!), dostęp realizowany przez VPN lub selektywne otwieranie portów na żądanie. Ten ostatni sposób postaram się dzisiaj przedstawić trochę szerzej.

Mowa będzie o rozwiązaniu fwknop [1], które stanowi rozwinięcie metody port-knocking. W stosunku do standardowego rozwiązania ,,odpukiwania&#8221; określonych zamkniętych portów, fwknop wysła [...]]]></description>
			<content:encoded><![CDATA[<p>Sposobów na dostęp do chronionych zasobów jest wiele wśród nich otwarte na zewnątrz porty (sic!), dostęp realizowany przez VPN lub selektywne otwieranie portów na żądanie. Ten ostatni sposób postaram się dzisiaj przedstawić trochę szerzej.</p>
<p><span id="more-340"></span></p>
<p>Mowa będzie o rozwiązaniu fwknop [1], które stanowi rozwinięcie metody port-knocking. W stosunku do standardowego rozwiązania ,,odpukiwania&#8221; określonych zamkniętych portów, fwknop wysła tylko jeden zaszyfrowany niepowtarzalny pakiet SPA. W celu wygenerowania ,,otwierającego&#8221; pakietu SPA, musimy dodatkowo znać tajne hasło bądź posłużyć się kluczem GPG, w standardowej metodzie port-knocking wystarczyło tylko znać kombinację portów, tak samo jak wystarczyło prostym snifferem podsłuchać taką kombinację. Po pomyślnej akceptacji pakietu SPA wyłuskiwany jest adres IP nadawcy i modyfikowany jest na określony czas zestaw reguł netfilter/ipfw umożliwiając połączenie z wybraną usługą. Najczęściej stosowany jest scenariusz z ukryciem dostępu SSH, ja postaram się omówić metodę uzyskania dostępu do usługi działającej w chronionej sieci (tej samej, w której działa fwknopd).</p>
<p>Konfiguracja fwknopd sprowadza się do edycji dwóch plików: access.conf i fwknopd.conf.</p>
<p>W pierwszym pliku access.conf definiujemy dane potrzebne do uzyskania dostępu:</p>
<pre><span style="color: #ff9900;"># dopuszczalne adresy źródłowe
SOURCE: ANY;
# otwarte porty
OPEN_PORTS: tcp/3389;
# tajne hasło
KEY: tajnehaslo;
# czas otwarcia portu
FW_ACCESS_TIMEOUT: 45;
# czy połączenie ma być forwardowane do innej maszyny
ENABLE_FORWARD_ACCESS: Y;

</span></pre>
<p>W drugim pliku fwknop.conf definujemy konfiguracje samego fwknopd.conf</p>
<pre><span style="color: #ff9900;"># adres na jaki będą wysyłane powiadomienia o uzyskanym dostępie</span></pre>
<pre><span style="color: #ff9900;">EMAIL_ADDRESSES             root@localhost;</span></pre>
<pre><span style="color: #ff9900;"># adres hostanme</span></pre>
<pre><span style="color: #ff9900;">HOSTANAME    hostame;</span></pre>
<pre><span style="color: #ff9900;"># linux netfilter</span></pre>
<pre><span style="color: #ff9900;">FIREWALL_TYPE               iptables;</span></pre>
<pre><span style="color: #ff9900;"># interfejs, na którym fwknop będzie nasłuchiwał pakiety SPA</span></pre>
<pre><span style="color: #ff9900;">PCAP_INTF                   eth0;</span></pre>
<pre><span style="color: #ff9900;"># translacja adresów oraz adres IP fwknopd w chronionej sieci </span></pre>
<pre><span style="color: #ff9900;">ENABLE_IPT_SNAT             Y;</span></pre>
<pre><span style="color: #ff9900;">SNAT_TRANSLATE_IP           _CHANGEME_;</span></pre>
<pre><span style="color: #ff9900;"># włączenie trybu forward</span></pre>
<pre><span style="color: #ff9900;">ENABLE_IPT_FORWARDING       Y;</span></pre>
<pre><span style="color: #ff9900;"># forwarding w linuxie </span></pre>
<pre><span style="color: #ff9900;">ENABLE_PROC_IP_FORWARD      Y;

</span></pre>
<p>Po stronie firewall&#8217;a chroniącego dostęp prócz otwarcia i przekierowania chronionego portu, musimy przekierować std. port udp/62201 do hosta z fwknopd.<br />
W celu uzyskania dostępu do zdalnego pulpitu maszyny 10.0.0.3 (chroniona sieć) z poziomu klienta wydajemy polecenie:</p>
<pre><span style="color: #ff9900;">fwknop -A tcp/3389 -F 10.0.0.3:3389 --Resolve-external-IP -D &lt;adres_fwknopd&gt;

</span></pre>
<p>nasz zew. adres IP zostanie automatycznie uzyskany bądź  możemy go zdefiniowaniu po podaniu argumentu <span style="color: #ff9900;">-a</span><br />
Warto w przypadku netfilter&#8217;a dodać po stronie fwknopd regułkę, do łańcucha FORWARD i INPUT przepuszczającą połączenia już istniejące (ESTABLISHED,RELATED).<br />
Gdyż przy braku tej regułki po zdefiniowanym timeout&#8217;cie w access.conf zostaniemy rozłączeni.</p>
<p>Tym prostym sposobem uzyskaliśmy łatwy i w miarę bezpieczny dostęp do konkretnych zasobów chronionych w naszej sieci, bez uciekania się do dostępu VPN. Zaś użycie klucza GPG ułatwi nam definiowanie dostępu w przypadku wielu użytkowników, gdyż nie musimy się martwić zmianą hasła w przypadku wykluczenia jednego z użytkowników.</p>
<p>[1] <a href="http://cipherdyne.org/fwknop/" target="_blank">http://cipherdyne.org/fwknop/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=340</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zmiana domeny</title>
		<link>http://blog.witalis.net/?p=333</link>
		<comments>http://blog.witalis.net/?p=333#comments</comments>
		<pubDate>Wed, 05 May 2010 17:57:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[inne]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=333</guid>
		<description><![CDATA[&#8230; na krótszą i łatwiejszą do zapamiętania. Linki z poprzednią domeną (witalis.rootnode.net) są automatycznie przekierowywane na nową blog.witalis.net.
]]></description>
			<content:encoded><![CDATA[<p>&#8230; na krótszą i łatwiejszą do zapamiętania. Linki z poprzednią domeną (witalis.rootnode.net) są automatycznie przekierowywane na nową <span style="color: #ff6600;"><strong>blog.witalis.net</strong></span>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=333</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AccessEnum i ShareEnum</title>
		<link>http://blog.witalis.net/?p=328</link>
		<comments>http://blog.witalis.net/?p=328#comments</comments>
		<pubDate>Fri, 30 Apr 2010 17:16:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[windows]]></category>
		<category><![CDATA[accessenum]]></category>
		<category><![CDATA[shareenum]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=328</guid>
		<description><![CDATA[Dzisiaj krótkie przedstawienie dwóch prostych i użytecznych programów spod stajni Sysinternals.
Czasem potrzebujemy szybko dowiedzieć się o uprawnieniach plików zawartych w danej lokalizacji. W pierwszej kolejności zapewne będziemy się posiłkować za zakładką Security ona jednak przy dużej liczbie obiektów wydaje się być mało efektywna. Następny krok to zapewne narzędzie konsolowe icacls szczególnie z przełącznikiem /T daje [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj krótkie przedstawienie dwóch prostych i użytecznych programów spod stajni Sysinternals.</p>
<p><span id="more-328"></span>Czasem potrzebujemy szybko dowiedzieć się o uprawnieniach plików zawartych w danej lokalizacji. W pierwszej kolejności zapewne będziemy się posiłkować za zakładką Security ona jednak przy dużej liczbie obiektów wydaje się być mało efektywna. Następny krok to zapewne narzędzie konsolowe icacls szczególnie z przełącznikiem /T daje nam pełen obraz sytuacji, jednak ten obraz ACL&#8217;i nie całkiem bywa czytelny . Ostatni krok to wspomniany AccessEnum[1]:</p>
<p><a href="http://blog.witalis.net/wp-content/uploads/2010/04/accessnum.jpg"><img class="alignnone size-medium wp-image-329" title="AccessEnum" src="http://blog.witalis.net/wp-content/uploads/2010/04/accessnum-300x99.jpg" alt="" width="300" height="99" /></a></p>
<p>prosto i przejrzyście nieprawdaż ? ;)</p>
<p>Odpowiednik AccessEnum&#8217;a dla zasobów współdzielonych to ShareEnum[2], prezentuje się bardzo podobnie.</p>
<p>[1]  <a href="http://technet.microsoft.com/en-us/sysinternals/bb897332.aspx" target="_blank">http://technet.microsoft.com/en-us/sysinternals/bb897332.aspx</a></p>
<p>[2] <a href="http://technet.microsoft.com/en-us/sysinternals/bb897442.aspx" target="_blank">http://technet.microsoft.com/en-us/sysinternals/bb897442.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=328</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Samba i Access-Based Enumeration</title>
		<link>http://blog.witalis.net/?p=319</link>
		<comments>http://blog.witalis.net/?p=319#comments</comments>
		<pubDate>Sun, 25 Apr 2010 11:55:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[*bsd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensolaris]]></category>
		<category><![CDATA[samba]]></category>

		<guid isPermaLink="false">http://blog.witalis.net/?p=319</guid>
		<description><![CDATA[Wyliczanie oparte na prawach dostępu tak brzmi polski odpowiedniki angielskiego określenia zawartego w temacie wpisu. Co oferuje nam owa funkcja i jak ją zastosować w przypadku Samby, ten temat postaram się dzisiaj przybliżyć.
Po włączeniu funkcji Access-Based Enumeration użytkownik, który eksploruje udostępniony zasób sieciowy, zobaczy jedynie te foldery i pliki, do których ma dostęp. Widoczność plików [...]]]></description>
			<content:encoded><![CDATA[<p>Wyliczanie oparte na prawach dostępu tak brzmi polski odpowiedniki angielskiego określenia zawartego w temacie wpisu. Co oferuje nam owa funkcja i jak ją zastosować w przypadku Samby, ten temat postaram się dzisiaj przybliżyć.</p>
<p><span id="more-319"></span>Po włączeniu funkcji Access-Based Enumeration użytkownik, który eksploruje udostępniony zasób sieciowy, zobaczy jedynie te foldery i pliki, do których ma dostęp. Widoczność plików i folderów uzależniona jest od tego czy dany użytkownik ma do nich prawo odczytu lub prawo zapisu. W przypadku Samby wystarczy globalnie lub w kontekście definicji pojedynczego zasobu ustawić parametry:</p>
<pre><span style="color: #ff6600;">hide unreadable</span></pre>
<pre><span style="color: #ff6600;">hide unwritable

</span></pre>
<p>Samba w wersji przynajmniej 3.4 oferuje dodatkowo parametr:</p>
<pre><span style="color: #ff6600;">access based share enum

</span></pre>
<p>która uzależnia dostęp do konkretnego zasobu sieciowego (nie pliku, folderu) w zależności od praw odczytu lub zapisu.</p>
<p>Zaprezentowany sposób podejścia do udostępniana danych podnosi poziom zabezpieczeń, eliminując z pola widzenia niepowołanych osób istnieje wybranych obiektów. Dodatkowo zmniejsza się liczba komunikatów o błędach związanych z brakiem dostępu.</p>
<p>Przedstawiona funkcja Access-Based Enumeration znalazła się również w najnowszym systemie MS Windows Server 2008.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 192px; width: 1px; height: 1px; overflow: hidden;">
<pre><strong><strong style="color: black; background-color: #ffff66;">access based share enum</strong></strong></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.witalis.net/?feed=rss2&amp;p=319</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
