Reklama

Ucieczka z serwerem plików na Linuxa.

Erewhon, ndz., 11/03/2007 - 21:41
Kategorie:

Jednolita sieć około 70 stanowisk roboczych, same Windowsy 2000, wszyscy użytkownicy logują sie do domeny. To brzmi jak bajka. Nie powinno być z tym problemu ... niestety teoretycznie.

Bo zachować jednolitość jest coraz trudniej, Windows XP Home nie wiedzieć dlaczego już nie ma logowania do domeny. Nagle okazuje się, że zaczyna brakować licencji użytkowników na serwerze i nie wszyscy mogą korzystać z zasobów. Czasami komunikacja między stacjami roboczymi a serwerem domeny podczas logowania lub wylogowania trwa całe minuty, może to wpływ pogody lub plamy na słońcu powodują takie zachowanie, a może mi po prostu brakło cierpliwości, zaangażowania a nawet wiedzy na temat komercyjnego systemu dla klikających.

Tak czy inaczej postanowiłem uciec z Windowsa z serwerem plików i uruchomić go na Sambie pod Linuxem.

Od ponad roku Samba pracowała już w mojej sieci, ale nie była głównym serwerem plików. A to, że zapomniałem o tym serwerze świadczy tylko o tym jak dobrze pracowała.
Teraz kilku nieświadomych użytkowników przełączyłem na nowy serwer z nową konfiguracją opisaną poniżej, nieświadomych bo nie zdają sobie sprawy z tego, że od dwóch tygodni ich pliki już nie znajdują się na Windowsie tylko na Linuxie.

Linux

debian.jpgMój wybór padł na dystrybucję Debian GNU/Linux. Ta dystrybucja jest mi najbardziej znana, a nakładany nacisk na sprawność i bezpieczeństwo oprogramowania w niej bardzo mi odpowiada.
Pobrałem obraz dysku debian-31r5-i386-netinst.iso i przystąpiłem do instalacji.

Informacje na temat konfiguracji i instalacji systemu Debian można przeczytać na stronach Polskiego Projektu Dokumentacji Debiana lub na stronie domowej http://debian.org.

Przygotowanie dysku

Na serwer plików przeznaczam osobny dysk i dzielę go na trzy partycje. Każda partycja będzie przechowywała innego rodzaju dane:

  • Public - pierwsza partycja będzie przeznaczona na zasób gdzie gdzie użytkownicy będą mieli nieograniczony i swobodny dostęp. Będą mogli tam trzymać mało istotne informacje, które nie będą archiwizowane. Zasób ten często jest wykorzystywany do przenoszenia między użytkownikami dużych zbiorów.
  • Pliki użytkowników - druga partycja będzie logicznie podzielona na zasoby w zależności od tego ile wydziałów (grup użytkowników) będzie tutaj składowało swoje dokumenty
  • Aplikacje trzecia partycja - będzie przeznaczona tylko na aplikacje sieciowe.

Takie rozłożenie danych upraszcza proces archiwizacji i zabezpiecza ważne pliki użytkowników przed np. brakiem miejsca spowodowanym zbyt dużą ilością danych w zasobie Public, który z czasem stanie się wielkim "śmietniskiem" plików.

Założenia podczas konfiguracji Samby

samba.gifChcę tak skonfigurować Sambę aby mieć kilka zasobów z różnymi prawami dostępu. Pierwszy zasób Public ma być dostępny dla wszystkich do zapisu i odczytu bez konieczności podawania hasła. Dwa następne zasoby Wydzial1 i Wydzial2 będą dostępne tylko dla użytkowników należących do tych Wydziałów. Potrzebuję jeszcze zasobu Kierownicy oraz Program. Do Kierownicy dostęp będą mieli kierownicy wydziałów, będą oni musieli należeć do dwóch grup - grupy związanej ze swoim wydziałem i do grupy kierowników. Do Program dostęp będą mieli wyszczególnieni użytkownicy.

Zakładam, że dysk przeznaczony na serwer plików został już przygotowany i podmontowany. W opisywanym zbiorze konfiguracyjnym będę podawać ścieżki do przykładowych ale fizycznie istniejących w systemie katalogów.

Konfiguracja dotyczy Samby w wersji 3.0.

Sekcja GLOBAL czyli główne ustawienia

Przechodzę do edycji zbioru konfiguracyjnego Samby:

vi /etc/samba/samba.conf

Linie zaczynające się od znaków # lub ; (średnika) są komentarzami. Oto sekcja globalna zbioru konfiguracyjnego:

[global]
  server string = OPIS DOTYCZACY SERWERA
  workgroup = GRUPA_ROBOCZA

Powyższe opcje oznaczają: server string to opis komputera natomiast workgroup oznacza grupę roboczą w jakiej będzie pracować serwer.

  encrypt passwords = true
  smb passwd file = /etc/samba/smbpasswd
  security = user
  map to guest = Bad User

Ponieważ zasoby będą udostępniane przez hasła dla wybranych użytkowników dlatego powyższe linie są wymagane. Warto zwrócić uwagę na opcję map to guest = Bad User, która zapewni dostęp gościnny, bez hasła do udziałów odpowiednio skonfigurowanych (w naszym przypadku będzie to Public).

  guest account = nobody
  invalid users = root

Zablokowaliśmy możliwość logowania się użytkownika root i wymusiliśmy pracę użytkownika gościnnego, który się nie zalogował jako nobody.

  unix charset = ISO8859-2
  dos charset = CP852

Jeśli na serwerze Linuxa mamy kodowanie ISO-8859-2 to wymuszamy tworzenie nazw zbiorów i katalogów w tej stronie kodowej.

Zasób Public

Teraz czas na skonfigurowanie zasobów, na początku stworzymy zasób Public do którego dostaniemy się bez konieczności podawania hasła i będziemy w nim pracować na prawach użytkownika nobody. Pod sekcją Global w smb.conf dopisujemy:

# nazwa udzialu
[public]
  ; opis kartoteki
  comment = KARTOTEKA OGOLNODOSTEPNA
  ; sciezka do udzialu
  path = /home/public
  ; pozwolenie na wejscie nieautoryzowanym uzytkownikom
  guest ok = yes
  ; katalog jest widoczny na liscie przegladania
  browseable =yes
  ; zasob do zapisu
  writeable = yes
  ; wymuszenie pracy jako nobody i nogroup
  force user = nobody
  force group = nogroup
  ; maska tworzonych plikow i katalogow
  create mask = 0664
  directory mask = 0775
 

Teraz wystarczy zrestartować serwer Samby:

/etc/init.d/samba restart

i dostać się do niego z poziomu systemu Windows wpisując w Menu Start|Uruchom adres IP naszego serwera:

 \\\\192.168.1.10

W nowym oknie powinien pojawić się na liście zasób Public, możemy wejść do niego i utworzyć nowy katalog lub plik. Gdybyśmy jednak otrzymali informację, że nie mamy do tego praw. To należy skontrolować uprawnienia do katalogu public na linuxie, powinny one wyglądać mniej więcej tak:

  root@samba:/home$ ls -l
  razem 4
  drwxrwxr-x  6 nobody nogroup 4096 2007-03-08 13:46 public

Jeżeli prawa wyglądają inaczej to wydaj kolejno komendy:

chmod 775 /home/public
chown nobody /home/public
chgrp nogroup /home/public

Zasób publiczny jest już dostępny dla wszystkich użytkowników sieci. Teraz możemy przystąpić do tworzenia zasobów dla poszczególnych wydziałów oraz tworzenie użytkowników w systemie.

Użytkownicy serwera plików

Aby dodać użytkownika do Samby należy najpierw stworzyć go w systemie, a następnie uaktywnić go w Sambie nadając mu hasło.

Tworzę na początku grupę wydz1 a następnie do tej grupy dodam dwóch użytkowników.

groupadd wydz1
useradd -d /home/wydzial1/uzytkownik1 -g wydz1 -m -s /bin/false uzytkownik1
useradd -d /home/wydzial1/uzytkownik2 -g wydz1 -m -s /bin/false uzytkownik2
Zakładam, że istniała kartoteka /home/wydzial1. Jej właścicielem może być administrator i powinna ona należeć teraz do grupy wydz1. Prawa kartoteki 750 (rwxr-x---).

Tacy użytkownicy mają od razu stworzone swoje kartoteki domowe w katalogu wydziałowym. Należą też do tej samej grupy, czyli swojego wydziału. Opcja -s /bin/false zapobiegnie dostępowi użytkownika do Shella na serwerze linuxowym.

