Настраиваем файловый сервер. Основан на пакете samba. Делаем наш сервер мастер браузером. Предполагается, что он будет очень редко перегружаться, а значит в сети не будет перевыборов. Проще говоря, компьютеры не будут пропадать из сетевого окружения (windows машины). Правим файл /etc/samba/smb.conf
[global] workgroup = CORP # Название рабочей группы netbios name = server # Имя сервера, которое будет видно с сетевого окружения server string = Server linux # Пояснение unix charset=utf8 # Для правильной кодировки. Пользователь может писать на сетевой диск файлы с русскими dos charset=cp866 # именами. display charset=utf8 # interfaces = eth0 192.168.0.0/24 # Чтобы samba не "светилась" на другом сетевом интерфейсе hosts allow = 192.168.0. 127. # Доступ только с этих адресов. log file = /var/log/samba/%m.log max log size = 50 security = user # При заходе на ресурс сервера у пользователя будет спрашиваться логин и пароль encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd username map = /etc/samba/smbusers socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 browse list = yes local master = yes os level = 65 # Этот параметр даст приоритет над другими windows-машинами при перевыборах preferred master = yes name resolve order = wins lmhosts bcast wins support = yes dns proxy = no idmap uid = 16777216-33554431 idmap gid = 16777216-33554431 template shell = /bin/false winbind use default domain = no [homes] # Домашний каталог для пользователя. comment = Home Directories browseable = no writable = yesПосле модификации smb.conf набрать testparm. Если не будет ошибок, то можно запустить службу smb. Теперь создадим пользователей. Чтобы пользователь мог попасть на свой сетевой диск, он должен иметь учётную запись и на сервере и в "samba". Пароли могут не совпадать с системными. Пусть у нас есть два пользователя programmer и electronik. Если они уже имеют учётные записи, то остаётся добавить их в /etc/samba/smbpasswd. Делается это командой:
[root@server /]# smbpasswd -a programmerПрограмма попросит ввести два раза пароль. Чтобы потом изменить пароль, команда набирается без параметра "-a". После этого можно пробовать зайти с windows машины. Если пользователь с паролем windows машины будут совпадать с пользователем и паролем сервера, то при обращении к серверу, пользователь будет сразу попадать на свой ресурс без ввода пароля.
Теперь осталось сделать просмотр потреблённого веб-траффика. Идея такая: squid сохраняет историю посещений в /var/log/squid/access.log. Напишем скрипт, который раз в определённое время будет заглядывать в лог и сохранять его в базе данных (mysql). А уже оттуда информацию можно получать любым удобным способом. Мы получали через веб-форму. Написан скрипт на perl. Он в момент запроса подключается к базе данных, формирует динамическую html страницу и через браузер нам ее показывает.:-) В начале месяца другой скрипт на perl всю базу переносит в текстовый файл с именем типа месяцгод.log и затем обнуляет базу.
Для начала нужно создать базу данных. Почитать про mysql можно тут. В сервисах включаем mysqld. Делаем для root пароль. Создаём базу. Заходим:[root@server /]# mysql -u root -p Enter password: mysql>create database traffics; mysql>use traffics;создаём таблицу:
mysql>create table squid(ip varchar(16), bytes bigint unsigned, link text, trans varchar(65), time datetime);Выходим из базы данных. Пишем скрипт забирающий из логов информацию:
#!/bin/bash cp /var/log/squid/access.log /tmp/squidforparse.log >/var/log/squid/access.log awk '{print "INSERT INTO squid (ip,bytes,link,trans,time) \ VALUES(\""$3"\","$5",\""$7"\",\""$9"\",from_unixtime("$1"));"};' \ < /tmp/squidforparse.log | mysql -D traffics -u root --password=parol # parol - пароль для root базы данных rm -f /tmp/squidforparse.logПомещаем его в /usr/local/bin. Добавляем в crontab строку:
#!/usr/bin/perl use DBI; use strict; my $x1; my $name_file="/etc/mysql_erase.conf"; # В этом файле номер месяца my ($DSN, $dbh, $sth); my (@row,$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst,$sum01,$sum02,$sum03,$sum); $sum01 = 0; $sum02 = 0; $sum03 = 0; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); $year=$year+1900; print "Сегодня $mon\n"; if (-e $name_file) { open(F,$name_file); $x1=<F>; # Считываем номер месяца close(F); print "$x1\n"; if ($x1 != $mon) { # Если номер месяца не совпадает с текущим, то open(F,">$name_file"); print F $mon; # перезаписываем этот номер print "Производится обновление файла конфигурации\n"; close(F); open(C,">/var/log/squid/$mon$year.log"); $DSN = "dbi:mysql:traffics"; $dbh = DBI->connect($DSN, 'root','parol') or die "$DBI::errstr\n"; my $statement = "SELECT * FROM squid"; # Загоняем всю базу в массив и уже из массива выбираем $sth=$dbh->prepare($statement); # все что нам нужно. $sth->execute (); while (@row=$sth->fetchrow_array){ if ($row[0] eq "127.0.0.1") { $sum01 = $sum01 + $row[1]; } elsif ($row[0] eq "192.168.0.2") { $sum02 = $sum02 + $row[1]; } elsif ($row[0] eq "192.168.0.3") { $sum03 = $sum03 + $row[1]; } print C "$row[0] $row[2] $row[1] $row[4] \n"; # Записываем в файл все логи } $sum = $sum01+$sum02+$sum03; print C "$sum01 байт скачано локально\n"; # В конце отдельно по пользовалелям print C "$sum02 байт скачано Электроником\n"; print C "$sum03 байт скачано Программистом\n"; print C "Итого : $sum\n"; close (C); my $statement = "DELETE FROM squid"; $sth=$dbh->prepare($statement); $sth->execute () or die "Ошибка в методе execute :$dbh->errstr"; $sth->finish(); print "База данных стёрта\n"; } else { print "База не будет стёрта!"; } }Можно было и по красивее сделать. Общая база данных с пользователями. (Например использовать openldap) С неё уже скрипты берут данные. Но это в будущем...
#!/usr/bin/perl use DBI; use strict; use CGI qw(param()); my $ip=param("IP"); # Адрес по которому нужна выборка my $d1=param("D1"); # Начальная дата выборки my $d2=param("D2"); # конечная дата my ($DSN, $dbh, $sth, @row, $sum01); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); $mon=$mon+1; if (length($mon)==1) { $mon="0$mon"; } $year=$year+1900; $d1="$year-$mon-$d1 00:00:00"; $d2="$year-$mon-$d2 20:00:00"; $sum01 = 0; $DSN = "dbi:mysql:traffics"; $dbh = DBI->connect($DSN, 'root','parol'); print "Content-type:text/html\n\n"; print "<html><head><title>Статистика</title>\n"; print "<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"></head><body background=\"pic/back.gif\">\n"; my $statement = "SELECT time,ip,bytes,link FROM squid Where ip='$ip' and time > '$d1' and time < '$d2'"; # Запрос к базе данных через параметры $sth=$dbh->prepare($statement); $sth->execute (); print "<table border=\"1\"><tbody>\n"; print "<tr>\n"; print " <td>Время<br></td>\n"; print " <td>IP<br></td>\n"; print " <td>Байты<br></td>\n"; print " <td>Ссылки<br></td>\n"; print "</tr\n>"; while (@row=$sth->fetchrow_array){ $sum01 = $sum01 + $row[2]; print "<tr>\n"; print " <td>$row[0]<br></td>\n"; print " <td>$row[1]<br></td>\n"; print " <td>$row[2]<br></td>\n"; print " <td>$row[3]<br></td>\n"; print "</tr\n>"; } $sth->finish(); print "</tbody></table>\n"; print "<h3>$sum01 байт скачано $ip</h3>\n"; print "</body></html>\n";Ну и сделаем веб страницу, с которой можно будет выбирать пользователей и дату. Назовём её например statistic.html и положим в /home/site (Там у нас корень веб-сервера)
<html> <head><title></title> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> </head> <body background="pic/back.gif"> # В каталоге /home/site создадим папочку pic, куда положим файлик фона для красоты (back.gif) Страница статистики <br> <form method="get" action="/cgi-bin/lsql"> # По нажатию кнопки "Ok" в параметры lsql передаётся выбранный пользователь, по IP <br><select name="IP" size=3 > # выбранные даты, D1 и D2 <option selected value="127.0.0.1">server <option value="192.168.0.2">Электроник <option value="192.168.0.3">Программист </select> <select name="D1" size="1"> <option>01</option> <option>02</option> <option>03</option> <option>04</option> <option>05</option> <option>06</option> <option>07</option> <option>08</option> <option>09</option> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> <option>21</option> <option>22</option> <option>23</option> <option>24</option> <option>25</option> <option>26</option> <option>27</option> <option>28</option> <option>29</option> <option>30</option> <option>31</option> </select> <select name="D2" size="1"> <option>01</option> <option>02</option> <option>03</option> <option>04</option> <option>05</option> <option>06</option> <option>07</option> <option>08</option> <option>09</option> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> <option>21</option> <option>22</option> <option>23</option> <option>24</option> <option>25</option> <option>26</option> <option>27</option> <option>28</option> <option>29</option> <option>30</option> <option>31</option> </select> <input type="submit" value="Ok"> </form><br> </body></html>Все скрипты главное не забыть сделать исполняемыми. Теперь с любого компьютера в сети, через браузер, набрав в адресной строке http://server.corp/statistic.html мы можем просматривать за выбранный период историю посещений сайтов пользователями.
При желании можно настроить виртуальную частною сеть, чтобы клиенты могли попадать в локальную сеть, находясь дома (командировке). Описание прочитать можно здесь.
Кому то может показаться слишком нудной (сложной) настройка сервера. Для облегчения администрирования можно порекомендовать пакет webmin. Позволяет настраивать службы через веб-форму. После установки в браузере набрать http://server.corp:10000. Также существуют и другие решения подобных задач. Описанные здесь решения не претендуют на правильность и красивость. Многие взяты из интернета. Главный недостаток: длительная и кропотливая настройка, через некоторое время все забывается. Поставил, настроил и забыл.
Большое спасибо парням с форума unixforum.org за помощь и консультации!
Также рекомендую посетить сайты www.postfix.ru и www.mysql.ru