samba_clamav.html   [plain text]


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  <meta name="keywords" content="ClamAV, Samba, samba-vscan, AntyVir, Linux, UNIX">
  <meta name="description" content="::: ClamAV / Samba / samba-vscan :::">
  <meta name="author" content="doozer">
  <title>::: ClamAV / Samba / samba-vscan :::</title>
  
  <style type="text/css">
P 
{
	font-size : 12px;
	font-style : normal;
	color : #000000;
	font-family : verdana, arial, helvetica, sans-serif;
	text-decoration : none;
	text-align : justify;
}
					  			  
A 
{
	font-size : 12px;
	font-style : normal;
	font-weight : bold;
	color : #4457c9;
	font-family : verdana, arial, helvetica, sans-serif;
	text-decoration : none;
}
									
A:Visited 
{
	font-size : 12px;
	font-style : normal;
	font-weight : bold;
	color : #4457c9;
	font-family : verdana, arial, helvetica, sans-serif;
	text-decoration : none;
}
	    
A:Active 
{
	font-size : 12px;
	font-style : normal;
	font-weight : bold;
	color : #4457c9;
	font-family : verdana, arial, helvetica, sans-serif;
	text-decoration : none;
}

A:Hover 
{
        color : #000000;
	font-size : 12px;
	font-style : normal;
	font-weight : bold;
	font-family : verdana, arial, helvetica, sans-serif;
	text-decoration : none;
}
							
BODY 
{
	font-size : 12px;
	font-style : normal;
	color : #000000;
	font-family : verdana, arial, helvetica, sans-serif;
	background-color : #ffffff;
	text-decoration : none;
	text-align : left;
	margin: 0;
}

PRE
{
	color: #000080;
	font-size: 12px;
	border: 1px solid #000000;
	padding: 3pt;
	background-color: #dddddd;
	font-family : verdana, arial, helvetica, sans-serif;
}
     
TABLE  
{
	border-collapse: collapse;
	border-color: #000000;
	border: 0;
	background-color: #ffffff;
}
												   
TD  
{
	font-size : 12px;
	font-style : normal;
	font-weight : normal;
        color : #000000;
	font-family : verdana, arial, helvetica, sans-serif;
	text-decoration : none;
	border-color: #000000;
}

TD.rtw  
{
	font-size : 12px;
	font-style : normal;
	font-weight : normal;
        color : #ffffff;
	font-family : verdana, arial, helvetica, sans-serif;
	text-decoration : none;
	border-color: #000000;
}

TD.rall
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
	border-color: #000000;
}

TD.rl
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 0pt;
	border-bottom-style: none;
	border-color: #000000;
}

TD.rt
{
	border-left-width: 0pt;
	border-left-style: none;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 0pt;
	border-bottom-style: none;
	border-color: #000000;
}

TD.rt_dddddd
{
	border-left-width: 0pt;
	border-left-style: none;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 0pt;
	border-bottom-style: none;
	border-color: #dddddd;;
}

TD.rlr
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-color: #000000;
}

TD.rlr_b
{
	border-left-width: 4pt;
	border-left-style: solid;
	border-right-width: 4pt;
	border-right-style: solid;
	border-color: #000000;
}

TD.rlb
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
}

TD.rltr
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 0pt;
	border-bottom-style: none;
}

TD.rltr_b
{
	border-left-width: 4pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 4pt;
	border-right-style: solid;
	border-bottom-width: 0pt;
	border-bottom-style: none;
}

TD.rrb
{
	border-left-width: 0pt;
	border-left-style: none;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
}

TD.rr
{
	border-left-width: 0pt;
	border-left-style: none;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 0pt;
	border-bottom-style: none;
}

TD.rltb
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
}

TD.rlt
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 0pt;
	border-bottom-style: none;
}

TD.rtr
{
	border-left-width: 0pt;
	border-left-style: none;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 0pt;
	border-bottom-style: none;
}

TD.rlrb
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
}

TD.rlrb_b
{
	border-left-width: 4pt;
	border-left-style: solid;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 4pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
}

