Как запустить сервер на debian

Обновлено: 03.07.2024

Создавая недавно новый сайт на Yii2 я прилично помучился из-за различий рабочего окружения, которые обеспечивают локальный Open-Server на Windows и реальный сервер с Debian. Это вынудило меня настроить правильный локальный сервер, используя VirtualBox. В статье я расскажу, как это сделать.

Задача

Есть компьютер с Windows 10, где установлен VirtualBox. Создадим виртуальную машину в VirtualBox, установим на неё Debian. Затем настроим на этой машине веб-сервер и установим некоторый софт, необходимый для веб-разработки. Дополнительно настроим общую папку, чтобы удобно работать в ней с кодом сайтов в любимом редакторе под Windows. Открываться сайты тоже будут под Windows.

Виртуалка и Debian

Скачиваем новейший образ для установки Debian. Даю ссылку на страницу с образами, предназначенными для сетевой установки. Они маленькие, не имеют ничего лишнего, хорошо подходят для веб-сервера. Я использую 64-битный образ. На момент написания статьи актуален Debian версии 8.5.

Создаём виртуальную машину:


Объём памяти и диска по своему усмотрению.

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


Машина подготовлена. Пока не включаем. Заходим в свойства машины, подключаем скаченный установочный образ на CD/DVD:


Пройдёмся по другим настройкам.

Число ядер процессора выбирайте сами, в зависимости от возможностей и потребностей. Обязательно установите отметку «Включить PAE/NX».


Можно выключить разные ненужные вещи, типа удаленного доступа по RDP, звуковой карты, порта USB стандарта 2.0 и т.д.


В сетевых адаптерах выбираем тип подключения «NAT», ниже тут же кликаем «Дополнительно» и заходим в «Проброс портов».


Здесь для SSH указываем порты 3022 и 22, для веба 80 и 80. Остальное заполнять не надо. Этого достаточно.


Почему именно «NAT»? Виртуальную машину сможете использовать только вы, она не будет видна в вашей локальной сети и никак на неё не повлияет. Для меня это важно.

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

В завершении добавляем общую папку:


Выходим из настроек.

Запускаем машину, устанавливаем Debian.


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


Ближе к концу установки надо будет выбрать компоненты, которые требуется установить. Рабочий стол и прочий мусор нам на веб-сервере не нужен, снимаем везде отметки. Оставляем только SSH-сервер и стандартные системные утилиты.


Предлагаемый в списке «web server» я тоже предпочитаю не ставить, т.к. там будет Apache, который в современном мире нафиг не нужен. Лучше установить потом самому именно те программы, какие нужны.

В общем, установка завершается, машина перезапускается.


Всё ок? Небольшая рекомендация. Делайте «снимки» машины на разных этапах настройки и использования. Это полезно! Если в процессе каких-то настроек или других действий что-то пойдёт не так, то вы сможете откатиться к предыдущему состоянию.

Вот сейчас машина успешно стартовала. Выключите её, сделайте снимок. Это займет от силы минуту.


Чтобы выключить машину можно написать poweroff , чтобы перезапустить — reboot .

Настройки

Пока продолжаем работать с созданной машиной через окно VirtualBox. К подключению по SSH вернёмся чуть позже.

В процессе установки Debian, кроме root, обязательно создаётся дополнительный пользователь. Если он совсем вам не нужен, то его можно удалить:

Дополнительный пользователь иногда полезен. Например, когда вы будете работать с Composer. Этот менеджер пакетов считает, что работа под root небезопасна и выдаёт предупреждение, хотя и продолжает исправно работать.

По умолчанию Debian не позволяет подключиться по SSH, используя пользователя root. Выглядит это так:

Дополнительным пользователем подключаться можно сразу.

Чтобы по SSH можно было зайти root-ом редактируем файл /etc/ssh/sshd_config .

Чтобы изменения вступили в силу перезагружаем машину.

Для подключений по SSH в Windows удобно использовать PuTTY. Адрес машины 127.0.0.1, порт 3022:


Теперь уже можно большую часть времени работать с виртуальной машиной через SSH. Оно удобнее, чем через окно VirtualBox. Окно PuTTY можно свободно растягивать и его содержимое будет под это подстраиваться. В вашем распоряжении буфер обмена и даже мышь.

Чтобы работала общая папка требуется установить дополнения гостевой ОС.

Для начала подключаем образ:


Теперь монтируем его:

Предварительно устанавливаем требуемые пакеты:

Теперь сама установка дополнений:

Результат успешной установки:

Перезапускаем машину и радуемся. Теперь у нас заработала общая папка. В виртуальной машине в моём случае это: /media/sf_Webdev . На основной машине она соответствует: c:\VirtualDub\Folders\Webdev .

Работа с общей папкой в виртуальной машине осуществляется из под пользовательской группы vboxsf . Это означает, что если пользователь (под которым вы работаете) не входит в эту пользовательскую группу, то он не сможет записывать в общую папку. Для него в папке по умолчанию режим «readonly».

Чтобы добавить пользователя в эту группу выполняем:

Пользователь www-data по умолчанию используется Nginx.

Веб-сервер

Переходим к настройке веб-сервера:

В общей папке создадим папку первого сайта: /media/sf_Webdev/site.loc .

Соответственно она появится и на основной машине. В эту папку поместим тестовый файл index.php с кодом:

Не имеет значения, как именно вы создаёте папки и файлы в общей папке. Можете всё это делать уже из вашей основной системы.

Создадим символическую ссылку для каталога сайта:

Создадим для сайта файл настроек Nginx /etc/nginx/sites-available/site.loc .

Подключим файл настроек:

Теперь в основной системе отредактируем hosts-файл c:\Windows\System32\drivers\etc\hosts .

В него надо добавить строчку:

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

Чтобы выяснить, выключите пока виртуальную машину. В основной системе откройте консоль:

Выполняем в ней:

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

Здесь первая строка с адресом 0.0.0.0:80 – это признак, что 80-ый порт в настоящее время используется. В конце этой строки цифры, в примере это 5684 . Данный номер — это ID процесса приложения.

Чтобы узнать, что это за приложение, открываем диспетчер задач:


На вкладке «Подробности» делаем сортировку по колонке «ИД процесса» и ищем нужный номер. В моём случае это оказался Skype.

По умолчанию Skype использует именно 80-ый порт для соединений, но это можно изменить в его настройках. Убираем галочку «Для дополнительных входящих соединений следует использовать порты 80 и 443». Выходим из настроек, перезапускаем Skype.


Той же командой в консоли ещё раз делаем проверку:

Теперь 80-ый порт никем не используется. Запускаем обратно виртуальную машину и снова пробуем открывать сайт. Теперь, если вы всё делали по инструкции, то он точно должен открыться!

Nginx

При подобном использовании веб-сервера внутри VirtualBox есть одна особенность с Nginx. Файлы сайтов получается будут лежать и модифицироваться в общей папке. Система внутри VirtualBox не будет знать, когда файлы в этой папке были модифицированы, отсюда проблема. Nginx думает, что файлы не менялись и добросовесно отдаёт старые их версии, закешированные.

Очень многие сталкиваются с этими граблями. Типичный случай: вы изменили файл CSS или JS, а на сайте не видно этих изменений, файл используются старый.

Мне помогло решить проблему включение в конфиг Nginx параметра:

Некоторым помогает ещё этот дополнительный параметр:

Поскольку проблема может быть актуальна для всех сайтов, работающих на веб-сервере виртуальной машины, то правильнее включить эти параметры в общем файле /etc/nginx/nginx.conf .

Дополнительная информация по теме.

Вместо обычного MySQL я предпочитаю Percona Server. Многие рекомендуют этот продукт, благодаря скорости и дополнительным фичам. Я использую Percona Server не менее 2 лет и тоже могу его рекомендовать. Для сайта, для любого сайтового движка — это будет просто MySQL, они не увидят разницы.

Я не делал сравнений. Просто однажды перешел на Percona Server и все. Никаких проблем никогда не было. Если при этом есть хоть небольшой прирост скорости, оно стоит того.

Установка Percona Server:

В процессе установки потребуется указать пароль для root-пользователя базы. Не путайте с root-пользователем системы.

Установим дополнительно phpMyAdmin. Последнее время я предпочитаю это делать через Composer. Так проблем меньше, да и версия точно будет новая. Вначале установим сам Сomposer:

Для рабочего софта лучше создать отдельный локальный сайт, пример webdev.loc . Это будет каталог /var/www/webdev.loc . Настройка Nginx аналогична той, что была выше. Пробрасывать этот каталог в основную систему не нужно.

В этом каталоге запускаем установку phpMyAdmin:

Он установится в каталог /var/www/webdev.loc/phpmyadmin .

Workbench

Приложение MySQL Workbench — это удобный инструмент для работы с базой. Устанавливать его нужно на основной машине. Для подключения к базе MySQL на виртуальной машине можно использовать SSH. При создании подключения просто устанавливаем параметр «Connection Method» в состояние «Standard TCP/IP over SSH» и далее вписываем уже знакомые параметры:


Рабочий софт

Установка Composer уже была выше. Остальное по желанию.

Если будут предупреждения:

Тогда надо установить предложенное, пример далее. В вашем случае версии могут быть другие, обратите на это внимание.

Vagrant

Это такая вспомогательная программа для VirtualBox. Хотя, работает и с другими системами виртуализации. Позволяет легко и быстро автоматизированно создавать виртуальные машины. Можно создать наподобие той, которую мы уже создали. Работать с Vagrant необходимо из командной строки.

Пишу это здесь просто для информации, что такое есть.

Я пробовал Vagrant. Да, действительно программа делает своё дело. Но мне показалось это лишним и не совсем тем, что надо. Мои соображения на этот счёт:

  • Такое полезно тому, кто создаёт виртуальные машины пачками. Не мой случай. Возможно, пока.
  • Виртуальные машины при помощи Vagrant создаются на основе готовых образов (боксов), список которых есть на официальном сайте. Они в случае необходимости автоматически загружаются. Честно говоря, я не сильно доверяю этим боксам. Считаю, что безопаснее создать своё. Тем более это не сложно.

В принципе, боксы для Vagrant — это созданные и специально настроенные виртуальные машины VirtualBox. Мы, вот, создали свою виртуальную машину. Её, в теории, можно немного допилить, чтобы использовать в качестве бокса Vagrant. Бокс может быть локальным.