Teraz tworzę hasła tym użytkownikom w Sambie:

  smbpasswd -a uzytkownik1
  smbpasswd -a uzytkownik2

W podobny sposób tworzę nowe grupy i użytkowników.

Zasób dostępny tylko dla grupy wydz1

Najwyższy czas skonfigurować Sambę w taki sposób, aby użytkownicy jednej grupy mogli bez przeszkód pracować w kartotece wydziałowej (oczywiście po poprawnej autoryzacji), a nie mieli praw do innych wydziałów.

W zbiorze smb.conf pod konfiguracją zasobu Public dodaje nowy zasób wydzial1.

[wydzial1]
  path = /home/wydzial1/
  guest ok = no
  browseable =yes
  writeable = yes
  create mask = 0660
  directory mask = 0770
  write list = @wydz1

W podobny sposób tworze pozostałe zasoby.

[wydzial2]
  path = /home/wydzial2/
  guest ok = no
  browseable =yes
  writeable = yes
  create mask = 0660
  directory mask = 0770
  write list = @wydz2

[kierownicy]
  path = /home/kierownicy/
  guest ok = no
  browseable =yes
  writeable = yes
  create mask = 0660
  directory mask = 0770
  write list = @kierownicy

[programy]
  path = /home/programy/
  guest ok = no
  browseable =yes
  writeable = yes
  create mask = 0660
  directory mask = 0770
  write list = uzytkownik1 uzytkownik4

Do zasobu Kierownicy dostęp będą musieli mieć użytkownicy, którzy obejmują stanowisko kierownicze, a już należą do własnej grupy wydziałowej. Należy przydzielić taką osobę do dodatkowej grupy.

 usermod -G kierownicy,admin uzytkownik3
 usermod -G kierownicy uzytkownik7

Od tej pory uzytkownik3 i uzytkownik7 mają dostęp do zasobu Kierownicy. Warto zauważyć, że uzytkownik3 dodatkowo należy do grupy admin. Podczas tej komendy należy uważać przy przydzielaniu dodatkowych grup, muszą one być rozdzielone przecinkami (bez spacji) oraz należy zawsze wypisać wszystkie dodatkowe grupy do jakich ma należeć użytkownik. Pominięcie dodatkowej grupy do jakiej należał użytkownik spowoduje ściągnięcie jej z niego.

Dlaczego usunięty plik nie trafił do kosza?

Częste pytanie użytkowników korzystających z zasobów sieciowych. Pracują na dokumentach umieszczonych na dysku sieciowym, kasują plik i nagle okazuje się, że jest on jeszcze potrzebny ale go już nie ma.

Z pomocą przyjdzie nam moduł Samby VFS recycle. Po jego włączeniu i skonfigurowaniu usunięte z dysku sieciowego zbiory trafią do specjalnego katalogu.
Zmodyfikuję zasób Kierownicy i dopisze linie konfiguracji modułu recycle.

[kierownicy]
  path = /home/kierownicy/
  guest ok = no
  browseable =yes
  writeable = yes
  ###### poczatek konfiguracji VFS recycle
  ; wlaczenie kosza
  vfs objects = recycle
  ; sciezka do katalogu kosz
  recycle:repository = .KOSZ
  ; zachowanie struktury usunietych plikow i katalogow
  recycle:keeptree = True
  ; zachowanie roznych wersji usunietych plikow i katalogow
  recycle:versions = True
  ; dostepnosc usunietych danych
  recycle:touch = True
  ; pliki usuwane z pominieciem kosza
  recycle:exclude = *.tmp|*.o|*.obj|~$*|*.ba0
  ; katalogi usuwane z pominieciem kosza
  recycle:exclude_dir = /tmp|/temp|/cache
  ###### koniec konfiguracji VFS recycle
  create mask = 0660
  directory mask = 0770
  write list = @kierownicy
Przykładowy smb.conf użyty w artykule.

Literatura

  1. Using Samba Robert Eckstein, David Collier-Brown, Peter Kelly
  2. Internet http://banita.pl/konf/smbudostunix.html
  3. Internet http://pl.samba.org/samba/
Średnia: 5 (2 głosy/ów)

Odpowiedzi

omnipotent (niezweryfikowany) komentuje:
ndz., 13/05/2007 - 11:39

Super wpis :) Pomoglo mi to przy konfiguracji samby :d Wielkie dzieki :)