TD.rallwl
{
	border-top-width: 1pt;
	border-top-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-left-width: 0pt;
	border-left-style: none;
}

TD.rbottom
{
	border-bottom-width: 1pt;
	border-bottom-style: solid;
	border-left-width: 1pt;
	border-left-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
}

TD.rlrbdotted
{
	border-left-width: 1pt;
	border-left-style: dotted;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 1pt;
	border-right-style: dotted;
	border-bottom-width: 1pt;
	border-bottom-style: dotted;
}

TD.rbdotted
{
	border-left-width: 0pt;
	border-left-style: none;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 1pt;
	border-bottom-style: dotted;
}

TD.rn
{
	border-left-width: 0pt;
	border-left-style: none;
	border-top-width: 0pt;
	border-top-style: none;
	border-right-width: 0pt;
	border-right-style: none;
	border-bottom-width: 0pt;
	border-bottom-style: none;
	border-color: #dddddd;
}

IMG 
{
	padding: 0;
	border: 0;
	border-color: #000000;
}      

.rfoot
{
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
	border-color: #000000;
}

.rfoot:link
{
	color: #000000;
	text-decoration: none;
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
	border-color: #000000;
}

.rfoot:hover
{
	border: 1px solid #0A246A;
	background-color: #B6BDD2;
	color: #000000;
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
	border-color: #000000;
}

.rfoot:visited
{
	color: #000000;
	text-decoration: none;
	border-left-width: 1pt;
	border-left-style: solid;
	border-top-width: 1pt;
	border-top-style: solid;
	border-right-width: 1pt;
	border-right-style: solid;
	border-bottom-width: 1pt;
	border-bottom-style: solid;
	border-color: #000000;
}
  </style>
  
</head>

<body bgcolor="#ffffff">
 <center>
 <a name="#begin"> </a>

<table width="100%" align="center" cellpadding="0" cellspacing="0" border="0">
 <tr>
  <td  bgcolor="#dddddd" width="100%" align="left" height="20" class="rn"></td>
 </tr>
</table>
 
<!-- LOGOTABLE -->
<table width="100%" align="center" cellpadding="10" cellspacing="0" border="0">
 <tr>
  <td  bgcolor="#dddddd" width="8%" align="left" height="100" class="rt_dddddd"></td>
  <td  bgcolor="#ffffff" width="24%" align="left" height="100" class="rlt"><img src="clam.png" alt="ClamAV Logo"></td>
  <td  bgcolor="#ffffff" width="60%" align="left" height="100" class="rtr">
   <b><font size="-1">ARTYKUŁ Z SERII</font></b><br>
   <b><font size="+1">Ochrona antywirusowa z wykorzystaniem ClamAV</font></b><br><br>
   &nbsp;&nbsp;&nbsp;<font size="+1">Jak zmusić Sambę do pracy z ClamAV</font>
  </td>
  <td  bgcolor="#dddddd" width="8%" align="left" height="100" class="rt_dddddd"></td>
 </tr>  
</table>
<!-- end LOGOTABLE -->

<!-- TOPTABLE -->
<table width="100%" align="center" cellpadding="10" cellspacing="0" border="0"> 
 <tr>
  <td bgcolor="#dddddd" colspan="1" valign="top" align="left" width="8%" height="200">
   &nbsp;
  </td>
  
  <td colspan="1" valign="top" align="left" width="84%" height="200" class="rlrb">
  
   <br><br><b>Spis treści</b>
   <br><b>1.</b>&nbsp;<a href="samba_clamav.html#a1">Wprowadzenie</a>
   <br><b>2.</b>&nbsp;<a href="samba_clamav.html#a2">Jak to działa?</a>
   <br><b>3.</b>&nbsp;<a href="samba_clamav.html#a3">Zapotrzebowanie na oprogramowanie</a>
   <br><b>4.</b>&nbsp;<a href="samba_clamav.html#a4">Konfiguracja serwera Samba</a>
   <br><b>5.</b>&nbsp;<a href="samba_clamav.html#a5">Kompilacja ClamAV</a>
   <br><b>6.</b>&nbsp;<a href="samba_clamav.html#a6">Uruchamianie</a>
   <br><b>7.</b>&nbsp;<a href="samba_clamav.html#a7">Obserwacje i analiza logów</a>
 