Я когда начал изучать информацию по Vagrant, то меня напугали все эти инструкции в интернете. В каждой автор начинает разбирать конфигурационный файл виртуальной машины, и это поначалу выглядит дико и совсем непросто. Спешу успокоить новичков! Этот файл создается автоматически самим Vagrant-ом. Вы (при желании) можете внести в него дополнительные параметры, а можете и не вносить! Машина просто получит настройки по умолчанию. Часто этого достаточно.

Далее простой пример, как можно создать с помощью Vagrant тот же веб-сервер на базе Debian 8.

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

Открываем консоль в Windows:

Скачиваем нужный бокс и убеждаемся, что он попал в список доступных локально боксов:

Для первой команды название бокса я нашёл в списке по запросу «debian 8 lemp». Вот информация по нему, где автор советует перед использованием бокса выполнить установку плагина:

Такая команда выполняется единожды, если ранее данный плагин ещё не инсталлировался. Плагин позволяет автоматически устанавливать в виртуальную машину дополнения гостевой ОС.

Создаём каталог и переходим в него, например:

Инициализация виртуальной машины:

При этом у нас появляется в этом каталоге файл Vagrantfile . Он содержит конфигурацию будущей машины. Как я уже сказал, настройки можно оставить по умолчанию. Устанавливаем виртуальную машину:

Всё! Через некоторое время машина будет готова.

При установке машины автоматически устанавливаются все актуальные обновления Debian. При каждом старте монтируется общая папка.

Для входа по SSH используем адрес 127.0.0.1, порт 2222, пользователя vagrant , пароль vagrant .

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

Последующий запуск машины из консоли происходит быстро:

В VirtualBox машину тоже видно:


Docker

Это ещё один альтернативный вариант.

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

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

Docker предназначен для Linux и использует для создания контейнеров специфику ядра этой операционной системы. В Windows использовать Docker можно двумя способами. Во-первых, есть Boot2docker, который автоматически создаёт, опять же, в VirtualBox виртуальную машину и уже там запускает контейнеры. Во-вторых, можно самостоятельно создать виртуальную машину с Linux и там разворачивать контейнеры.

Автоматически созданная машина Boot2docker-ом:


Помимо уже сказанного есть ещё одна очень весомая фишка.

Мы создаём для разработки сайта один или несколько контейнеров Docker. Зависит от его сложности и масштабов. Потом, когда сайт будет готов, то мы именно эти же контейнеры просто переносим на хостинг! Получается, что сайт продолжает работать в своём родном окружении, уже на совсем другой площадке.

На мой взгляд Docker интересен, но только если вы работаете именно в Linux. Использование контейнеров через виртуализацию трудно назвать изящным вариантом. Поэтому я, как пользователь Windows, отказался от Docker. Во всяком случае, нет пока необходимости.

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

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Данная статья является частью единого цикла статьей про сервер Debian.

Введение

Любая работа с сервером после установки чаще всего начинается со стандартных обязательных действий, без которых либо не получится продвинуться дальше, либо будет неудобно работать. Например, вам в любом случае необходимо выполнить сетевые настройки, желательно обновить систему и установить часовой пояс. Рекомендуется сразу настроить автообновление времени, подрихтовать параметры sshd, установить midnight commander и выполнить другие настройки.

Об этом я хочу рассказать в статье. Я буду делиться своим реальным опытом работы. Это не значит, что нужно делать так, как я. Я могу в чем-то ошибаться, что-то делать не так удобно, как можно было бы сделать. Это просто советы, которые кому-то помогут узнать что-то новое, а кто-то возможно поделится со мной чем-то новым для меня, либо укажет на мои ошибки. Мне бы хотелось, чтобы это было так. Своими материалами я не только делюсь с вами знаниями, но и сам узнаю что-то новое в том числе и из комментариев и писем на почту.

Указываем сетевые параметры

Итак, у нас в наличии только что установленная система. Узнать или проверить ее версию можно командами:

Очень подробно про настройку сети в Debian я написал в отдельной статье. Рекомендую с ней ознакомиться. Здесь же кратко выполним основное. Для настройки сети, необходимо отредактировать файл /etc/network/interfaces. Сделаем это:

Для получения IP адреса по dhcp достаточно будет следующего содержания:

Если у вас статический адрес, то его настроить можно следующими параметрами в файле:

Сохраняем файл. Теперь нужно выполнить перезапуск сети. В Debian это делается командой:

В системном логе /var/log/syslog при этом будут записи:

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

К сетевым настройкам я отношу установку пакета net-tools, в состав которого входят старые и привычные утилиты для работы с сетью - ifconfig, netstat, route и другие. В современных дистрибутивах их заменили одной командой ip, но лично мне вывод некоторых старых команд, конкретно, netstat, нравится больше, поэтому я иногда ими тоже пользуюсь.

На этом настройка сети закончена.

Обновление системы, отличие apt upgrade от dist-upgrade и full-upgrade

Сеть настроили, теперь можно обновить систему и пакеты. В Debian это делается достаточно просто. Воспользуемся несколькими командами. Сначала обновим локальный индекс пакетов до последних изменений в репозиториях:

Обновление debian

Посмотреть список пакетов, готовых к обновлению, можно с помощью команды:

Теперь выполним простое обновление всех пакетов системы:

apt upgrade

Ключ upgrade выполняет только обновление одной версии пакета на другую, более свежую. Он не будет устанавливать или удалять пакеты, даже если это необходимо для обновления других. Это наиболее безопасный и надежный вариант обновления, но он может обновить не все. Например, с ее помощью не обновить ядро до более свежей версии.

