postgresql: выполнение запроса из командной строки

Задача: периодически необходимо подрезать логи

Решение: самое простое подготовить скрипт на bash и разместить ссылку на его выполнение в crontab:

#!/bin/bash
PGPASSWORD="Zewkkjfoeir" psql -U eee_pg -d eee -c "delete from log where dt<now() - INTERVAL '90 DAYS'"

Insert или Update если не уникальная запись

Маленькая напоминалка . Синтаксис pgsql чуть отличается от mysql.

Задача: если запись не уникальна в таблице, то просто обновить дату последнего обновления.

MySQL:

INSERT INTO users_sessions(user_id, ssid) VALUES(10, "1") ON DUPLICATE KEY UPDATE last_updated=now()

PostgreeSQL:

insert into users_sessions (user_id,ssid) values (10,'1') on conflict(ssid) do update set last_updated=now();

Уникальным должен быть объявлен столбец ssid

Ошибка обновления Ubuntu с 20.04 до 22.04

При попытке выполнить do-release-upgrade, получаем ошибку:

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts-development.

Решение:

В моём случае в логах проскочило:

esult of meta-release download: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841)

Так-же можно проверить «тухлость» сертификата при помощи:

wget https://changelogs.ubuntu.com/meta-release-lts-development

Рекомендация обновить корневые сертификаты не помогла. Одно из решений — отключить проверку сертификатов при обновлении вообще. Для этого нужно отредактировать файл /usr/lib/python3/dist-packages/UpdateManager/Core/MetaRelease.py, добавив в него строки:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

После чего обновление прошло штатно.

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>

1 8 9 10 11 12 59