<br><br><br>
Najnowsza wersja tego dokumentu jest zawsze dostępna pod <a href="http://clamav.skc.com.pl/howtos/samba_clamav.html">tym adresem</a>.<br><br>

Artykuł ten jest drugim z serii poświęconej ochronie antywirusowej w systemach *nixowych z wykorzystaniem
programu antywirusowego ClamAV. Ponieważ każdy z nich traktuje o innych aspektach tej ochrony i artykuły nie stanowią
jednej spójnej całości, część opisów w każdym z nich będzie się powtarzać. Nie chcę bowiem żeby czytelnicy musieli się przekopywać przez
wszystkie z artykułów aby znaleźć dodatkowe informacje. Najistotniejsze zagadnienia tj. krótkie opisy ClamAV i jego środowiska, aktualizację baz danych wirusów, itp. omawiam w każdym z moich tekstów. Strukturę dokumentów również postaram się zachować w miarę ujednoliconą.<br>
Chrońmy więc biedne windowsy naszych użytkowników przed złowrogimi, imperialistycznymi wirusami. Niech moc będzie z Wami :-)

<a name="a1"> </a>
<br><br><br><b>1.&nbsp;&nbsp;&nbsp;Wprowadzenie</b>
<br><br>Jak już w tytule mogliście przeczytać,
opiszę sposób w jaki można połączyć <a href="http://www.samba.org/">Sambę</a> z tworzonym na licencji GPL, programem antywirusowym 
<a href="http://www.clamav.net/">ClamAV</a>. Projekt zapoczątkowany został przez Tomasza Kojma a obecnie rozwijany jest przez <a href="http://www.clamav.net/team.html">międzynarodowy zespół programistów</a>.<br> W chwili powstawania tego HOWTO, ostatnią stabilną wersją ClamAV był 0.67.1 tak więc wszelkie pliki konfiguracyjne i rozwiązania będą omawiane w oparciu o tę wersję. Zachęcam Was również do prób ze <a href="http://www.clamav.net/snapshot/">snapshotami</a>. Można tam znaleźć naprawdę wiele nowych i przydatnych funkcji.<br>
Połączenie Samby z ClamAV w porównaniu z <a href="http://clamav.skc.com.pl/howtos/sendmail_clamav.html">połączeniem Sendmaila z ClamAV</a> jest dziecinnie proste. Konfiguracja ogranicza się w zasadzie do kilku
podstawowych kroków. Znajomość serwera Samba przyda się jednak bardzo i osoby dobrze poruszające się w pliku konfiguracyjnym tego pakietu będą miały ułatwione zadanie.

<a name="a2"> </a>
<br><br><br><b>2.&nbsp;&nbsp;&nbsp;Jak to działa?</b>
<br><br>Pomostem pomiędzy Sambą a ClamAV będzie <a href="http://www.openantivirus.org/projects.php">samba-vscan</a>. Autorem programu jest <b>Rainer Link</b> a prace nad projektem zapoczątkowane zostały w połowie maja 2001.<br><br>
<i>samba-vscan</i> jest rodzajem filtra, który operuje na wirtualnym systemie plików Samby - <i>VFS</i> (ang. <i>Virtual File System</i>). VFS to nic innego jak zbiór udogodnień dodanych do już istniejącego systemu plików. Wprowadza między innymi dodatkowe wywołania; operacje na katalogach (<i>opendir, readdir, mkdir, itd</i>) i plikach (<i>open, read, close, write, itd</i>).<br>
Wywołania te pozwalają programowi <i>samba-vscan</i> na podczepienie się pod nie i wykonanie pewnego kodu a dokładniej sprawdzenia pliku pod kątem występowania w nim wirusów. Więcej na temat VFS dowiecie się 
<a href="http://www.geocities.com/orville_torpid/papers/vfs_tutorial.html">tutaj</a> lub w dokumentacji Samby.

