суббота, 15 декабря 2018 г.

Создание read-only пользователя в PostgreSQL

Источник: https://gist.github.com/oinopion/4a207726edba8b99fd0be31cb28124d0

Сохраню себе для копипасты.

-- Create a group
CREATE ROLE readaccess;

-- Grant access to existing tables
GRANT USAGE ON SCHEMA public TO readaccess;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readaccess;

-- Grant access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readaccess;

-- Create a final user with password
CREATE USER user WITH PASSWORD 'secret';
GRANT readaccess TO user;

суббота, 3 ноября 2018 г.

Видео докладов с конференции DevOps Stage 2018

В середине октября прошла двухдневная конференция в Киеве DevOps Stage.
Доклады были разбиты на три категории:


Само собой все доклады мне посетить не удалось, но могу выделить для себя те, которые понравились больше всего.

Yevhen Volchenko | KUBERNETES ATTACK SURFACES AND WAYS TO SECURE THEM
Практические советы о том как защитить Kubernetes.
Хорошие пояснения что и почему надо защищать с примерами конфигураций.

Volodymyr Tsap | ON THE ROAD TO 6.9K. HOW TO SUCCEED IN TECHNICAL INTERVIEW
Мем про 6.9к известен в киевской девопс-тусовке (ссылку на статью не оставляю, но гуглится по запросу "DevOps с комплексом бога запросил зарплату в $6.9К").
Доклад интересен прежде всего интересной подачей с кучей лулзов.
В докладе интересно рассказывается про описание работы инженера, с какими технологиями он работает, что должен знать, какие вопросы обычно задают на собеседовании и прочее.

Yurii Rochniak | CI DOESN’T START WITH JENKINS
Юра рассказывает про то как мы пытаемся варить девопс в Preply, какие технологии и тулы используем, как эволюционируем и почему.
Одним из вопросов из зала был, как мы раним Kubernetes на спот-инстансах в AWS, после чего Юра написал полноценную статью, которая отвечает на этот вопрос.

Juliya Tkachova | DEVOPS ON SCALE FROM PHILOSOPHY TO TOOLSET
В этом докладе рассказывается про девопс со множеством примеров факапов.
Причем название доклада полностью описывает его содержание, поэтому интересен как со стороны философии, так и со стороны набора инструментов и технологий.

Был еще один хороший доклад от Mark Smalley, но я его не нашел в тех плейлистах.

суббота, 13 октября 2018 г.

Видео докладов с конференции OSDN 2018

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

Рекомендую к просмотру доклады:
— Леннарта Поттеринга — Locking Down Your Systemd Services (Леннарта слушать интересно)

— Максима Богука — Использование статистики в PostgreSQL для оптимизации производительности (узнал для себя много нового про Postgres)

Также мне было интересно послушать доклад Николая Маржана — Amazon RDS Monitoring, так как я использую PostgreSQL в амазоновском RDS.

воскресенье, 7 октября 2018 г.

Долой cat и less, да здравствует bat!

https://github.com/sharkdp/bat

Что умеет:
- подсветка номеров строк и синтаксиса (довольно много различных языков и разметок)
- если содержимое файла влезает в экран, работает как cat, если нет — как less
- поддержка git diff
- поддержка конкатенации файлов, равно как и cat
- при этом все эти штуки можно включать и отключать как удобно

Как привыкаем:
echo alias cat='bat' >> ~/.bash_profile
echo alias less='bat' >> ~/.bash_profile
source ~/.bash_profile
cat README.md


суббота, 29 сентября 2018 г.

Бекапим все свои репозитории локально с GitHub

Идем в настройки и генерируем токен с правами repo: https://github.com/settings/tokens

Запускаем бекап на локальную машину всех своих репозиториев:
export GITHUB_AT=yourtokenfromgithub
export USERNAME=MyGithubUser
curl -s https://$GITHUB_AT:@api.github.com/users/$USERNAME/repos?per_page=200 | \

jq .[].ssh_url | \
xargs -n 1 git clone

На случай пожара, так сказать.

суббота, 8 сентября 2018 г.

Автоскейлинг нод в Kubernetes

В этой заметке мы устанавливали кластер Kubernetes в AWS с помощью kops.
А в данной заметке я опишу настройки автоскейлинга нод в Kubernetes.

Для того чтобы автоскейлинг работал, необходимо его установить в кластер в неймспейс kube-system.

Перед непосредственной установкой, убедитесь что на всех нодах, которые вы хотите скейлить есть соответствующие лейблы:
kops get ig
kops edit ig nodes
...
spec:
  cloudLabels:
    k8s.io/cluster-autoscaler/enabled: ""
    kubernetes.io/cluster/k8s-dev.domain.org: ""

Эта команда будет создавать ноды с соответствующими лейблами, поэтому важно повесить лейблы также и на существующие ноды.

Подготовим файл конфигурации для автоскейлера:
cat << EOF > values.yml
autoDiscovery:
  clusterName: k8s-dev.domain.org
awsRegion: eu-west-1
cloudProvider: aws
extraArgs:
  balance-similar-node-groups: true
  expander: random
  skip-nodes-with-system-pods=false: false
rbac:
  create: true
  pspEnabled: true
scale-down-delay: 5m
v: 2
EOF

Установка автоскейлера:
helm install stable/cluster-autoscaler --name autoscaler -f values.yml

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

суббота, 1 сентября 2018 г.

Установка Kubernetes с помощью kops в AWS

В этой заметке я опишу, как быстро с нуля поднять рабочий кластер k8s в облаке амазона.
Если у вас много денег, можете использовать EKS (который еще недоступен во многих регионах), в качестве альтернативы я использую именно связку AWS+kops.

Ставим необходимые пакеты для работы с кубером (моя локальная ОС Mac OS X)
brew update
brew install awscli kubectl kops kubernetes-helm

суббота, 21 июля 2018 г.

Mac OS X Mojave beta и чекбоксы в Google Chrome

Google Chrome пока еще не поддерживает Mac OS Mojave и некорректно отображает чекбоксы (и не только, например некоторые кнопки также не отображаются).

Чтобы обойти это, существует плагин для хрома, который устанавливаем размер каждой страницы 1.000001, что является костылем, до тех пор, пока Chrome не начнет поддерживать Mojave.

До плагина:
После:

Если еще кому-то интересно, то я заметил еще несколько багов, которые пока не поправили:
Dropbox, как-то странно отображается окно:

TextEdit, не всегда закрывается с первого раза.
Был также баг в Finder, при котором нельзя было из бокового меню извлечь внешний носитель, но это поправили.
VirtualBox не работает на Mojave.

понедельник, 16 июля 2018 г.

Как скопировать права роли в PostgreSQL

Все очень просто, у нас есть роль olduser и мы хотим чтобы у нового пользователя newuser были такие же права на таблицы как и у olduser:
CREATE ROLE newuser WITH LOGIN PASSWORD 'password' CREATEDB CREATEROLE;
GRANT olduser TO newuser;

пятница, 13 июля 2018 г.

Обновление версии PostgreSQL в Amazon RDS без даунтайма

Цель: обновить инстанс PostgreSQL, который работает на версии 9.4 до 9.5.

RDS не позволяет обновлять PostgreSQL на несколько мажорных версий, поэтому если нужно обновиться например с 9.4 до 10, то итерацию придется повторять несколько раз.

Также важно то, чтобы были доступы для rds_superuser, без этого не получится настроить репликацию.

Пример как это все работает на тестовом стенде я описал ниже.

воскресенье, 1 июля 2018 г.

Настройка Hashicorp Vault для генерации одноразовых паролей (OTP) для SSH

Vault — это инструмент для управления секретами от компании Hashicorp известной также другими интересными тулами, такими как Consul, Nomad, Terraform, Vagrant, Packer и прочими.

Vault удобен тем, что может хранить различные типы секретов, например одноразовые пароли для SSH, доступы к БД, облачным сервисам и прочие key-value варианты. Получается некий аналог keepass/lastpass и google authenticator pam.

Удобство хашикорповских тулов заключается в том, что они распространяются единым бинарником и легко настраиваются, в том числе и Vault. У Vault неплохая документация, по которой в принципе все понятно.

В данной заметке я опишу вариант использования One-Time Passwords для логина в SSH, вместо мучений с менеджментом ssh-ключей.

суббота, 16 июня 2018 г.

Разница между su, su -, sudo -i, sudo -s

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

Для получения прав рута на сервере я обычно использую команду sudo -s, почему именно ее — точно не вспомню, просто исторически сложилось и каких-либо проблем по этому поводу не испытывал.

Как оказалось, моя ошибка при настройке Vault была именно в том, что рута я получал именно такой командой.
Вот что пишут в мане:
-s, --shell Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

Команда запускает shell из-под рута без смены директории, при этом не импортируются переменные окружения, которые прописаны например в .bash_profile или .login.

В случае sudo -i совсем другая история:
-i, --login Run the shell specified by the target user's password database entry as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. The command is run with an environment similar to the one a user would receive at log in. The Command environment section in the sudoers(5) manual documents how the -i option affects the environment in which a command is run when the sudoers policy is in use.

Тут запускается shell со сменой директории пользователя и импортом переменных окружения.

В случае su и su - тоже есть разница.
su - в этом случае сначала переключается пользователь, а затем вызывается shell, то есть очищая все переменные окружения и запуская чистую сессию рута.
su не очищает переменные окружения, а просто переключает пользователя оставляя переменные окружения старого пользователя.

понедельник, 11 июня 2018 г.

понедельник, 14 мая 2018 г.

Вопросы на собеседовании на позицию DevOps-инженера

Опишу тут некоторые вопросы, которые мне задавали на эту позицию.
Я около месяца проходил собеседования в компании из России, Украины, Европы и некоторые из вопросов я запомнил. Конечно, по большей части вопросы задавали конкретно по моему опыту работы, который я описал в резюме, однако некоторые из них повторялись очень часто и их стоит выделить.

суббота, 5 мая 2018 г.

Работа с памятью в Linux

Одной из наиболее важных и базовых подсистем в любой операционной системе является подсистема работы с оперативной памятью (MMU — Memory Management Unit). Конструкция данной подсистемы является очень сложной, поэтому разработчикам программного обеспечения должны очень хорошо понимать общее устройство как ядра Linux, так и то, как функционируют подобные подсистемы, к счастью все это отлично документировано в исходных кодах ядра.

вторник, 1 мая 2018 г.

Как я могу узнать свой внешний IP-адрес

Для идентификации компьютеров сети используются адреса. На уровне данных используются MAC-адреса, каждый MAC-адрес является уникальным и устанавливается производителем на этапе производства. Формат MAC-адреса представляет собой набор из шести октетов в шестнадцатиричном формате, примером MAC-адреса является 20:89:84:59:0B:6A

Хоть MAC-адрес и является уникальным, его можно изменить программно во многих случаях, в других же случаях это можно сделать с помощью программатора. Изменение MAC-адреса может привести к неожиданным последствиям, в случае использования дублирующихся в одной подсети.

пятница, 20 апреля 2018 г.

Быстрая установка стека ELK (Elasticsearch+Logstash+Kibana) на Debian 9

Ставим все необходимые пакеты:
# apt install -y openjdk-9-jre apt-transport-https
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
# apt update && apt install elasticsearch kibana logstash packetbeat metricbeat filebeat heartbeat -y

Запускаем elasticsearch на локалхосте:
# vim /etc/elasticsearch/elasticsearch.yml
network.host: 127.0.0.1

Прописываем конфиг logstash:
# vim /etc/logstash/conf.d/10-syslog.conf
input {
  file {
    type => "syslog"
    path => [ "/var/log/messages", "/var/log/*.log" ]
  }
}
output {
  stdout { 
    codec => rubydebug
    }
    elasticsearch {
      hosts => "localhost"
    }
}

Запускаем сервисы:
# systemctl enable elasticsearch kibana logstash filebeat packetbeat metricbeat heartbeat
# systemctl start elasticsearch kibana logstash filebeat packetbeat metricbeat heartbeat

Идем по адресу: http://localhost:5601

вторник, 17 апреля 2018 г.

Использование Terraform для управления инфраструктурой Google Cloud Platform

Terraform — это инструмент, с помощью которого можно описать серверную инфраструктуру в виде кода.
К примеру для создания определенного количества виртуальных машин и других объектов в облачной инфраструктуре не нужно каждый раз вручную создавать инстансы или писать плейбуки для Ansible или какие-то обертки над API, достаточно просто в человекочитаемом виде записать как будет представлена инфраструктура и в случае чего ее можно легко развернуть.

понедельник, 16 апреля 2018 г.

Как запускать 32-битные программы на 64-битном дистрибутиве Linux

На сегодняшний день все выпускаемые процессоры так или иначе поддерживают 64-битную архитектуру. В связи с тем, что 32-битные процессоры могут адресовать 232 бита данных, они не могут работать с памятью более 4 Гб, однако процессоры на архитектуре x86-64, могут работать с гораздо более большим объемом памяти. Отличительными особенностями новых процессоров является поддержка 64-битных регистров общего назначения (РОН), арифметических и логических операций над целыми числами и поддержкой 64-битных виртуальных адресов.

воскресенье, 8 апреля 2018 г.

Безопасное и удобное использование SSH

На сегодняшний день, системные инженеры, программисты имеют возможность безопасно управлять сервером на Linux удаленно с помощью консоли. Для Windows существуют специальные утилиты для подключения к Linux-серверам по SSH, такие как Putty, для пользователей MacOS и Linux можно использовать встроенный в операционную систему пакет ssh-client. Помимо SSH существуют и другие технологии удаленного доступа к физическим и виртуальным серверам: IPMI, VNC, RDP и прочие.

понедельник, 2 апреля 2018 г.

Права доступа в Linux

На сегодняшний день операционная система GNU/Linux считается одной из самых безопасных. Она используется на большинстве самых крупных суперкомпьютеров мира, значительно опережая другие операционные системы семейства UNIX и Windows. Одним из ключевых факторов безопасности системы GNU/Linux является управление доступами.

Функция управления правами пользователей и групп зародилась еще во времена первых версий UNIX и присутствует до сих пор на всех современных операционных системах. Контроль доступа позволяет владельцам файлов/каталогов ограничивать права на чтение, исполнение и запись файлов, директорий, процессов и других частей системы.

суббота, 17 марта 2018 г.

Как защититься от DDoS-атаки

Итак, вы находитесь под DoS/DDoS атакой.
Как определить что это именно DDoS-атака? Если трафик поступает из нескольких разных сетей, то это распределенная атака (DDoS), если трафик идет из одной подсети, то это DoS.
На Linux-сервере проверить текущее количество сетевых соединений можно с помощью утилиты netstat:
$ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -3
    312 192.168.0.10
    256 192.168.1.32
    121 192.168.0.11

пятница, 9 марта 2018 г.

Как узнать размер баз данных в MySQL

mysql> SELECT table_schema "DB Name", Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables  GROUP BY table_schema;
+--------------------+---------------+
| DB Name            | DB Size in MB |
+--------------------+---------------+
| cards              |           0.0 |
| info               |         267.3 |
| information_schema |           0.0 |
| mysql              |           0.6 |
| quickdat           |        3214.9 |
| quickdat_notif     |          65.7 |
| scgraf             |        9783.9 |
| test               |           0.0 |
+--------------------+---------------+
8 rows in set (4.70 sec)

воскресенье, 4 марта 2018 г.

Что должен знать новичок для работы системным администратором Linux

Прежде всего, системный администратор должен отлично разбираться в операционной системе которую он администрирует. Администратор должен понимать все плюсы и минусы используемой системы, различия в дистрибутивах, используемых интерпретаторов по умолчанию, предустановленном программном обеспечении, управлении системными сервисами, системой инициализации, системой управления пакетами, версиях программного обеспечения в репозиториях, расположении конфигурационных файлов и особенностях настройки дистрибутива.

Например при переходе с Debian-based дистрибутивов на RHEL-based может быть непривычно то, что cron пишет в отдельный лог /var/log/cron, а не в /var/log/syslog, а для определения версии дистрибутива вместо /etc/lsb-release используется файл /etc/redhat-release. Или например при переходе Ubuntu с системы инициализации Upstart на Systemd могут возникнуть некоторые сложности при управлении сервисами, хоть Ubuntu и сохранили обратную совместимость со скриптами Upstart.

четверг, 1 марта 2018 г.

Как отправлять письма так, чтобы они не попадали в спам

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

Правильно составлять письма нужно уметь, поэтому следует придерживаться нескольких простых правил.
Во-первых, если рассылка является массовой, то обязательно должна присутствовать ссылка на отписку на рассылку.
Во-вторых, рассылка должна вестись с валидного авторизованного почтового ящика, то есть ни о какой подмене адресов не может быть и речи.
Также в содержимом письма не должно содержать много текста в верхнем регистре, ссылок, картинок, если письмо оформлено с помощью HTML, то это должен быть валидный код. Желательно не допускать слов «спам», «тест», «заработай» и прочих слов, которые так любят спамеры.

вторник, 20 февраля 2018 г.

Инструменты мониторинга Linux-серверов

Для обеспечения непрерывной работы сервера необходимо осуществлять его поддержку.
Мониторинг серверов является важным аспектом в успешной работе сервера, он стоит в одном ряду с обеспечением безопасности сервера и резервным копированием.
Мониторинг серверов позволяет вовремя заметить и среагировать на появление критической ситуации, уменьшив таким образом простой сервера, что напрямую сказывается например на посещении сайта.

Инструменты мониторинга в Linux можно условно разделить на три вида:
1. Системные (*top, vmstat, dstat, iostat, nmon, lsof, netstat)
2. Сетевые (Nagios, Zabbix, Icinga, Munin, Cacti, Monit, RRDtool, OpenMS, MRTG, Netdata, Shinken, Ganglia)
3. Облачные системы (New Relic, AWS CloudWatch, AppDynamics, Scout, Optier, Pingdom, Pagerduty, Datadog, HostTracker)


среда, 14 февраля 2018 г.

Сервер взломан, что делать?

Чаще всего взлом сервера происходит по нескольким причинам:
1. Уязвимости в используемом программном обеспечении
2. Неправильно настроенные конфигурации сервера
3. Слишком слабые пароли пользователей на сервере
4. Человеческий фактор (передача доступов третьему лицу, кража ключей, личные мотивы уволенных сотрудников)

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

четверг, 1 февраля 2018 г.

Планирование мощности сервера

В настоящее время технологии виртуализации позволяют создавать огромное количество виртуальных серверов на базе "железных" серверов объединенных в кластер.
Использование виртуализации позволяет упростить управление серверами с помощью горизонтального масштабирования, управления виртуальными системами хранения данных (СХД) и сетевыми ресурсами. Миграция виртуальных машин позволяет удалить сбойный сервер из кластера, заменив его новым и затем переместить виртуальную машину на работающий сервер.

воскресенье, 28 января 2018 г.

Как узнать дату установку Linux/Windows?

Для Linux можно узнать дату создания файловой системы, фактически дата установки ОС:
$ sudo tune2fs -l /dev/sdb2 | grep create
Filesystem created:       Thu Jun  5 18:54:43 2014

Для Windows есть команда systeminfo.

вторник, 16 января 2018 г.

Настройка Proxmox с внешними IP-адресами для ВМ

Есть сервер со свежеустановленным Proxmox 5 (8CPU/16GB RAM) в ДЦ OVH.
Основной адрес сервера: 1.1.1.1, на нем крутится панель, которая доступна по адресу https://1.1.1.1:8006/
Также есть несколько одиночных IP-адресов купленных все у тех же OVH.
Задача: нарезать виртуалок в Proxmox и к каждой виртуалке добавить внешний IP-адрес.
У OVH есть такая особенность, что IP-адрес привязывается к виртуальному MAC-адресу, предположим что у нас такая картина:
2.2.2.2 02:00:00:11:11:11
3.3.3.3 02:00:00:12:12:12
4.4.4.4 02:00:00:13:13:13

четверг, 4 января 2018 г.

Руководство по созданию и управлению контейнерами и виртуальными машинами на базе OpenVZ 7

Несколько лет назад я для себя делал небольшую документацию по тогда еще старой версии OpenVZ 6, работала она на ядре 2.6. Документация была довольно старой (2005 г.) и на английском. Ну и я в рамках своего диплома бакалавра в том числе написал для себя документацию, так как я в то время активно занимался OpenVZ.

Время шло, прогресс не стоял на месте и ребята из Odin (Parallels) в 2016 году выпустили Virtuozzo 7, который впоследствии был переименован в OpenVZ 7.
По сравнению со старой версией OpenVZ, появилось много улучшений, в том числе и документацию запилили новую. Мне в свое время было интересно потестить бету и я несколько багрепортов даже отправлял и их фиксили.
Примерно в то же время я начал писать руководство по новой версии OpenVZ, решено было отказаться от LaTeX в пользую Markdown и GitHub Pages.
Руководство не претендует на полноту (для этого есть документация), скажу лишь то, что все что написано в руководстве я тестил на своих виртуалках и по моему мнению я отметил основные работающие части системы.
В свое время мне помогали Павел Одинцов и Сергей Бронников, спасибо им за исправления и замечания.
Код конечно на GitHub: https://github.com/Amet13/vz-tutorial
Или веб-версия руководства: https://vz-tutorial.ru/