Ключ dist-upgrade или full-upgrade (это одно и то же) в дополнение к upgrade обрабатывает все изменения зависимостей для новых пакетов и во время работы может удалять ненужные и ставить необходимые пакеты для обновления. Вот выдержка из документации по поводу этих двух ключей.

Отличие apt upgrade от apt dist-upgrade и full-upgrade

Так что после обычного обновления, делаем еще full-upgrade.

Мне предлагается удалить старые пакеты, которые больше уже не нужны. Это зависимости от старых версий софта, который уже обновился и получил новые пакеты из зависимостей, а эти ему больше не нужны. Очистим их командой:

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

На этом обновление системы закончено. Если вы хотите обновить версию релиза, например Debian 9 обновить до Debian 10 Buster, то читайте отдельный материал.

Настройка ssh

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

Существует расхожее мнение, что менять порт ssh это наивность, а не защита. Надо просто настроить сертификаты, fail2ban или еще каким-то образом защитить ssh порт, к примеру, с помощью ограничений iptables, и т.д. Тем не менее, я все же рекомендую порт сменить на нестандартный. Даже если у вас все защищено от подбора паролей, так как вы используете сертификаты, лишние запросы к ssh порту тратят ресурсы сервера, хоть и не очень большие. Идет установка соединения, обмен рукопожатиями и т.д. Зачем вам это нужно?

По-умолчанию в Debian, впрочем как и в любом другом дистрибутиве Linux, ssh сервер работает на 22 порту. Изменим этот порт, к примеру, на 23331. Так же я еще изменяю конфигурацию для разрешения подключения по ssh пользователя root с использованием пароля. В Debian из коробки пользователь root по ssh паролем авторизовываться не может. Изменим и это. Открываем файл настроек:

И изменяем там следующие строки. Приводим их к виду:

Сохраняем изменения и перезапускаем сервер ssh следующей командой:

Все в порядке, сервер слушает 23331 порт. Теперь новое подключение будет осуществлено только по порту 23331. При этом, после перезапуска ssh, старое подключение не будет разорвано.

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

Отдельно тему подключения к серверу под root я рассмотрел в статье про sudo. Кому интересно, переходите в нее и делитесь своим мнением на этот счет.

Установка утилит mc, htop, iftop

Следующим шагом я настраиваю некоторые полезные утилиты, которыми регулярно пользуюсь в повседневной работе. Первая из них это всем известный двухпанельный файловый менеджер Midnight Commander. Установим mc на наш сервер:

И сразу же для него включаю подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax синтаксисом для sh и bash скриптов. Этот универсальный синтаксис нормально подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Перезаписываем файл unknown.syntax. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса.

Я сразу же ставлю редактором по-умолчанию mcedit. Для этого просто выбираю его из меню при первом редактировании какого-нибудь файла. Если у вас такое меню не появляется, можете вызвать его сами и выбрать необходимый редактор по-умолчанию:

Так же я рекомендую очень удобный диспетчер задач - htop. Мне он помог, к примеру, решить проблему Взлома сервера CentOS. Ставим его на сервер:

Полезной утилитой, позволяющей смотреть сетевую загрузку в режиме реального времени, является iftop. Очень рекомендую. Более простого и удобного инструмента мне не попадалось, хотя я много перепробовал подобных вещей. Устанавливаем iftop на сервер:

debian iftop

Настройка и обновление времени в Debian

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

Узнать дату, время, часовой пояс можно командой date:

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

Теперь выберем правильный часовой пояс с помощью команды:

Выбирая соответствующие пункты визарда, указываете свой часовой пояс.

Дальше синхронизируем время с сервером времени в интернете. Для разовой или ручной синхронизации понадобится отдельная утилита. Установим ntpdate на сервер:

И синхронизируем время:

Если получаете ошибку:

Значит у вас уже работает служба ntp. Ее нужно остановить и обновить время вручную. Хотя если она работает, то у вас и так должно быть все в порядке.

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

После установки он сам запустится и будет автоматически синхронизировать часы сервера. Проверим, запустился ли сервис ntpd:

Настройка firewall (iptables) в Debian

В качестве firewall в Debian по-умолчанию используется iptables, его и будем настраивать. Изначально фаервол полностью открыт и пропускает весь трафик. Проверить список правил iptables можно следующей командой:

Обращаю пристальное внимание на то, что настраивать firewall без прямого доступа к консоли сервера не следует. Особенно, если вы не очень разбираетесь в этом и копируете команды с сайта. Шанс ошибиться очень высок. Вы просто потеряете удаленный доступ к серверу.

Создадим файл с правилами iptables:

Очень подробно вопрос настройки iptables я рассмотрел отдельно, рекомендую ознакомиться. Хотя в примере другая ОС linux, принципиальной разницы нет, настройки iptables абсолютно одинаковые, так как правила одни и те же.

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

Даем файлу права на запуск:

Настройка iptables в debian

Проверяем, что правила записались в файл /etc/iptables_rules. Если их там нет, то записываем их вручную.

Правила применились и произошла их запись в файл /etc/iptables_rules. Теперь нужно сделать так, чтобы они применялись при загрузке сервера. Для этого делаем следующее. Открываем файл /etc/network/interfaces и добавляем в него строку pre-up iptables-restore < /etc/iptables_rules Должно получиться вот так:

Для проверки перезагрузите сервер и посмотрите правила iptables. Должен загрузиться настроенный набор правил из файла /etc/iptables_rules.

Настройка логов cron

По-умолчанию, в Debian нет отдельного лог файла для событий cron, они все сыпятся в общий лог /var/log/syslog. Лично мне это не очень нравится, я предпочитаю выводить эти события в отдельный файл. Об этом я написал отдельно - вывести логи cron в отдельный файл. Рекомендую пройти по ссылке и настроить, если вам это необходимо. Там очень кратко и только по делу, не буду сюда копировать эту информацию.

Установка и настройка screen

Я привык в своей работе пользоваться консольной утилитой screen. Изначально она задумывалась как инструмент, который позволяет запустить что-то удаленно в консоли, отключиться от сервера и при этом все, что выполняется в консоли продолжит свою работу. Вы сможете спокойно вернуться в ту же сессию и продолжить работу.

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

Позже я решил подробнее ознакомиться с этим инструментом и обнаружил, что там есть несколько удобных моментов, которые можно использовать в ежедневной работе. Вот как использую утилиту screen я. При подключении к серверу у меня запускается screen с тремя окнами 1, 2, 3. Первое окно автоматически переходит в каталог /, второе в /etc, третье в /var/log. Я осмысленно назвал эти окна: Main, etc, logs соответственно. Внизу находится строка состояния, в которой отображен список всех открытых окон и подсвечено активное окно.

С помощью горячих клавиш я очень быстро переключаюсь между окнами в случае необходимости. Вот как выглядит мое рабочее окно ssh подключения:

настройка screen в debian

Переключаюсь между окнами с помощью стандартных горячих клавиш screen: ctrl+a 1, ctrl+a 2, ctrl+a 3. Я специально изменил нумерацию, чтобы она начиналась не с 0 по-дефолту, а с 1. Так удобнее на клавиатуре переключать окна. Кнопка 0 находится слишком далеко от 1 и 2.

Чтобы настроить такую же работу screen, как у меня, достаточно выполнить несколько простых действий. Сначала устанавливаем screen:

Создаем в каталоге /root конфигурационный файл .screenrc следующего содержания:

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Теперь можно перезагрузить сервер и проверить, все ли в порядке. У меня все в порядке, проверил :) На этом базовая настройка сервера debian окончена. Можно приступать к конфигурации различных сервисов, под которые он настраивался. Об этом я рассказываю в отдельных статьях.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Debian.

Установка debian на живой сервер или на виртуалку Virtual Box, настройка сети

Начнём с VirtualBox. Установка виртуальной машины стандартная, о ней уже рассказывалось в статье Установка Debian 9.3 — пошаговая инструкция

Итак, создаем виртуальный сервер, на живом установка будет аналогичная, только в некоторых случаях бывает дольше.

Указываем имя Debian сервер, virtualbox сам выбирает операционную систему Linux Debian (он по названию определит).

установим debian на виртуальную машину

Скачивать нужно дистрибутив net Install, что означает установка по сети, дистрибутив весит около 250 МБ, он достаточно быстро скачивается. Пакеты и программное обеспечение будет доустанавливаться по сети. Т.е. если у вас нет интернета, дистрибутив net Install вам не подойдёт, и нужно скачивать полную версию.

в носителях добавляем виртуальный образ debian-9.3.0 (iso)

Заходим в настройке, выбираем накопители, и в контроллере IDE 10 монтируется образ ISO. Далее стартуем сервер. В открывшемся меня нажимаем Install. Подробная установка Debian рассмотрена здесь. После завершения установки перезагружаем сервер.

Установка SSH

SSH (от англ. Secure Shell «безопасная оболочка») представляет собой сетевой протокол для соединения по сети Internet, который позволяет выполнять удалённое управление системой. Имеется бесплатная модификация SSH, которая именуется OpenSSH и включена в пакет ssh Debian.

Подключиться к серверу через ssh (с компьютера под управлением unix подобной операционной системы)

Знакомство с командной строкой и протоколом ssh, sftp, настройка доступов по ключам (вместо паролей), root доступ

Базовые утилиты: su ls pwd cp scp locate updatedb which

Команда cd означает change directory (сменить директорию)

su – Superuser (суперпользователь).

Если мы находимся под логином текущего пользователя, то прописав su + имя пользователя, можно зайти в систему с правами root. Root имеет доступ ко всем папкам, может запускать и удалять всё что угодно, поэтому от имени суперпользователя необходимо работать внимательно и осторожно.

ls – показывает содержимое папки.

Указанные команды необходимо хорошо знать или иметь шпаргалку по ним, потому что без них вы ничего не сможете сделать.

Сочетание клавиш

Ctrl+c отменяет запущенный процесс

Ctrl+d разлогиниться

Настройка сети

Сейчас IP адрес у сервера будет такой же, как и у компьютера.

Таким образом можно сделать пинг со своего компьютера. Теперь можно заходить на сервер с компьютера. Система запросит подтверждение на добавление публичного ключа сервера в систему. Теперь консоль от virtualbox уже не нужна и ее можно просто свернуть, теперь можно заходить в систему через ssh клиент, как будто бы выполняется заход на сервер удаленно.

Потребуется отредактировать следующий файл:

Пример config для ручной настройки IP:

Публичные ключи

Для начала нам нужно сгенерировать ключ уже на нашем же сервере с помощью утилиты ssh-keygen. Ключи нужны чтобы каждый раз не вводить пароль.

На сервер нужно загрузить публичный ключ (приватный ключ хранится только у нас на компьютере).

Для создания пары (pair) ключей, пропишите команду в терминале вашего компьютера:

Ключ будет сгенерирован в текущем каталоге пользователя в папке …/.ssh/id_rsa.

Этот файл необходимо держать у себя на компьютере.

Чтобы зайти на аккаунт под публичным ключом нужно создать файл .ssh/authorized_keys

Необходимо скопировать публичную часть ключа в этот файл. После создания пары SSH-ключей, пропишите команду в терминале на локальной машине для вывода публичного ключа:

Закрываем файл сочетанием клавиш ctrl+x. Сохраняем – y.

Теперь попробуем зайти на сервер:

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

Псевдонимы в Unix ssh/config

Это относится опять же к операционным системам на базе unix. К Windows это никакого отношения не имеет. Но если вы будете с одного Debian сервера заходить на другой Debian сервер, тогда это вам пригодится или если ваш домашний компьютер будет Debian и вы будете администрировать удаленный компьютер Debian, то вам это в принципе поможет.

В папке ssh создается файл config, в нем прописывается хост, придумывается псевдоним. Теперь можно сразу заходить с помощью псевдонима под логином и паролем.

Знакомство с менеджером пакетов apt и принципом установки приложений

Что такое .deb пакеты в Debian?

Это файлы, подобные MSI файлам в Windows. То есть это набор файлов и мета-данных для установки того или иного определённого приложения. Там хранится скомпилированный бинарник уже сразу под вашу операционную систему. Например, если установлена 64 битная Debian версия 9.3, то значит в этом в пакете будет именно этот бинарный файл для установленной системы.

Вся установка deb пакетов означает скопировать бинарник в одну папку, config в другую папку, ну и попросить какие-то зависимости, без которых эта программа не запустится.

В Debian по умолчанию установлена системная программа dpkg, которая при установке системы ставит приложения. Существует принципиальное отличие dpkg и apt.

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

Утилита apt автоматически всё продумывает, необходимые зависимости она установит.

apt-get – это менеджер пакетов, который устанавливает deb пакеты и автоматически устанавливает все нужные зависимости. То есть если нужен, к примеру, PHP с поддержкой xml или ещё с чем-то, то apt-get автоматически устанавливает целый комплект нужных программ (это своего рода как AppStore для для iOS).

Установка утилит mc

Попробуем установить полезную утилиту mc, она часто используется для работы сервера. Она представляет собой популярный 2х-панельный файловый менеджер Midnight Commander.

Установка mc на сервер:

Добавляем пользователя в группу root

Выполнение команд от суперпользователя:

Установка и настройка окружения nginx, php-fpm, mysql;

Устанавливаем nginx php5 и mysql-server:

sudo apt-get install nginx

sudo apt-get install php5-fpm php5-mysql

Эта статья описывает установку «с нуля» сервера на linux, предназначенного, к примеру, для размещения сайтов.

Статья может пригодиться в качестве:

  • Шпаргалки/контрольного списка (чтобы не забыть что-либо);
  • Инструкции для начинающих;
  • Источника чужого опыта продвинутому администратору. Рассмотрим полезные штатные утилиты, о которых возможно вы не знали.

Если вы раньше не работали в консоли Linux, запомните несколько правил:

Если у вас ещё нет своего сервера — не беда, можно взять его в аренду, например (в алфавитном порядке):

Debian 7 или Ubuntu 14.04 — на ваш выбор, для новичка разницы нет. Если Ubuntu, то только LTS (14.04, например). На виртуальный сервер с менее 4 ГБ оперативной памяти устанавливаем 32-разрядную систему, на «железный» сервер — 64-разрядную. Устанавливаем в минимальном виде, без графики и дополнительных пакетов.

Если вам нравится стиль встроенных редакторов Far manager / Norton commander, то вам, наверное, понравится редактор mcedit. Установите Midnigth commander:

В статье везде для редактирования используется команда editor — она является ссылкой на ваш любимый консольный редактор. Поменять его можно командой:

Если у нас Debian, то лучше сразу установить sudo:

и добавить себя в группу sudo:

(если вы забыли, как назвали своего пользователя при установке системы, посмотрите вывод команды getent passwd, он скорее всего последний в списке).

В файле /etc/default/rcS прописываем «FSCKFIX=yes», чтобы в случае аварийной перезагрузки ошибки были по-возможности исправлены автоматически.

Для каждого человека, имеющего доступ к серверу, надо делать отдельные логин и пароль. Тогда:

  • у пользователя будет свой пароль SSH ключ для входа (или несколько SSH ключей, если надо входить с разных устройств),
  • у пользователя будет своя домашняя директория, к примеру удобно понять, кого спросить если заканчивается место на диске,
  • у пользователя будет свои настройки терминала и редакторов,
  • у пользователя будет своя история команд, чтобы вытаскивать из неё,
  • командами w или who можно посмотреть, кто сейчас залогинен на сервере,
  • можно видеть в логах, кто когда входил на сервер,
  • в списке процессов видно, кто запускал процесс.

