Роман Теличко

Заметки веб-разработчика/админа

PostgreSQL 9.5 в Ubuntu 15.10+

// Февраль 15, 2016 | 1123 просмотров | комментариев (0)

Добавляем в /etc/apt/sources.list адрес к репозиторию с последним PostgreSQL:

sudo -s
echo "deb https://apt.postgresql.org/pub/repos/apt/ `lsb_release -s -c`-pgdg main" >> /etc/apt/sources.list

Получаем «волшебный» ключик:

sudo wget --quiet -O - https://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc|sudo apt-key add -

И теперь всё просто:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

И можно поставить, если у вас ещё не было:

sudo apt-get install postgresql-9.5

Создаём и оптимизируем свой tile-сервер для OpenStreetMap на основе Ubuntu 14.04

// Сентябрь 15, 2015 | 10472 просмотров | 2 комментария

Сегодня я расскажу как довольно просто поднять и настроить свой собственный сервер карт (тайловый сервер) на основе Ubuntu Server 14.04 LTS и OpenStreetMap.

Итак начнём. Из Википедии:

OpenStreetMap (дословно «открытая карта улиц»), сокращённо OSM — некоммерческий веб-картографический проект по созданию силами сообщества участников-пользователей Интернета подробной свободной и бесплатной географической карты мира.

Есть довольно подробная официальная статья об установке и настройке tile-сервера, но есть ещё более простой и быстрый способ.
Читать далее…

Linux. Установка и настройка анализатора логов Logwatch

// Апрель 30, 2015 | 3149 просмотров | комментариев (1)

logwatch — это анализатор системных логов (журналов), начиная от /var/log/messages и заканчивая логами CISCO-оборудования. Результаты анализа утилита группирует и помещает в отчёт, который может как выводиться в stdout, так и отправляться электронной почтой или сохраняется в файл. Формат отчёта предлагается в трех вариантах: plaintext, HTML или файл, при этом вы можете регулировать уровень детализации отчёта исходя из собственных потребностей.
Сегодня я расскажу вам как его установить и настроить.

Ставится он в Debian/Ubuntu довольно просто:

sudo apt-get install logwatch

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

cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/

И открываем на редактирование:

vi /etc/logwatch/conf/logwatch.conf

Настраиваем:

  • Задаём месторасположение временной директории

    TmpDir = /tmp
  • Вид отправки отчета по-умолчанию задаём как

    Output = mail

    чтобы получать отчёты не в stdout (поток стандартного вывода), а на почту.

  • Формат отчёта выбираем HTML, а не plaintext

    Format = html
  • Указываем ваш email, куда будут отправлены ежедневные отчёты

    MailTo = roman@romantelycko.com
  • Задаёт имя и адрес отправителя (потом удобно создать фильтр)

    MailFrom = logwatch@myserver.com
  • Задаём за какой период времени отбирать анализируемые сообщения: all, today или yesterday

    Range = yesterday
  • Определяем уровень детализации отчёта. Может принимать как числовые значения от 0 (минимум детализации) до 10 (максимум). Также можно использовать синонимы: Low, Med и High, которые соответственно равны числовым 0, 5 и 10;

    Detail = Med
  • Задаём имя службы (имя файла из каталога /usr/share/logwatch/scripts/services/), логи которой необходимо анализировать. Если указать значение All, то будут обрабатываться все службы. Более того, можно некоторые из них исключить из отчёта указав перед именем службы минус ("-"). Например включаю в отчёт все службы кроме http и exim:

    Service = All
    Service = "-eximstats"
    Service = "-http"

Внешне вывод в HTML виде выглядит страшненько. Прямо «Привет из 90х».
Лично я сам формат стилизовал следующим образом, хотя можно найти и другие темы в Сети.

Открываем файл HTML-шаблона

vi /usr/share/logwatch/default.conf/html/header.html

И заменяем наш <style>...</style> на следующий:

<style type="text/css">
    body,h1,h2,h3 { 
        margin:0; padding:0; color:#404040;
        font:16px/16px courier,"courier new",Verdana,Arial,sans-serif; 
    }
    a { color:#227596; font-size:14px; }
    ul li a { font-size:18px; line-height:22px; }
    .service { padding:20px 0 0 20px; } 
    .return_link { padding:10px 0 30px 20px; }
    table,tr,td,th { 
        border:0!important; border-collapse:collapse; 
        font:14px/18px courier,"courier new",Verdana,Arial,sans-serif; 
        color:#404040; text-align:left; background: #ffffff; 
    }
    td,th { padding:2px 4px; margin:0; }  
    h1, h1 a, h2, h2 a, h3, h3 a, th { font-size:16px; }
</style>

Проверим работу logwatch. Отчет должен сформироваться и прийти на почту.

/etc/cron.daily/00logwatch

Это всё. Удачи.

Конвертация FLAC в MP3

// Сентябрь 17, 2014 | 1571 просмотров | комментариев (0)

Сегодня я расскажу вам о простом способе конвертации вашей музыки из .flac в .mp3 через консоль Linux/Ubuntu

sudo apt-get install flac lame

Затем переходим в папку с музыкой в формате .flac и запускаем перекодировку в .mp3 в качестве 320 kbps (файлы .flac НЕ будут удалены)

for f in *.flac; do flac -cd "$f" | lame -b 320 - "${f%.*}".mp3; done

Это всё.

Ускоряем Chromium за счёт tmpfs в Linux

// Июнь 6, 2014 | 5840 просмотров | комментариев (1)

Есть довольно простой способ ускорить работу браузера Chromium (Google Chrome) явно указав путь к папке с временными файлами что будет находиться в оперативной памяти (ОЗУ). Этот приём будет особенно полезен владельцам SSD-дисков ресурс перезаписи которых очень ограничен.

Добавляем временное хранилище размером в 1GB (должно хватить), что будет находиться в оперативной памяти (ОЗУ):

sudo mkdir /ram
sudo vi /etc/fstab
tmpfs    /ram    tmpfs    defaults,noatime,mode=1777,size=1024M    0    0

Монтируем:

sudo mount -a

Смотрим:

df -h

Должно быть что-то такое:

Ф. система   Розм     Вик       Дост      Вик%      змонтований на
tmpfs        1,0G     0         1,0G      0%        /ram

Теперь редактируем файл с default-настройками Chromium, явно указывая ему путь к нашему временному хранилищу:

sudo vi /etc/chromium-browser/default

Меняем строчку

CHROMIUM_FLAGS=""

На следующую:

CHROMIUM_FLAGS="--disk-cache-dir=/ram"

Перезапускаем браузер Chromium и смотрим на использование ОЗУ диска:

df -h

Если у вас в колонке «Использовано» что-то большее нуля, то вы всё сделали правильно.

Ф. система   Розм     Вик       Дост      Вик%      змонтований на
tmpfs        1,0G     17M       1008M     2%        /ram

В результате Chromium стал реактивным 🙂
Это всё.
Удачи!

Linux. Список сервисов в автозагрузке

// Июнь 3, 2014 | 11051 просмотров | комментариев (1)

Самый простой и наглядный способ вывести список сервисов/программ, находящихся в автозагрузке, с возможностью их редактирования — это использовать консольную утилиту sysv-rc-conf

Ставим

sudo apt-get install sysv-rc-conf

Запускаем

sudo sysv-rc-conf

и получаем картину:

sysv-rc-conf

Теперь с помощью пробела мы можем включить или выключить автозагрузку сервиса, - — остановит сервис, а +/= — запустит.
Пользуйтесь!

Управление менеджером терминалов tmux

// Май 27, 2014 | 1967 просмотров | комментариев (0)

tmux — свободная консольная утилита-мультиплексор, предоставляющая пользователю доступ к нескольким терминалам в рамках одного экрана. tmux может быть отключен от экрана: в этом случае он продолжит исполняться в фоновом режиме; имеется возможность вновь подключиться к tmux, находящемуся в фоне.

При старте tmux создаёт новую сессию с единственным окном и отображает её на экране. В статусной строке в самом низу экрана отображается информация о текущей сессии; эта же строка используется для ввода команд tmux.

Это как screen, только намного лучше 🙂

  • Очень хороший способ запустить tmux. Делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый

    tmux attach || tmux
  • Вывести список существующих сессий

    tmux ls

Попав в tmux вы можете давать команды управления им только после нажатия сочетания CTRL + b.

Важно сказать что вы может не просто создавать новые окна, а ещё и добавлять панели в каждое окно. Например вы можете разделить одно окно на 2 части (панели) — верхнюю и нижнюю или левую и правую.

Небольшая шпаргалка управления tmux:

CTRL+b c Создать новое окно
CTRL+b 0..9 Переход между окнами 0..9
CTRL+b p Перейти в предыдущее окно
CTRL+b n Перейти в следующее окно
CTRL+b l Перейти в предыдущее активное окошко (из которого вы переключились в текущее)
CTRL+b w Список всех окон
CTRL+b & Закрыть окно (или можно набрать просто exit)
CTRL+b % Разделить текущую панель на две, по вертикали
CTRL+b " Разделить текущую панель на две, по горизонтали
CTRL+b →←↑↓ Переход между панелями одного окна
CTRL+b x Закрыть панель
CTRL+b d Отключится (прервать соединение)
CTRL+b ? Справка обо всех комбинациях клавиш
CTRL+b & Отобразить часы (закрыть их можно нажатием любой кнопки)

Читать далее…

Linux. Настройка двухэтапной аутентификации для пользователя root

// Апрель 15, 2014 | 1820 просмотров | комментариев (0)

Сегодня я расскажу как настроить двухэтапную аутентификацию для пользователя root на вашем сервере по временному одноразовому паролю, что будет генерировать приложение на телефоне или же простая консоль. Смысл в том, что при переходе в суперпользователя на вашем сервере вначале будет запрошен временный (одноразовый) пароль и только затем — пароль рута. Это поможет вам более качественно защитить ваш сервер от несанкционированного доступа.

Начнём с установки OATH Toolkit что уже есть в репозитории Debian.

apt-get install oathtool libpam-oath

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

head -c 4096 /dev/urandom | md5sum | awk '{print $1}'
6819c89679c56508fec770362e312c4e

В данном примере секретная фраза это 6819c89679c56508fec770362e312c4e.

Теперь нам необходимо создать файл (/etc/users.oath) с описанием алгоритмов работы, пользователя и его секретной фразы.

echo "HOTP/T30 root - 6819c89679c56508fec770362e312c4e" > /etc/users.oath
chown root:root /etc/users.oath
chmod 600 /etc/users.oath

Далее — редактирование файла /etc/pam.d/su.
Вам необходимо дописать после

auth       sufficient pam_rootok.so

строку

auth requisite  pam_oath.so usersfile=/etc/users.oath window=10 digits=6

Где
usersfile — путь к файлу с описанием пользователей и их секретных фраз,
window — размер «окна». Поскольку временный одноразовый ключ создаётся относительно времени, то окно — это расхождение серверного времени от времени клиента/приложения. Одно «окно» — 30 секунд. Т.е. мы задали максимальное расхождение ключей в 5 минут.
digits — необходимое количество цифр во временном одноразовом ключе.

Теперь пробуем получить одноразовый временный пароль с нашей секретной фразой:

oathtool --verbose --totp 6819c89679c56508fec770362e312c4e

На что получим что-то следующее:

Hex secret: 6819c89679c56508fec770362e312c4e
Base32 secret: NAM4RFTZYVSQR7WHOA3C4MJMJY======
Digits: 6
Window size: 0
Step size (seconds): 30
Start time: 1970-01-01 00:00:00 UTC (0)
Current time: 2014-04-15 05:36:28 UTC (1397540188)
Counter: 0x2C6D360 (46584672)

385762

385762 — это и есть наш одноразовый временный пароль, а вот строку Base32 secret мы будем использовать когда будем настраивать приложение для телефона (только вводить мы будем этот код без знаков «=», т.е. как NAM4RFTZYVSQR7WHOA3C4MJMJY).

У Google есть отличная программа для генерирования временных (одноразовых) ключей — Google Authenticator
На официальной странице детально расписано как установить это приложение для телефонов на базе Android, iOS, Blackberry и т.п. поэтому на этом шаге я останавливаться не буду.

И наконец тестируем!

Подключаемся к серверу другим соединением (на всякий случай не закрывайте сессию root!) и пробуем сделать su
Система должна нас вначале спросить одноразовый временный пароль.

$ su
One-time password (OATH) for `root':

Генерируем одноразовый временный пароль либо через консоль с помощью команды oathtool, либо через приложение на вашем телефоне и вводим его.
Если вы всё сделали правильно, то после ввода временного пароля система вам предложит ввести пароль рута.

Это всё. Удачи!

ТОП 15 продвинутых команд для работы с tcpdump

// Февраль 14, 2014 | 7990 просмотров | комментариев (0)

Решил составить ТОП 15 самых интерестных способов использования программы анализатора траффика (сниффера) tcpdump.

  • Получение всей полезной информации о пакете.

    tcpdump -nnvvXSs 1514 -i 
  • Перехват логина и пароля для протоколов pop3, imap, smtp и http

    tcpdump -i  port http or port smtp or port imap or port pop3 -l -A \
    | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|userna me:|password:|login:|pass |user '
  • Сниффинг HTTP траффика

    tcpdump -i  port 80 -w -
  • Анализирует траффик удаленно через SSH с помощью Wireshark

    ssh root@HOST tcpdump -U -s0 -w - 'not port 22' | wireshark -k -i -
  • Отображает пропускную возможность сети.

    tcpdump -w - | pv -bert >/dev/null
  • Сниффинг удаленной сети для получения pcap файла в режиме командной строки.
    Прервать сбор можно нажатием CTRL+C, после чего открыть его с помощью wireshark для более детального анализа так: wireshark /tmp/sniff.pcap
    Запускается на удалённом хосте.

    tcpdump -v -i  -s 0 -w /tmp/sniff.pcap port 
  • Анализ SMTP. Вы можете запустить это на почтовом сервере, чтобы посмотреть отправителей электронной почты и получателей.

    tcpdump -l -s0 -w - tcp dst port 25 | strings | grep -i 'MAIL FROM\|RCPT TO'
  • Захват 1500 байт данных в ASCII-режиме на 80-ом порту.

    tcpdump -i  -n tcp port 80 -A -s1500
  • Захват траффика memcached

    tcpdump -i  -s 65535 -A -ttt port 11211
  • Сниффинг траффика и переадресация его в snort на машину 192.168.0.2
    Запускается на удалённом хосте.

    tcpdump -nn -i  -w - | nc 192.168.0.2 666
  • Получение информации о Cisco-сети (VLAN тэг, порт, switch, …)

    tcpdump -nn -v -i  -s 1500 -c 1 'ether[20:2] == 0x2000'
  • Отображение SYN-пакетов для всех сетевых интерфейсов

    tcpdump -i any -n tcp[13] == 2
  • Сниффинг всех DNS запросов и ответов

    tcpdump -i  'udp port 53'
  • Сниффинг TCP и UDP траффика, исключая SSH

    tcpdump -n -v tcp or udp or icmp and not port 22

Увеличиваем таймаут разрыва соединения с сервером через SSH

// Февраль 13, 2014 | 3054 просмотров | комментариев (0)

Иногда необходимо постоянно (или довольно долго) держать соединение с сервером по SSH. Но это наталкивает на проблему разрыва соединения с сервером из-за длительной неактивности клиента. Существует 2 варианта решения этой проблемы.

Способ №1.
Если у вас есть root-доступ к серверу, то вы можете просто установить значение в файле конфигурации SSH /etc/ssh/sshd_config

ClientAliveInterval 60

Эта строчка устанавливает интервал времени ожидания в секундах, после которого демон SSH sshd отправит клиенту NULL-пакет для поддержания соединения.
По умолчанию, значение этой переменной 0, что означает что сервер не будет поддерживать соединение с клиентом и разорвёт его после длительного отсутствия активности.
Не забудьте перезапустить sshd на сервере после сохранения файла.

Способ №2.
Второй способ проще и его можно применить ко всем вашим SSH-подключениям сразу.
Просто добавьте эти строчки в файл ~/.ssh/config на вашей локальной машине:

Host *
  ServerAliveInterval 60

Если у вас не было этого файла, тогда создайте его, установив ему права 600:

chmod 600 ~/.ssh/config

Эти строчки заставляют отправлять ваш ssh-клиент каждые 60 секунд KeepAlive сообщения для всех серверов к которым вы будете подключаться, тем самым поддерживая с ними постоянное соединение.

Это всё.