pluca (niezweryfikowany) komentuje:
sob., 29/09/2007 - 07:38

Ekstra, tego właśnie było mi trzeba

Erewhon (niezweryfikowany) komentuje:
sob., 29/09/2007 - 15:11

A ja ciesze się, że moje "wypociny" nie marnują się :)

onyx (niezweryfikowany) komentuje:
wt., 23/10/2007 - 09:38

Dlaczego nie ma skasowanych plików w katalogu .KOSZ pomimo definicji recycle w zasobie? Co robię nie tak?

Samba version 3.0.24 na Debian 3.1

Trafiłem na tę stronę w poszukiwaniu rozwiązania tego problemu. Wcześniej miałem podobnie zdefiniowany kosz. (ze strony banity) Dla pewności "przekleiłem" z tej strony - krzysztofa fragment. utworzyłem katalog w moim zasobie o nazwie .KOSZ. I nic... restartuje sambę kasuje plik, używając Windows jako klienta samby - zasób jest zamapowany jako dysk kasuje jakiś wybrany plik explorer lub TC ale niestety nie ma skasowanego pliku w tym zdefiniowanym katalogu - .KOSZ

sprawdzałem testparm wpisy są ok.
Może coś robię nie tak tworząc katalog katalog tworzę z uprawnieniami root. Jak rozwiązać problem?

Erewhon (niezweryfikowany) komentuje:
wt., 23/10/2007 - 10:12

Ja u siebie z kosza nie korzystam, w trakcie konfiguracji samby sprawdziłem jego działanie bardziej jako "ciekawostkę" niż coś funkcjonalnego (zbyt duże przyrosty danych miałbym w koszu).

Ale po twoim komentarzu w konfiguracji swojego udziału wpisałem:


[kglaz]
  comment = Kartoteka Krzysztof Glaz
  path = /home/kglaz
  guest ok = yes
  browseable = yes
  ; ==================== KOSZ
  vfs object = recycle
  recycle:repository = .KOSZ
  recycle:keeptree = True
  recycle:versions = True
  recycle:touch = True
  ; ==================== END KOSZ
  writeable = no
  create mask = 0660
  directory mask = 0770
  write list = kglaz

teraz restart samby, sprawdzam i sprawdzam czy KOSZ istnieje w mojej kartotece domowej:


# ls -all /home/kglaz/ | grep KOSZ
#

nie ma, usuwam z poziomu Windowsa jakiś plik i znowu sprawdzam czy jest KOSZ


# ls -all /home/kglaz/ | grep KOSZ
drwx------  2 kglaz kglaz       4096 2007-10-23 11:56 .KOSZ
#

jak widać jest, a w środku znajduje się usunięty plik.

co mogę pomóc jeżeli nie został stworzony KOSZ ?

Proszę sprawdzić czy istnieje moduł Samby VFS recycle:


# ls -l /usr/lib/samba/vfs/ | grep recycle
-rw-r--r-- 1 root root 15544 2007-05-30 11:54 recycle.so

jeżeli jest, to nie wiem co poza analizą logów jestem w stanie podpowiedzieć.

onyx (niezweryfikowany) komentuje:
czw., 25/10/2007 - 14:00

Kawa na ławę... :)
Dzięki za odpowiedź i próbę pomocy.
Zaparłem się, ale problem rozwiązałem, może napiszę parę uwag dla innych z podobnym problemem. :)
Szlag mnie trafia na dokumentację na samba.org tak jakby nie można było napisać dokładnie krok po kroku procedury z przykładami i uwagami, nie każdy musi być alfą i omegą w linuksie.

Gdzie tkwił błąd? w dwóch sprawach.

1. Wpis definicji modułu vfs object = recycle

Jeśli używasz innych modułów - ja używam również modułów do audytu extd_audit lub full_audit czyli do śledzenia co kto robi w sambie należy raz podać definicję oddzielając nazwy poszczególnych modułów spacją.

Kopiując do pliku smb.conf powyższy fragment od Krzysztofa samba pamiętała ostatnią definicję
czyli wpis vfs objects = extd_audit

wpis vfs object = recycle zupełnie pominął

jak wpisać?
vfs objects = recycle extd_audit