Поменяем настройки по-умолчанию, чтобы у вновь созданных пользователей домашние директории были доступны для чтения только самим этим пользователям:

заменяем «DIR_MODE=0755» на «DIR_MODE=0750».

Добавлять пользователей в систему можно командой

Если нужно предоставить пользователю права суперпользователя (через sudo), добавляем его в группу sudo:

Не надо пытаться генерировать пароли самому, для этого есть множество отличных способов:

Пара советов ниже важны, если сервер у вас не удалённый, а находится в локальной сети.

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

Настройки применятся после перезагрузки.

Полезен, чтобы узнавать о новых устройствах в локальной сети (и конфликтах адресов, если они у вас бывают). В /etc/default/arpwatch правим ARGS="-N -p -i eth0", чтобы он слушал только на интерфейсе локальной сети, а не пытался отслеживать сеть провайдера.

Письма будет присылать на root, так что обязательно читаем ниже про почту.

Если точно не надо отправлять почту от arpwatch, добавьте "-Q" к опциям.

Эти темы не раскрыты:

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

Пример файла /etc/apt/sources.list для Ubuntu 14.04:

Пример файла /etc/apt/sources.list для Debian 7:

Время на сервере должно быть точным.

Просто установите службу ntp:

Протестировать можно через несколько минут:

Если у одного из ip-адресов слева стоит символ «*», значит всё в порядке.

Выбираем то, что вам удобнее, например, Азия → Екатеринбург.

Это имя прописываем в /etc/hosts напротив ip-адреса сервера, после полного имени через пробел пишем сокращённое имя, например:

Применить полное имя на ходу можно командой hostname, например

В файл /etc/hostname прописываем сокращённое имя (см. man 1 hostname).

В Ubuntu предварительно установить пакет language-pack-ru (он потянет за собой лишний firefox-locale-ru, ну и ладно):

ставим пробелом галочки на en_US.utf8 и ru_RU.utf8, жмём «Ok», в следующем окне по-умолчанию рекомендую выбрать en_US.utf8.

Также в Debian можно добавить строку в файл:

Почтовая система нужна на сервере, чтобы получать различные отчёты о его работе.

Проверяем, что команда «hostname -f» выдаёт полное имя сервера.

В Debian будет предложено удалить Exim, это нормально. В начальной конфигурации выбираем «Internet Site», дальше со всем соглашаемся.

В конфигурации Postfix оставляем 25-й порт открытым только для локальных сервисов, иначе нас быстро завалит спамом:

Перезапускаем почтовый сервер:

Большинство программ отправляют отчёты о своей работе и ошибки в локальный ящик суперпользователю root. Настроим почтовую систему, чтобы она отправляла копии этих писем на удалённый ящик:

правим строку, начинающуюся с «root:»

Для теста, отправим письмо на свой внешний почтовый ящик:

Далее вводим текст письма, затем [Enter], точка и ещё раз [Enter], например:

Если будет запрос «Cc:» — просто нажимаем [Enter]. Если письмо не пришло, следует изучить содержимое файла /var/log/mail.log

Очень важно правильно настроить на сервере удалённый доступ, чтобы боты не подобрали пароль.

Рекомендуется изменить номер порта на нестандартный и запретить логиниться руту.

Номер порта для SSH-сервера выбираем случайный от 1024 до 65535:

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

Теперь проверьте из отдельного терминала (этот не закрывайте!), что SSH-доступ работает.

Если нужен SQL сервер, то для примера установим MySQL. Надо заранее подготовить хороший пароль, сохраним его в вашу базу паролей (я генерирую и храню пароли в KeePassX) и пропишем в /root/.my.cnf:

При установке будет просьба ввести новый пароль для администрирования MySQL — вводите заранее подготовленный.

Немного обезопасим БД:

  • Change the root password? [Y/n] n
  • Remove anonymous users? [Y/n] y
  • Disallow root login remotely? [Y/n] y
  • Remove test database and access to it? [Y/n] y
  • Reload privilege tables now? [Y/n] y

Принимать подключения и распределять их будем с помощью быстрого Nginx, а «за ним» можно будет ставить каждому сайту своё, здесь рассмотрим Apache.

Защитим конфигурацию и файлы журналов от просмотра любыми пользователями:

Отключаем опасный в неумелых руках модуль:

Эти темы не раскрыты:

Редактируем файлы /mods-available/status.conf /mods-available/info.conf

Так как у нас соединения на 80 порту принимает Nginx, то Apache не может занимать 80 порт. Пропишем ему, например, порт 8080, да ещё и чтобы не был доступен удалённо:

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

Устанавливаем libapache2-mod-rpaf, он нужен чтобы в журналах Apache были ip-адреса клиентов, а не проксирующего Nginx:

Убедимся, что Apache принимает соединения только на локальном 8080:

Перед добавлением сайтов, установим phpMyAdmin, чтобы удобно было администрировать базу данных. Вам понадобится пароль, который мы задавали при установке MySQL!

Для примера, запустим сайт на WordPress. Добавляем в систему отдельного пользователя example, от которого будут запускаться процессы этого сайта:

Создаём директорию для будущего сайта:

Создаём конфигурацию нашего сайта в Nginx:

Здесь limit_req не даёт обращаться к php-скриптам с одного ip-адреса чаще 3 раз в секунду, при этом не затрагивая выдачу статики. Таким образом, мы защищаем наш сайт от простейших DoS-атак.