<br><br>Co to oznacza w praktyce? Otóż każde żądanie otwarcia katalogu/pliku stworzenie nowego lub jakakolwiek operacja na katalogach lub plikach, może być filtrowana a następnie może zostać podjęta decyzja co zrobić z danym obiektem.

<br><br><i>samba-vscan</i> łączy się z demonem ClamAV - <b>clamd</b> poprzez <i>local socket</i>. W tym celu w pliku konfiguracyjnym <i>clamav.conf</i> musimy określić ścieżkę do socketu, np:

<pre>
LocalSocket /var/run/clamav/clamd.sock		# Określenie pliku dla lokalnego socketu
</pre>
Po połączeniu z <i>clamd</i>, <i>samba-vscan</i> sprawdza plik pod kątem występowania w nim wirusów.

<a name="a3"> </a>
<br><br><br><b>3.&nbsp;&nbsp;&nbsp;Zapotrzebowanie na oprogramowanie</b>
<br><br> - ClamAV v0.67.1 - <a href="http://prdownloads.sourceforge.net/clamav/">http://prdownloads.sourceforge.net/clamav/</a>
<br> - Samba 3.0.1 - <a href="ftp://giswitch.sggw.waw.pl/pub/unix/samba/">ftp://giswitch.sggw.waw.pl/pub/unix/samba/</a>
<br> - samba-vscan 0.3.5-alpha2 - <a href="http://www.openantivirus.org/snapshots/">http://www.openantivirus.org/snapshots/</a>

 <br><b>ClamAV posiada wbudowaną obsługę formatów RAR (2.0), Zip, Gzip, Bzip2.</b>
 
<br><br>&nbsp;<b>Skrypty startowe</b>
<br> - Skrypty startowe, które uruchamiają Sambę i clamd:
<br>&nbsp;&nbsp;&nbsp;<a href="http://clamav.skc.com.pl/howtos/files/rc.samba">rc.samba</a>
<br>&nbsp;&nbsp;&nbsp;<a href="http://clamav.skc.com.pl/howtos/files/rc.clamd">rc.clamd</a>
<br><br>Skrypty te zostały zrobione z myślą o dystrybucjach, które jako systemu startowego używają tego, który wywodzi się z systemów BSD. Ja używam dwóch dystrybucji, Slackware i shtOS i w tych dystrybucjach skrypty będą działać prawidłowo. Jeśli używacie systemu startowego System V, to musicie sami stworzyć sobie odpowiednie skrypty startowe.
<br>Głównym skryptem startowym jest <i>rc.samba</i>. Po uruchomieniu go z opcją <i>start</i> zostanie również uruchomiony skrypt <i>rc.clamd</i>.

<a name="a4"> </a>
<br><br><br><b>4.&nbsp;&nbsp;&nbsp;Konfiguracja serwera Samba</b>
<br><br>Ja używam obecnie wersji 3.0.1 ale samba-vscan działa również z wcześniejszymi wersjami Samby.
<br>W dokumentacji samba-vscan, znajdziecie opisy dla wersji Samby wczesniejszych niz 2.2.4. Od wersji >= 2.2.4 az do aktualnej serii 3.0.x sposób instalacji jest taki sam.

<br><br>Do dzieła:
<br>Proponuję na początek dokładne zapoznanie się z zawartością pliku <i>INSTALL</i> pakietu samba-vscan. Może wyjaśni Wam ewentualne wątpliwośći i pytania a na pewno ułatwi zrozumienie działania całego rozwiązania.<br>
Musicie pamiętać jeszcze o tym, że potrzebne nam są źródła Samby, nie wystarczy zwykła instalacja pakietów binarnych dla Waszej dystrybucji. Źródeł Samby wymaga samba-vscan.<br><br>
Zaczynamy od kompilacji Samby. Ja stosuję kilka standardowych opcji dla configure, oto one:

<pre>
root@linux: cd samba_source/source

Następnie wydajemy polecenie configure wraz z jego parametrami;