tylko raz
uwagi: jak to sprawdzić jak to jest rzeczywiście zapamiętane przez sambę
należy wydać polecenie testparm i nacisąć enter wyświetlone zostaną zdefiniowane zasoby z parametrami. I uważnie czytać! :)

Dygresja: Czyli błąd powstał z mojej winy czystego lenistwa i braku zrozumienia bije się w piersi. Ale po co ten analizator powinien natychmiast wychwycić taki błąd.

Gdzie szukać ewentualnie modułów? u mnie w Debianie ścieżka jest taka sama jak podałeś /usr/lib/samba/vfs i szukam pliku recycle.so dla modułu recycle czyli kosza może być tym poleceniem jak korzystam z MC nawyk z DOSu

2. Katalog .KOSZ tworzy się sam automatycznie.
Po restarcie samby i dla pewności restartu połączenia klienta.

Z tym że zasada jest taka kto pierwszy ten lepszy - właścicielem katalogu .KOSZ jest ten użytkownik, który pierwszy skasuje plik.

No i tu problem inni użytkownicy kasują a pliki nie lądują w koszu dlaczego? tak na marginesie, gdzieś ktoś opisywał ten problem na którymś forum.

Jest to kwestia praw należy nadać prawa katalogu .KOSZ rw również dla tej grupy użytkowników, którzy należą do danego zasobu lub całej samby.

chown -R tom:samba_user /home/samba/dokumenty/.KOSZ
chmod -R ug+rw,o+rx-w /home/samba/dokumenty/.KOSZ

Ja tworzyłem katalog jako root i dlatego nic nie lądowało w koszu, jakbym zmienił od razu uprawnienia to pewnie by wylądowało - zwyczajny brak wiedzy, ale czy tego nie można dokładnie opisać.

Inne uwagi: Nazwa katalogu może być obojętna np samo KOSZ lub kosz_samba lub co chcemy, więc po co ta kropka na początku? - dla Windowsa - użytkownicy, klient windows nie widzą kosza, chyba że mają zaznaczoną opcję, aby widzieć ukryte pliki lub używają np. TC z właczoną opcją dla ukrytych plików i katalogów.

Czy musimy podawać pełną ścieżkę? - nie, ale możemy i tym samym wymusić całkiem inną lokalizację dla kosza.

Co można jeszcze zrobić dla ułatwienia?
- możemy podać opcję %U

czyli recycle:repository = .KOSZ/%U

pliki będą lądować w koszu do podkatalogu z nazwą użytkownika czyli

.KOSZ/ewa/opis.doc itd... mamy pełną informację co kto kasował i możemy pomóc blondynce EWIE po skasowaniu pliku... :)

Erewhon (niezweryfikowany) komentuje:
pt., 26/10/2007 - 05:40

Widzę, że uparłeś się na ten KOSZ - i bardzo dobrze bo rozwiązałeś problem.
Trafny komentarz mam nadzieję, że pomoże niejednej osobie, ja na pewno z twojego śledztwa w tej sprawie skorzystam.

Jeżeli, tak jak piszesz na początku, chciałbyś opisać to wszystko jako artykuł to zapraszam do zarejestrowania się w serwisie, wtedy otrzymujesz na użytkownika flagę pozwalającą tworzyć artykuły.

gliner (niezweryfikowany) komentuje:
wt., 29/01/2008 - 10:39

dzieki bardzo wielce pomocny arty. bede polecal

pozdrawiam

tingens (niezweryfikowany) komentuje:
czw., 28/02/2008 - 11:56

na tej stronie jest rozwiązany problem z prawami katalogów przenoszonych do kosza:
http://mrc68.blogspot.com/2007/07/kosz-na-skasowane-pliki-w-sambie.html

---ciach----
ecycle:directory_mode = 770

Ostatnia linijka jest istotna dla udziałów współużywanych przez kilku użytkowników, ponieważ domyślnie tworzone katalogi mają prawa 700
----cuach---

bfo (niezweryfikowany) komentuje:
wt., 11/03/2008 - 18:36

Wszystko fajnie, ale skoro wszystkie pliki są na dysku formatowanym w ext3, to jak Windows będzie mógł je zapisać/odczytać?

Erewhon (niezweryfikowany) komentuje:
wt., 11/03/2008 - 20:11

bez problemu, za zapis zbiorów odpowiada samba, windows po prostu nie będzie w stanie odczytać/zapisać rozszerzonych informacji o pliku.

janek (niezweryfikowany) komentuje:
ndz., 25/05/2008 - 13:41

Opis bardzo przydatny, jednka mam problem. Mianowicie chodzi o katalogi dostepne tylko dla wybranych userów. U mnie wyglada config tak:

[global]
server string = serwer
workgroup = moja
encrypt passwords = true
smb passwd file = /etc/samba/smbpasswd
security = user
map to guest = Bad User
guest account = nobody
invalid users = root
unix charset = ISO8859-2
os level = 200
dos charset = CP852

# nazwa udzialu
[Ogólnodostępny]
comment = KARTOTEKA OGOLNODOSTEPNA
path = /home/public
guest ok = yes
browseable =yes
writeable = yes
force user = nobody
force group = nogroup
create mask = 0664
directory mask = 0775

[Użytki]
comment = Katalog tylko do odczytu
path = /home/uzytki
guest ok = yes
browseable =yes
writeable = no
force user = nobody
force group = nogroup
create mask = 0664
directory mask = 0775

[Prywatne]
path = /home/osobiste
guest ok = no
browseable = yes
writeable = yes
create mask = 0660
directory mask = 0770
write list = test3

Katalogi Ogólnodostępny jak i Użytki działaja prawidłowo (pierwszy pełny zapis i odczyt, drugi tylko odczyt)
Natomiast katalog prywatne ma byc dostępny tylko dla wybranego uzytkonika. W systemie dodalem go tak:

useradd -s /bin/false test3
smbpasswd -a test3

W zasobach sieciowych widze zasoby zdefiniowane w pliku konfiguracyjnym jednak przy probie wejscia do zasobu Prywatne podanie hasla nic nie daje, pyta sie w nieskonczonosc, dziwi mnie to ze nie mozna tez wpisac nazwy uzytkownika pod windowsem, na szaro wpisany jest Gość i nie można tego zmienić.

Próda dostępu z pod Linuksa konczy sie tym samym, tylko że tutaj moge wpisać nazwę użytkownika "test3".

Proszę o pomoc, gdzie zrobiłem błąd.

kajot (niezweryfikowany) komentuje:
ndz., 07/09/2008 - 08:58

sles10 , samba3. 0. 24,
katalog
---kat1
+--kat11
+--kat21
---kat2
+--kat21
+--kat22

wlaściciel katalogu kat1 to gr1 (0770)
właściciel katalogu kat2 to gr2 ( 0770)

u2 należy do grupy gr2
u1,u2 nalezy do grupy gr1

gdy u2 kopiuje kat21 do kat1 to właścielem katalogu kat21 w kat1 jest grupa gr2, a chciałbym by była grupa gr1 tak jak całego katalogu kat1

Tomek (niezweryfikowany) komentuje:
wt., 16/12/2008 - 11:01

Bardzo przydatny artykuł, ja zrezygnowałem jakiś czas temu z Windowsa na rzecz Linuksa i nie żałuję.
Działa stabilnie, nie trzeba dodatkowych licencji na użytkowników.
Zapomniałem o tym, że taki serwer istnieje w sieci - a o to właśnie chodzi - serwer ma działać a nie bez przerwy w nim coś grzebać i naprawiać.

Anonim (niezweryfikowany) komentuje:
czw., 05/03/2009 - 15:21

yeaaaaaaaah działa, wielkie dzięki

Damian (niezweryfikowany) komentuje:
pt., 19/11/2010 - 11:03

"Czy musimy podawać pełną ścieżkę? - nie, ale możemy i tym samym wymusić całkiem inną lokalizację dla kosza."

Witam czy udała się komuś sztuka ze zmianą scieżki kosza poza katalog udostępniany?
Ja próbowałem ale bez rezultatu.

vfs object = recycle
recycle:repository = KOSZ %U #dziła OK
recycle:keeptree = True
recycle:versions = True
recycle:touch = True

w momencie zmiany na

recycle:repository = /home/KOSZ %U # Nie dziala

Macie jakiś pomysł?

Dodaj nową odpowiedź

Zawartość pola nie będzie udostępniana publicznie.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <pre> <blockquote>
  • Znaki końca linii i akapitu dodawane są automatycznie.
CAPTCHA
To pytanie sprawdza czy jesteś człowiekiem, a aby zapobiec przed spamem.
Image CAPTCHA
Enter the characters shown in the image.