Два раза вводим придуманный пароль. Он будет запрашиваться перед входом в админку.

Проверяем, что в конфигурации Nginx нет ошибок:

Дальше часть команд мы будем делать от нового пользователя example, чтобы по неосторожности не испортить что-нибудь в системе (у этого пользователя просто нет прав на такое). Становимся им:

В результате у нас получится директория

Выходим из-под пользователя example:

Создаём место для журналов:

Создаём конфигурацию Apache.

с подобным содержимым:

Проверяем, что в конфигурации Apache нет ошибок:

Выбираем в полученном окне:

Добавляем системного пользователя, SQL базу данных и пользователя, настраиваем Nginx, Apache.

Эти темы не раскрыты:

Информацию с сервера необходимо периодически копировать куда-либо, чтобы в случае потери сервера (отказ оборудования, ошибка в работе администратора) было из чего восстанавливать его настройки и сохранённые на сервере данные. Если есть отдельный сервер, на нём можно запустить BackupPC. (rdiff-backup? rsnapshot?)

К базовым бэкапам (файлы, БД) хорошо бы добавить резервное копирование информации о разделах и загрузочную область (может, использовать для этого vbackup?). Сделать это можно так:

Просто устанавливаем AutoMySQLBackup:

Можно ничего не настраивать, если вы хотите хранить дампы базы MySQL на том же сервере (что небезопасно) в каталоге /var/lib/automysqlbackup/.

Структура папок, создаваемая AutoMySQLBackup:

Таким образом, ротация резервных копий происходит в рамках каталогов с ежедневными, еженедельными и ежемесячными архивами. Для более точной настройки см. файл конфигурации /etc/automysqlbackup/myserver.conf

Есть скрипт autopostgresqlbackup, установим его:

Он будет автоматически каждый день делать резервную копию всех баз данных PostgreSQL в /var/lib/autopostgresqlbackup.

Если есть другой сервер, на котором есть много свободного места, можно установить на него BackupPC и настроить.

Установите пакет apticron, чтобы получать на почту информацию о необходимых обновлениях. Чтобы автоматически устанавливать обновления, связанные с безопасностью, установите unattended-upgrades:

Выберем режим обновления:

В пределах выбранного вам релиза (например, Debian 7 или Ubuntu 12.04) при обновлении ничего не должно ломаться, можете смело обновляться. А вот при переходе между релизами могут возникать проблемы.

От подбора паролей по SSH можно защититься, просто установив fail2ban. Его же можно настроить и на отражение некоторых других атак.

Чтобы правила межсетевого экрана автоматически загружались при загрузке системы, установим специальный пакет:

Прописываем правила, не забывая менять 22222 на ваш SSH-порт:

В первый раз применяем правила командой iptables-apply — она после применения спросит, стоит ли их оставить. Если вы сможете ответить «y» — значит, удалённый доступ у вас остался. Если же ответа некоторое время не будет, правила будут откачены.

Когда много сидишь в консоли, есть риск вместо своего компьютера выключить удалённый сервер. Чтобы избежать этого, просто установим на сервер molly-guard. С ним, при попытке выключить/перезагрузить сервер по SSH, будет выдан запрос имени сервера.

Просто устанавливаем etckeeper, в файле /etc/etckeeper/etckeeper.conf комментируем все «VCS=», кроме «VCS="git"», потом:

Теперь когда что-нибудь меняем в директории /etc, то вносим изменения в систему контроля версий:

Эти темы не раскрыты:

Чтобы получать на почту ежедневные отчёты о работе системы, установите пакет logwatch. Он объединяет информацию полученную от других служб — к примеру, если в системе установлена и запущена служба smartd (см. ниже), то в ежедневном отчёте будет информация об изменении состояния жёстких дисков (например, температуры).

Эти темы не раскрыты: Отличие от logwatch

Также можно установить пакеты atop и sysstat, чтобы можно было посмотреть, к примеру, какой процесс вызвал нагрузку 2 часа назад, или сколько вчера было свободной памяти на сервере. В файле /etc/default/atop можно увеличить частоту записи информации о текущих процессах, например, до 1 раза в минуту: INTERVAL=60

Смотрим историю так (перемотка вперёд-назад клавишами t и T, выход по q): atop -r /var/log/atop/atop_20131118

Настройка Monit: TODO.

Для более серъёзного наблюдения за параметрами системы и для оперативного уведомления о проблемах, необходимо разбираться с такими системами, как например Nagios или Zabbix, здесь они рассмотрены не будут.

В ежедневных отчётах не стоит обращать внимание на небольшие колебания «Raw_Read_Error_Rate».

Чтобы посмотреть температуру системных компонентов и скорости вращения вентиляторов, установите lm-sensors:

После чего запускаем процесс поиска (иногда и без него всё работает — попробуйте перейти сразу к следующему пункту):

Теперь, когда сервер настроен, остаётся:

  • Читать почту — отчёты от LogWatch, apticron и, в худшем случае, от smartd;
  • своевременно обновлять пакеты сервере;
  • при изменениях настроек, вносить их в etckeeper;

Использованы материалы статей, также распространяющихся по лицензии CC-BY-SA:

Текст доступен на условиях лицензии Creative Commons Attribution/Share-Alike версии 3.0 или более новой.

Читайте также: