суббота, 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/