UBUNTU: настройка ротации логов

В Ubuntu за ротацию логов отвечает утилита logrotate. Обычно она уже установлена в «базе».

Для настройки используется каталог /etc/logrotate.d В этой папке необходимо добавить файл вида:

/home/user/ocpp_servers/*.log {
        weekly
        missingok
        rotate 90
        compress
        delaycompress
        notifempty
        create 755 root adm
        sharedscripts
}

Собственно просто указываем файлы которые нуждаются в «ротации», и внутри скобок — что делать с ними.

  • rotate — указывает сколько старых логов нужно хранить, в параметрах передается количество;
  • create — указывает, что необходимо создать пустой лог файл после перемещения старого;
  • dateext — добавляет дату ротации перед заголовком старого лога;
  • compress — указывает, что лог необходимо сжимать;
  • delaycompress — не сжимать последний и предпоследний журнал;
  • extension — сохранять оригинальный лог файл после ротации, если у него указанное расширение;
  • mail — отправлять Email после завершения ротации;
  • maxage — выполнять ротацию журналов, если они старше, чем указано;
  • missingok — не выдавать ошибки, если лог файла не существует;
  • olddir — перемещать старые логи в отдельную папку;
  • postrotate/endscript — выполнить произвольные команды после ротации;
  • start — номер, с которого будет начата нумерация старых логов;
  • size — размер лога, когда он будет перемещен;
  • hourly — каждый час;
  • daily — каждый день;
  • weekly — каждую неделю;
  • monthly — каждый месяц;
  • yearly — каждый год.

Тестирование получившейся конфигурации:

logrotate -d /etc/logrotate.d/ocpp

Логирование и аудит потенциально опасных событий на сервере Linux

Задача: при изменении критически важных файлов, запуск из под sudo, создание тоннелей SSH и переброс портов — отсылать уведомление об этом на почту.

Решение: воспользуемся штатным демоном auditd и сторонней утилитой wazuh

Установка auditd:

apt install auditd

Просмотр текущих действующих правил:

auditctl -l -a never,task

Стереть все действующие правила:

auditctl -D

1) Настроить уведомление об изменении файлов /etc/paswd и /etc/shadow

auditctl -w /etc/passwd -p wa -k passwd_watch
auditctl -w /etc/shadow -p wa -k shadow_watch

, где -p — обозначает при каком условии будет сделана запись в журнал:

  • r — операция чтения данных из файла
  • w — операция записи данных в файл
  • x — операция исполнения файла
  • a — операция изменения атрибутов файла или директории

Что бы правила работали на постоянной основе, их нужно добавить в файл /etc/audit/rules.d/audit.rules после чего перезапустить демон

systemctl restart auditd.service

2) Настройка уведомления о выполнении команд от sudo/root:

auditctl -a exit,always -F arch=b64 -F euid=0 -S execve -k rootcmd
auditctl -a exit,always -F arch=b32 -F euid=0 -S execve -k rootcmd

3) Для того чтобы уведомления из журнала /etc/audit/audit.log отправлялись на почту, нужно установить wazuh-manager:

add-apt-repository ppa:openjdk-r/ppa
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add -
echo "deb https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list
apt-get update
apt-get install wazuh-manager
systemctl daemon-reload
systemctl enable wazuh-manager
systemctl start wazuh-manager

И соответственно добавить в конфигурационный файл /var/ossec/etc/ossec.conf, отслеживание изменений:

<localfile>
    <location>/var/log/audit/audit.log</location>
    <log_format>audit</log_format>
  </localfile>

В этом же файле нужно настроить секцию касающуюся отправки уведомлений по email — отправитель, получатель.

Далее добавляем ключевые слова в /var/ossec/etc/lists/audit-keys, для фильтрации событий:

passwd_watch:read
shadow_watch:read
sudo:read

И добавить правило срабатывания в /var/ossec/etc/rules/local_rules.xml:

<group name="audit">
  < <rule id="100002" level="12">
      <if_sid>80700</if_sid>
      <match>sudo</match>
      <options>alert_by_email</options>
      <description>Выполнена команда от SUDO сервер sdcsdcezs.sadcasd.ru</description>
  </rule>
  <rule id="100003" level="12">
      <if_sid>80701</if_sid>
      <match>passwd_watch</match>
      <options>alert_by_email</options>
      <description>Изменился файл /etc/passwd</description>
  </rule>
</group>

Linux: при использовании rm ошибка Argument list too long

Ошибка возникает при очень большом количестве файлов в каталоге. Фактически оно обычно ограничено 2097152 штуками (getconf ARG_MAX).

Решение:

find . -type f -delete

Или просто удалите целиком веь каталог и создайте вновь

Memcached: MemcachePool::get(): Server localhost (tcp 11211, udp 0) failed with: Network timeout

После очередной перезагрузки сервера, при работе с memcached из PHP стали валиться ошибки вида:


MemcachePool::get(): Server localhost (tcp 11211, udp 0) failed with: Network timeout

Решение: перевел memcached в режим debug и увидиел, что не может создать папку /var/run/memcached.socket (premission denied). Для того чтобы мог сам создавать, в /etc/memcached.conf добавил возможность запуска сервиса из под root:

-u root

PostgreeSQL: контроль уникальности вставки

Хороший вариант: возложить контроль уникальности вставляемых данных, на уровень БД. Если это по каким-то причинам не возможно, то можно попробовать такой вариант:

insert into users_groups_filling (user_id,user_group) 
select  :user_id,:user_group 
where 
 NOT EXISTS (
	 SELECT id from users_groups_filling where user_id=:user_id and user_group=:user_group
 )
1 9 10 11 12 13 59