Запуск clamd и freshclamd в NetBSD с помощью daemontools
Содержание
Введение
clamd
и freshclamd
- это два компонента бесплатного антивируса. Первый компонент представляет собой службу, которая выполняет проверки указанных файлов на наличие зловредного кода по запросу. Второй компонент представляет собой службу для обновления баз данных антивируса. Оба компонента доступны в одном пакете с именем clamav
, который можно установить через систему pkgsrc или из репозиториев двоичных пакетов. В статье рассматривается настройка обоих компонентов, их запуск средствами системы инициализации daemontools
и настройка скриптов системы инициализации rc
для совместимости с daemontools
.
Установка clamav
Для установки готового пакета clamav
воспользуемся командой:
# pkgin install clamav
Настройка freshclamd
Для настройки компонента freshclamd
предназаначен файл конфигурации /usr/pkg/etc/freshclamd.conf
. Права на антивирус принадлежат компании Cisco, которая ограничила доступ к антивирусным базам данных с российских IP-адресов. Тем не менее существуют зеркала этих баз данных, которые получают обновления через прокси-серверы. Одно из таких зеркал доступно по протоколу HTTP по адресу clamav.ufanet.ru
. Для настройки зеркала воспользуемся опцией DatabaseMirror
. Поскольку по умолчанию freshclamd
использует подключение по протоколу HTTPS, то протокол HTTP нужно указывать явным образом.
Пропишем зеркало в файл конфигурации:
DatabaseMirror http://clamav.ufanet.ru
Остальные настройки, на мой взгляд, имеют разумные значения по умолчанию.
Настройка запуска freshclamd
Создаём каталог будущего сервиса:
# mkdir /service/.freshclamd
Создаём скрипт запуска сервиса /service/.freshclamd/run
:
#!/bin/sh
exec 2>&1
if [ ! -f /usr/pkg/etc/freshclam.conf ] ; then
echo "Missing /usr/pkg/etc/freshclam.conf"
exit 1
fi
exec \
/usr/pkg/bin/setuidgid clamav \
/usr/pkg/bin/freshclam --checks 2 --stdout --daemon --foreground
Создаём подкаталог для сервиса сбора журналов:
# mkdir /service/.freshclamd/log
Создаём скрипт запуска сервиса для сбора журналов /service/.freshclamd/log/run
:
#!/bin/sh
exec \
setuidgid multilog \
multilog t /var/log/freshclamd/
Создаём каталог для журналов и выставляем права доступа к нему:
# mkdir /var/log/freshclamd/
# chown multilog:multilog /var/log/freshclamd/
Сделаем скрипты выполняемыми:
# chmod +x /service/.freshclamd/run /service/.freshclamd/log/run
Переименовываем каталог сервиса для его запуска:
# mv /service/.freshclamd /service/freshclamd
Совместимость с rc
Создадим в каталоге /etc/rc.d/
скрипт freshclamd
следующего вида:
#!/bin/sh
# REQUIRE: DAEMON
# PROVIDE: freshclamd
if [ -f /etc/rc.subr ]; then
. /etc/rc.subr
fi
name=freshclamd
rcvar=$name
load_rc_config $name
if checkyesno $rcvar ; then
rm -f /service/$name/down
else
touch /service/$name/down
fi
status_cmd="/usr/pkg/bin/svstat /service/$name/ | sed -e 's,^/service/\(.*\)/: up (\(pid .*\)).*$,\1 is running as \2.,g; s,^/service/\(.*\)/: down .*,\1 is not running.,g'"
start_cmd="/usr/pkg/bin/svc -u /service/$name/ ; echo 'Starting $name.'"
stop_cmd="/usr/pkg/bin/svc -d /service/$name/ ; echo 'Stopping $name.'"
restart_cmd="/usr/pkg/bin/svc -du /service/$name/ ; echo 'Restarting $name.'"
extra_commands="status"
run_rc_command "$1"
Сделаем скрипт выполняемым:
# chmod +x /etc/rc.d/freshclamd
Включим сервис в файле /etc/rc.conf
, прописав в него строчку:
freshclamd=YES
Теперь можно будет включать и выключать сервис freshclamd
привычным образом через переменную freshclamd
в файле /etc/rc.conf
, а также запускать, останавливать, перезапускать, перезагружать и проверять состояние сервиса с помощью скрипта /etc/rc.d/freshclamd
.
Настройка clamd
Настройка запуска clamd
Создаём каталог будущего сервиса:
# mkdir /service/.clamd
Создаём скрипт запуска сервиса /service/.clamd/run
:
#!/bin/sh
exec 2>&1
if [ ! -f /usr/pkg/etc/clamd.conf ] ; then
echo "Missing /usr/pkg/etc/clamd.conf"
exit 1
fi
exec \
/usr/pkg/bin/setuidgid clamav \
/usr/pkg/sbin/clamd --foreground
Создаём подкаталог для сервиса сбора журналов:
# mkdir /service/.clamd/log
Создаём скрипт запуска сервиса для сбора журналов /service/.clamd/log/run
:
#!/bin/sh
exec \
setuidgid multilog \
multilog t /var/log/clamd/
Создаём каталог для журналов и выставляем права доступа к нему:
# mkdir /var/log/clamd/
# chown multilog:multilog /var/log/clamd/
Сделаем скрипты выполняемыми:
# chmod +x /service/.clamd/run /service/.clamd/log/run
Переименовываем каталог сервиса для его запуска:
# mv /service/.clamd /service/clamd
Совместимость с rc
Создадим в каталоге /etc/rc.d/
скрипт clamd
следующего вида:
#!/bin/sh
# REQUIRE: DAEMON
# PROVIDE: clamd
if [ -f /etc/rc.subr ]; then
. /etc/rc.subr
fi
name=clamd
rcvar=$name
load_rc_config $name
if checkyesno $rcvar ; then
rm -f /service/$name/down
else
touch /service/$name/down
fi
status_cmd="/usr/pkg/bin/svstat /service/$name/ | sed -e 's,^/service/\(.*\)/: up (\(pid .*\)).*$,\1 is running as \2.,g; s,^/service/\(.*\)/: down .*,\1 is not running.,g'"
start_cmd="/usr/pkg/bin/svc -u /service/$name/ ; echo 'Starting $name.'"
stop_cmd="/usr/pkg/bin/svc -d /service/$name/ ; echo 'Stopping $name.'"
restart_cmd="/usr/pkg/bin/svc -du /service/$name/ ; echo 'Restarting $name.'"
extra_commands="status"
run_rc_command "$1"
Сделаем скрипт выполняемым:
# chmod +x /etc/rc.d/clamd
Включим сервис в файле /etc/rc.conf
, прописав в него строчку:
clamd=YES
Теперь можно будет включать и выключать сервис clamd
привычным образом через переменную clamd
в файле /etc/rc.conf
, а также запускать, останавливать, перезапускать, перезагружать и проверять состояние сервиса с помощью скрипта /etc/rc.d/clamd
.
Ручное скачивание антивирусных баз
Для ручного скачивания антивирусных баз можно воспользоваться, например, curl:
# cd /var/clamav
# curl http://clamav.ufanet.ru/bytecode.cvd --output bytecode.cvd
# curl http://clamav.ufanet.ru/main.cvd --output main.cvd
# curl http://clamav.ufanet.ru/daily.cvd --output daily.cvd
# chown clamav:clamav *.cvd