Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Протоколирование: анализ логов.

Рубрика: Безопасность -> Профилактика
Метки:
Понедельник, 1 марта 2010 г.
Просмотров: 10334
Подписаться на комментарии по RSS

     Многие администраторы часто вообще игнорируют логи, считая их почему-то ненужными. Наоборот, логи позволяют пролить свет на все события, которые происходят в системе. Рекомендуется просматривать логи хотя бы два раза в день. Если система работает ночью, каждое утро нужно просматривать логи, потому что очень много взломов происходит как раз в это время - когда администратор отдыхает.

     Защита /var/log

     Практически все файлы логов находятся в каталоге /var/log. Первым делом крекер, получивший права root, попытается скрыть следы своего присутствия, модифицировав файлы логов.

     Если используется ACL, можно сделать файлы в каталоге /var/log досягаемыми только для добавления данных. Но в конкретном случае, к сожалению,  больше нельзя будет применять программу logrotate, выполняющую ротацию логов: данной программе можно удалять файлы из каталога /var/log.

     Наиболее безопасное решение - отключить logrotate, учитывая объемы современных жестких дисков, ничего страшного с системой не случится.


     Syslog - демон протоколирования.

     Демон syslog применяется как раз для самого протоколирования. Рассмотрим пример его конфигурационного файла /etc/syslog.conf, взятого из Mandrake Linux 10.

#    Различные   записи


auth,authpriv.*    /var/log/auth.log
#    . *;auth,authpriv.none    -/var/log/syslog
user.*    -/var/log/user.log
# Протоколировать все (кроме почты), уровень info или выше
# Не протоколировать приватные аутентификационные сообщения! *.info;mail.none;;news.none;authpriv.none  -/var/log/messages
Сообщения authpriv протоколировать в /var/log/secure authpriv.*    /var/log/secure
Протоколирование почты
mail.=debug;mail.=info;mail.=notice   -/var/log/mail/info
mail.=warn    -/var/log/mail/warnings
mail.err
#    Протоколирование Cron
cron.=debug;cron.=info;cron.=notice    -/var/log/cron/info
cron.=warn    -/var/log/cron/warnings
cron.err    -/var/log/cron/errors
#    Протоколирование ядра
kern.=debug;kern.=info;kern.=notice -/var/log/kernel/info
kern.=warn    -/var/log/kernel/warnings
kern.err    /var/log/kernel/errors
#    Протоколирование lpr
lpr.=debug;lpr.=info;lpr.=notice
-/var/log/lpr/info
lpr.=warn    -/var/log/lpr/warnings
lpr.err    -/var/log/lpr/errors
#    Протоколирование новостей
news.=debug;news.=info;news.=notice     -/var/log/news/news.notice
news.=crit    -/var/log/news/news.crit
news.=err    -/var/log/news/news.err
# Протоколирование  демонов
daemon.=debug;daemon.=info;daemon.=notice   -/var/log/daemons/info
daemon,=warn    -/var/log/daemons/warnings
daemon.err    -/var/log/daemons/errors
Все  получают  критические  сообщения   (о чрезвычайных ситуациях) *.emerg    *
# Ошибки  почты и  новостей уровня err и выше сохранять в отдельном файле
uucp,news.crit    -/var/log/spooler
# Сохранять загрузочные сообщения в boot.log lосаl7
.*    -/var/log/boot.log
# Объяснения от конфигураторов Linux Mandrake
locall.*

     Как можно заметить, файл конфигурации состоит из двух полей: селектора и действия. Селектор - это объект протоколирования и файл, в который будут записываться сообщения, порождаемые этим объектом.

     Для каждого объекта надо указать один из уровней протоколирования, к примеру debug, info, notice, warn, err. Первые три относятся к информационным сообщениям. Уровень warn - это предупреждения, a err - ошибки. Есть специальные сообщения - критические. Обычно они выводятся прямо на консоль.

     Как для обозначения объектов, так и для обозначения уровней протоколирования нужно применять символ *, который обозначает все объекты или все уровни. К примеру, надо записывать все сообщения демонов в файл /var/log/daemons, тогда можно использовать такую конструкцию:

daemon.* /var/log/daemons

     Допустимыми являются следующие объекты: auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, uucp, local0 - lосаl7. Уровни протоколирования: debug, info, notice, warning, err, crit, alert и emrg.

     Действие - это просто имя файла, в который надо произвести запись (знак «-» означает, что после записи в файл можно не вызывать sync(), так как это может отрицательно сказаться на производительности). Вместо файла можно указать и другой объект (терминал, имя пользователя или удаленный узел), которому будет отправлено сообщение. Например:

# отправить все сообщения типа err и выше пользователям root и pete *.err root, pete

     Отправить протоколы удаленному узлу:

auth.*;   authpriv.*    0 10.10.0.7

     Чтобы удаленный компьютер получил syslog-сообщения, на нем должен быть запущен syslogd с опцией -r.

     Отправка сообщений на удаленный компьютер - это превосходное решение - ведь хакер не сможет их удалить. Но еще лучше отправлять их на принтер: удалить их будет невозможно (если, конечно, крекер не сделает это, физически находясь за принтером):

auth.*;   authpriv.*;   daemon.warn;   *.crit;      /dev/lp0

     После того, как были произведены все необходимые изменения, надо перезапустить syslog (kill -HUP).

     /var/log/wtmp

     В данном файле содержится информация о том, кто и когда входил в систему и выходил из нее. Для просмотра данного файла применяется несколько утилит (это двоичный файл, поэтому человек его не может просмотреть как обычно).

     Первая утилита - who. Она отображает, кто в данный момент зарегистрирован в системе. Опция -n позволяет показать время простоя:

#  who   -n


root    vc/1    Jul   27   13:56        .    1853
den     vc/2    Jul   27   13:57        .    1854
lenka   vc/3    Jul   27   13:57        .    1855

     Who еще может показать время последней перезагрузки системы (who -b) и время от последнего изменения времени (who -t).

     Вторая утилита - last - отображает список пользователей, которые входили в систему с момента создания файла wtmp:

#  last


lenka  vc/3    Wed Jul 27 13:57    still    logged in
den    vc/2    Wed Jul 27 13:57    still    logged in
root   vc/1    Wed Jul 27 13:56    still    logged in
reboot system    boot 2.6.23  Jul 7    11:26    (00:01)
den    :0     Thu Jul 21 15:20    - down    (00:00)
den    :0     Thu Jul 21 15:20    - 12:37    (00:00)

     Можно также просмотреть, когда входил в систему определенный пользователь, для этого нужно указать имя пользователя в качестве параметра:

#  last den

den      vc/2    Wed Jul 27 13:57   still logged in


den      :0      Thu   Jul   21   15:20    -   down    (00:00)
den      :0      Thu   Jul   21   15:20    -   15:20    (00:00)
den      :0      Thu   Jul   21   12:08    -   down    (00:00)

     Когда система перезагружается, регистрируется псевдопользователь reboot, что очень удобно. Узнать, когда система перезагружалась, очень просто:

#  last reboot


reboot   system boot  2.6.3-7mdk Wed Jul    27 13:56    (00:02)
reboot   system boot  2.6.3-7mdk Thu Jul    21 14:55    (00:24)
reboot   system boot  2.6.3-7mdk Thu Jul    21 12:05    (00:03)

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



(обязательно)