CFLAGS="-march=i686 -mcpu=i686" \
./configure \
--enable-cups \
--with-fhs \
--prefix=/usr \
--localstatedir=/var \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--with-lockdir=/var/cache/samba \
--sysconfdir=/etc \
--with-configdir=/etc/samba \
--with-privatedir=/etc/samba/private \
--with-codepagedir=/etc/codepages \
--with-smbmount \
--with-syslog \
--with-utmp \
--with-sambabook=/usr/share/swat/using_samba \
--with-ssl \
--with-sslinc=/usr/include/openssl \
--with-ssllib=/usr \
--with-msdfs \
--with-vfs \
--with-libsmbclient \
i386-slackware-linux

Najważniejszą z opcji jest --with-vfs czyli kompilacja wirtualnego systemu plików, bez tego nici z naszej ochrony antywirusowej :)

root@linux: make proto
root@linux: make
root@linux: make install
</pre>
Po tych czynnościach Samba jest już zainstalowana i gotowa do działania. Musicie jeszcze wykonać standarowe czynności tj, stworzenie pliku /etc/samba/smb.conf dodanie użytkowników i przydzielenie zasobów. Ale tego jak to zrobić dowiecie się z dokumentacji Samby :>.

<br><br>
Teraz zainstalujemy samba-vscan. Przed kompilacją musimy jescze określić nazwę dla socketu demona clamd z jakim będzie się łączył samba-vscan. W tym celu musimy wyedytować plik <i>samba-vscan_source/clamav/vscan-clamav.h</i> a w nim następującą linijkę:
<pre>
#define VSCAN_CLAMD_SOCKET_NAME      "/var/run/clamd"
i zmienić ją na 
#define VSCAN_CLAMD_SOCKET_NAME      "/var/run/clamav/clamd.sock"
</pre>
a następnie:
<pre>
root@linux: cd samba-vscan_source/
root@linux: ./configure --prefix=/usr --with-samba-source=samba_source/source
</pre>
configure wypisze nam jakie moduły są dostępne w pakiecie. Wybieramy clamav i tylko dla niego skompilujemy odpowiedni moduł.<br>
<pre>
root@linux: make clamav
</pre>

<i>UWAGA: Nie należy uruchamiać polecenia make install</i>

<br><br>Po zakończeniu poprawnej kompilacji, musimy skopiować bibliotekę <i>vscan-clamav.so</i> do katalogu <i>vfs</i> bibliotek Samby.
<pre>
cp samba-vscan_source/vscan-clamav.so /usr/lib/samba/vfs/vscan-clamav.so
</pre>

Teraz należy przekopiować plik <i>samba-vscan_source/openantivirus/vscan-oav.conf</i> do katalogu z plikiem konfiguracyjnym Samby, czyli do <i>/etc/samba</i> ale należy mu zmienić nazwę. Słowo <i>oav</i> w nazwie zamieniamy na nazwę naszego backendu, czyli na <i>clamav</i>.
<pre>
root@linux: cp samba-vscan_source/openantivirus/vscan-oav.conf /etc/samba/vscan-clamav.conf
</pre>

<br>
W pliku INSTALL pakietu samba-vscan opisane są wszystkie opcje pliku konfiguracyjnego, ale ja postaram się również opisać kilka z nich.
<pre>
* max file size = [wartość w bajtach]
  To ustawienie pozwala na zdefiniowanie maksymalnego rozmiaru skanowanego pliku. 
  Ustawienie rozmiaru na 0 oznacza, że wszystkie pliki będą skanowane.
  Domyślnie - 0;
  
* verbose file logging = [True/False | yes/no | 1/0]
  Ustawienie tego parametru pozwoli na określenie jakie dane mają być zapisywane do 
  logu systemowego. Jeśli wybierzemy opcję True (yes, 1) wówczas wszystkie informacje
  o dostępie do plików, nawet do nie zainfekowanych, będą logowane.
  Wybranie opcji False, pozwoli na zapisywanie tylko operacji dostępu do zainfekowanych plików.
  Domyślnie - False;

* scan on open = [True/False | yes/no | 1/0]
  Ustala czy pliki mają być skanowane podczas ich otwierania. 
  Domyślnie - yes;

* scan on close = [True/False | yes/no | 1/0]
  Ustala czy pliki mają być skanowane podczas ich zamykania. 
  Domyślnie - yes;

* deny access on error = [True/False | yes/no | 1/0]
  Określa czy dostęp do pliku ma być zabroniony jeśli komunikacja z demonem
  antywirusowym zostanie utracona (nie będzie możliwe sprawdzenie pliku).
  Domyślnie - yes;
  
* deny access on minor error = [True/False | yes/no | 1/0]
  Tak samo jak przy "deny access on error" ale dla mniejszych błędów. 
  Domyślnie - yes.

* send warning message = [True/False | yes/no | 1/0]
  Określa czy wysłać do użytkownika komunikat o znalezionym wirusie poprzez Windows 
  Messenger Service (winpopup).
  Domyślnie - yes.
  UWAGA: W Windows 95/98 musi być uruchomiony klient "winpopup";

* infected file action = [quarantine | delete | nothing]
  Co samba-vscan ma zrobić z zainfekowanym plikiem:
  "quarantine" - plik zostanie przeniesiony do katalogu kwarantanny i zostanie mu 
  zmieniona nazwa. Jeśli ta operacja się nie powiedzie, plik zostanie usunięty;
  "delete" - zainfekowany plik zostanie usunięty;
  "nothing" - zainfekowane pliki pozostaną nietknięte.
  Domyślnie - quarantine;.

* quarantine directory = [scieżka do katalogu]
  Określa ścieżkę do katalogu kwarantanny. 
  Domyślnie /tmp;

* quarantine prefix = [przedrostek]
  Określa przedrostek dla plików kwarantanny. Domyślnie - vir-;

* max lru files entries = [wartość]
  Gdy Windows próbuje otwierać jednocześnie plik w krótkich odstępach czasu,
  samba-vscan używa ostatnio użytego mechanizmu dostępu do pliku aby uniknąć
  wielokrotnego skanowania danego pliku. Ustawienie to pozwala określić maksymalną
  ilość wpisów w liście ostatnio użytych dostępów do plików. 
  0 - wyłącza zupełnie ten mechanizm.
  Domyślne - 100;

* lru file entry lifetime = [wartość]
  Ustawia czas życia wpisów w liście lru (lista ostatnio użytych dostępów do plików).
  Czas podawany jest w sekundach.
  Domyślnie - 5;

* exclude file types = [lista]
  Wyłącza ze skanowania typy plików znajdujące się na liście. Opiera się na typach MIME
  tak jak opcja "file -i". Zobacz dokumentację: man file
  Domyślnie - pusta lista.
</pre>

A <a href="http://clamav.skc.com.pl/howtos/files/vscan-clamav.conf">tutaj</a> możecie podejrzeć mój plik konfiguracyjny vscan-clamav.conf.

<br><br>W pliku <i>/etc/samba/smb.conf</i> musimy jeszcze dodać odpowiednie wpisy dla poszczególnych udziałów, które chcemy chronić. Możemy chronić tylko wybrane udziały lub wszystkie zasoby Samby, to zależy tylko od miejsca w którym umieścimy odpowiednie wpisy w pliku smb.conf. Zasoby z naszymi "specjalnymi programami" możemy pozostawić poza oddziaływaniem programów antywirusowych :)

<pre>
[vscan]
   comment = virus-protected /samba directory
   path = /samba
   vfs object = vscan-clamav
   vscan-clamav: config-file = /etc/samba/vscan-clamav.conf
   writeable = yes
   browseable = yes
   guest ok = yes
</pre>

To by było na tyle odnośnie konfiguracji samba-vscan.

<a name="a5"> </a>
<br><br><br><b>5.&nbsp;&nbsp;&nbsp;Kompilacja ClamAV</b>
<br><br>Przed rozpoczęciem kompilacji należy dodać nowego użytkownika - <i>clamav</i>
<pre>
root@linux: groupadd clamav
root@linux: useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
</pre>

Aby ClamAV skompilował się wraz z clamav-milter, należy uruchomić configure z opcją --enable-milter + jakieś nasze dodatkowe opcje, np:
<pre>
user@linux: cd clamav_source
user@linux: make clean
user@linux: ./configure --prefix=/usr --sysconfdir=/etc/clamav --datadir=/etc/clamav --with-dbdir=/etc/clamav
user@linux: make
user@linux: make check
user@linux: su
root@linux: make install
</pre>

Należy jeszcze dokonać edycji pliku /etc/clamav/clamav.conf, czyli pliku konfiguracyjnego ClamAV.
<a href="http://clamav.skc.com.pl/howtos/files/clamav.conf">Tutaj</a> dostępny jest mój plik clamav.conf

<br><br>Na koniec należy skopiować najnowsze bazy sygnatur wirusów do katalogu /etc/clamav
<br>Możesz je ściągnąć ze strony <a href="http://database.clamav.net/">http://database.clamav.net/</a> 
lub z któregoś z <a href="http://www.clamav.net/mirrors.html">mirrorów</a>.
<br><br><i>Polecam stosowanie baz sygnatur w formacie CVD. Poprzednie bazy były w formacie tekstowym, ale w przyszłości nie będą już obsługiwane przez ClamAV.</i>

<br><br>Pliki baz danych to <b>main.cvd</b> i <b>daily.cvd</b>. Do main.cvd trafiają już sprawdzone sygnaturki, w których sporadycznie pojawiają się jakieś błędy lub niedociągnięcia. W pliku daily.cvd znajdują się ostatnio dodane sygnaturki najnowszych wirusów.<br>
W dniu tworzenia tego dokumentu, ClamAV rozpoznawał ponad <b>20400</b> różnych wirusów, robaków i koni trojańskich.

<br><br>
Liczba rozpoznawanych wirusów rośnie bardzo szybko i tylko patrzeć jak doścignie komercyjną konkurencję :-)

<br><br>Do pobrania najnowszych baz sygnatur można użyć programu <b>freshclam</b>, który potrafi działać jako demon. To rozwiązanie jest o tyle wygodne, że program sam sprawdza, określoną przez nas ilość razy dziennie, czy dostępne są nowe sygnaturki. Jeśli tak to je pobiera a następnie dokonuje przeładowania clamd aby ten rozpoznawał najnowsze wirusy. 

<br><br><b>Uprawnienia</b>
<br>Jeszcze kilka słów na temat uprawnień. Demon <i>clamd</i> musi być uruchomiony jako root, ale do poprawnego działania wcale nie potrzebuje praw roota. Wystarczą mu ograniczone uprawnienia jakiegoś użytkownika (np. <i>clamav</i>). Poprzez opcję <i>User</i> w pliku clamav.conf, możemy określić na prawach jakiego użytkownika ma pracować clamd. Po uruchomieniu, clamd porzuci uprawnienia roota i przejdzie na niższy poziom z uprawnieniami określonego użytkownika.

<br><br>Już niedługo dostępne będzie HOWTO, w którym postaram się opisać wszelkie zagadnienia związane z poprawną konfiguracją ClamAV oraz z używaniem innych narzędzi dostępnych w ramach projektu.

<a name="a6"> </a>
<br><br><br><b>6.&nbsp;&nbsp;&nbsp;Uruchamianie</b>
<br><br>Przed uruchomieniem skryptów musimy zadbać jeszcze o stworzenie odpowiednich katalogów i nadanie im odpowiednich uprawnień; i tak:
<pre>
root@linux: chown -R clamav:clamav /etc/clamav
root@linux: mkdir /var/run/clamav; chown -R clamav:clamav /var/run/clamav
root@linux: mkdir /var/log/clamav; chown -R clamav:clamav /var/log/clamav
</pre>

Teraz wystarczy uruchomić skrypt <i>/etc/rc.d/rc.samba start</i> i wszystko powinno ruszyć. Jako pierwszy uruchomi się
demon clamd a po 1 sekundzie Samba. Te sztuczne opóźnienie wprowadzone jest po to aby program zdążył utworzyć swój socket.

<a name="a7"> </a>
<br><br><br><b>7.&nbsp;&nbsp;&nbsp;Obserwacje i analiza logów</b>
<br><br>
Nie muszę chyba pisać jak ważne jest okresowe przeglądanie logów serwera. W przypadku ClamAV również należy zwrócić uwagę na kilka szczegółów. Wszystkiego możemy się dowiedzieć z plików <i>/var/log/clamav/clamd.log</i> i <i>/var/log/messages</i><br>
Oto przykładowy fragment logu, z którego możemy wyczytać informacje na temat znalezionych wirusów.
<pre>
Informacje o zainicjowaniu samba-vscan oraz o dostępie użytkownika do zasobów Samby
Mar  9 22:10:36 abuse smbd_vscan-clamav[23929]: samba-vscan (vscan-clamav 0.3.5alpha2) registered (Samba 3.0), (c) by 
Rainer Link, OpenAntiVirus.org
Mar  9 22:10:36 abuse smbd_vscan-clamav[23929]: samba-vscan (vscan-clamav 0.3.5alpha2) connected (Samba 3.0), (c) by 
Rainer Link, OpenAntiVirus.org
Mar  9 22:10:36 abuse smbd_vscan-clamav[23929]: INFO: connect to service vscan by user administrator
</pre>
I kilka dodatkowych informacji, np o nie skanowaniu pliku z powodu jego wielkości
<pre>
Mar  9 22:11:54 abuse smbd_vscan-clamav[23966]: INFO: File MozillaPL.org-MozillaPL-Windows-1.6.exe 
is larger than specified maximum file size! Not scanned!
Mar  9 22:11:54 abuse smbd_vscan-clamav[23966]: INFO: File SavageDemoInstaller.exe 
is larger than specified maximum file size! Not scanned!
</pre>
A tutaj już informacje o znalezieniu przez clamd wirusa i o działaniach podjętych przez samba-vscan
<pre>
Mar  9 22:13:02 abuse clamd[23977]: /samba/cygwin/src/clamav-devel-20040201/test/test3.rar: ClamAV-Test-Signature FOUND
Mar  9 22:13:02 abuse smbd_vscan-clamav[23966]: INFO: quarantining file 
'/samba/cygwin/src/clamav-devel-20040201/test/test3.rar' to '/tmp/vir-Atnd5n' was successful
</pre>

Gdy samba-vscan znajdzie wirusa w otwieranym przez nas pliku, wówczas wysyła komunikat do klinta (oczywiście jeśli taka opcja jest ustawiona w pliku konfiguracyjnym). Taki komunikat wyglada mniej więcej tak.<br><br>
<center><img src="winmsg.png"></center>


<br><br>
Na koniec, życzę Wam owocnej kompilacji i wychwycenia jak największej ilości wirusów :-)
<br>Wszelkie pytania i sugestie proszę wysyłać pocztą.

<br><br>
<hr size="1" style="color: #aaa4a0;">
Autor: <b>Przemysław Hołowczyc</b><br>
e-mail: <b>doozer (at) skc (dot) com (dot) pl</b>

<br><br>
Wed Mar 10 00:16:38 CET 2004 <b>Pierwsza wersja howto</b><br>
<font style="font-size: 12px; color: #aaaaaa">
 # samba_clamav.html v1.0; Last modified: Sun, 11 Apr, 2004 22:14:13 by doozer #
</font>


 </td>
 <td bgcolor="#dddddd" colspan="1" valign="top" align="left" width="8%" height="2000">
    &nbsp;
 </td>
</tr> 
</table>
<!-- end CONTENTTABLE -->

<table width="100%" align="center" cellpadding="0" cellspacing="0" border="0">
 <tr>
  <td  bgcolor="#dddddd" width="100%" align="center" height="60" class="rn">
   &nbsp;
  </td>
 </tr>
</table>

</center>
</body>
</html>