Todo после покупки виртуального Linux-сервера
1. МЕНЯЕМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ ROOT
Как правило, после заказа сервера тебе сообщают его IP-адрес и пароль пользователя. Причем он прекрасно виден в панели управления виртуальным сервером. Провайдер, если он сгенерировал этот пароль, его знает и хранит в базе данных — ведь его где‑то записали, чтобы показывать тебе каждый раз в панели управления.
К тому же пароли от сервера обычно генерируются случайным образом и сложны для подбора, а вот пароли, отображаемые в панели управления, не всегда соответствуют этим требованиям. Поэтому первым делом меняем пароль root. Считай это не паранойей, а простой предосторожностью. Не забывай менять пароль каждые два‑три месяца — также из соображений безопасности. Зайди по SSH как root и введи команду
passwd
Да, при вводе символы не отображаются — нет ни букв, ни цифр, ни звездочек, это нормально. Введи новый пароль и нажми Enter. На первом этапе мы себя обезопасили и можем приступить к настройке.
Существует несколько стратегий защиты учетной записи root. Первая заключается в следующем: ты создаешь учетку пользователя с известным только тебе именем, предоставляешь ей возможность использовать команду sudo (чтобы ты мог редактировать файлы конфигурации и устанавливать софт), а затем отключаешь вход для root по SSH. На выходе получаем парольную аутентификацию, но будет использоваться учетная запись, имя которой известно лишь тебе. Преимущества следующие: никто не взломает учетку root, поскольку она будет выключена. Недостаток прячется в слове «парольная».
Сама по себе парольная аутентификация не так надежна, как аутентификация по публичному ключу. Вторая стратегия как раз и заключается в использовании такой аутентификации. Недостаток — более сложная настройка, прежде всего для конечных пользователей: придется генерировать пару ключей, и для человека, который никогда этого не делал, поначалу это может показаться сложным. Но, как правило, на арендованном VDS мало кто создает много учетных записей для входа по SSH — обычно используется одна‑две учетки, если админов несколько. Преимущества аутентификации по публичному ключу — никто не сможет подобрать пароль и, следовательно, получить доступ к твоему серверу. Если ты будешь использовать аутентификацию по ключу, смело пропускай пункты 2 и 4 — не нужно создавать дополнительную учетку и вносить ее в sudoers. А вот промежуточный пункт 3 обязательно прочитай, так как удобный редактор тебе пригодится.
2. СОЗДАЕМ ОБЫЧНОГО ПОЛЬЗОВАТЕЛЯ
После покупки VDS пользователю сообщают пароль root, пользователь копирует его в профиль своего SSH-клиента. Но это в корне неправильно. Во‑первых, учетная запись root — это всем известное имя, и, когда злоумышленник попытается взломать твой сервер методом грубой силы, он будет пытаться получить именно учетную запись root. Все просто: имена созданных тобой пользователей он не знает, а root есть у всех. Поэтому нам нужен обычный пользователь, под которым ты будешь работать постоянно. Создаем пользователя (имя нужно изменить на свое собственное):
adduser user
passwd user
Первая команда добавляет учетную запись с именем user, вторая изменяет пароль для нее. Только не создавай пользователя admin, пожалуйста!
Чтобы этот пользователь мог работать с правами root, нужно добавить его в sudoers, но сначала понадобится выполнить один промежуточный шаг.
3. УСТАНАВЛИВАЕМ УДОБНЫЙ РЕДАКТОР
Используемый большинством провайдеров по умолчанию редактор Vi неудобный и требует специальных знаний, что немного шокирует начинающих пользователей.
Перед установкой любого софта первым делом обнови списки пакетов. Делается это с помощью команды apt update. Обновлять список пакетов нужно как минимум один раз — перед первой установкой. После этого обновление делают по мере необходимости.
# apt update
Итак, установи любой текстовый редактор, который тебе нравится. Например, удобный редактор nano:
# apt install nano
Запустить отдельно редактор можно командой nano. Смотрим, где находится этот редактор:
which nano
Обычно это каталог /bin/nano. Теперь нужно сделать так, чтобы этот редактор использовался по умолчанию. В современном Ubuntu это делается так:
update-alternatives –config editor
Далее тебе нужно просто выбрать nano из списка предлагаемых вариантов. Если данный способ не сработал (нет команды update-alternatives), можно пойти простым путем и прописать переменную окружения EDITOR:
export EDITOR=/bin/nano
Чтобы переменная окружения EDITOR устанавливалась при каждом входе в систему, отредактируй файл .bashrc, который находится в домашнем каталоге пользователя. Добавь в него команду
export EDITOR=/bin/nano
Обрати внимание, что это нужно сделать для каждого пользователя. Для пользователя root домашний каталог — /root. Для пользователя denis — /home/denis.
После этого все команды, вызывающие редактор по умолчанию, будут использовать удобный редактор nano. Одна из таких команд — visudo.
4. ПРЕВРАЩАЕМСЯ В АДМИНИСТРАТОРА
Ранее мы создали обычного пользователя user. Теперь нужно превратить его в администратора, то есть предоставить возможность использовать sudo. Введи в терминале команду
visudo
Эта команда запустит текстовый редактор для изменения файла конфигурации sudoers. Найди и раскомментируй строчку
wheel ALL=(ALL) ALL
Указанная строчка разрешает всем пользователям группы wheel использовать команду sudo. Если она уже раскомментирована, ничего делать не нужно. Нажми F10 для выхода из редактора.
После этого добавь нашего пользователя user в группу wheel:
usermod -aG wheel user
Далее отключись от SSH-сервера и попытайся войти как пользователь user с заданным ранее паролем. Обрати внимание, что, когда ты работал как пользователь root, приглашение командной строки имело вид #, теперь оно выглядит как $. Залогинившись, введи команду
sudo bash
Если приглашение командной строки поменялось на #, теперь у тебя есть права root. Такой трюк позволяет вводить команды от имени root без использования команды sudo, что, несомненно, удобнее.
5. ЗАПРЕЩАЕМ ВХОД КАК ROOT ПО SSH
Дело осталось за малым — запретить пользователю root входить в систему по SSH. Для этого, работая уже под новым пользователем user, введи команду
sudo mcedit /etc/ssh/sshd_config
Добавь в конфигурационный файл сервера SSH такую строку (или раскомментируй ее):
PermitRootLogin no
Сохрани файл конфигурации, рестартани SSH (systemctl restart ssh) и попробуй подключиться как пользователь root — у тебя не получится. WARNING
Перезагружать SSH нужно только в том случае, если ты убедился, что можешь войти как пользователь user (от имени этого пользователя можно ввести команду sudo)! Иначе есть риск потерять доступ к серверу, и тогда придется обращаться в саппорт.
Как вариант, можно не отключать вход под учетной записью root, а настроить вход по ключу (см. далее) и лишь после того, как ты убедишься, что можешь войти как root по ключу, в конфиг SSH добавить строчку
PermitRootLogin without-password
Конечно, после этого нужно опять перезагружать SSH.
6. ВХОДИМ НА СЕРВЕР ПО КЛЮЧУ
Существует практика аутентификации по ключу (public key authentication), а не по паролю. Преимущества и недостатки этого метода рассматривать не будем, здесь одни преимущества — пароль никто не подберет, так как его попросту нет. Это самый надежный способ аутентификации.
Принцип аутентификации по ключу следующий: создается пара ключей (открытый и закрытый). Закрытый ключ хранится на стороне клиента, и в идеале он не доступен ни для кого. Открытый загружается на сервер, к которому нужно получить доступ.
В идеальном мире ключи должны генерировать сами пользователи. Сгенерировать их можно с помощью команды ssh-keygen, а также используя функциональность SSH-клиента (например, возможность создания ключевой пары есть в Bitvise SSH Client и во многих других клиентах). Если у тебя Linux, никакой дополнительный софт устанавливать не нужно. Введи команду
$ mkdir ~/.ssh; ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa
Здесь мы генерируем RSA-ключи длиной 2048 бит. После того как ключи будут сгенерированы, публичный ключ станет доступен по имени ~/.ssh/id_rsa.pub. Далее нужно передать открытый ключ на сервер. Самый простой и правильный способ сделать это — использовать команду ssh-copy-id:
ssh-copy-id username@remote_host
При выполнении этой команды ты можешь увидеть следующее:
The authenticity of host '111.222.33.44 (111.222.33.44)' can't be established.
ECDSA key fingerprint is fd:ff:c4:a9:55:be:a3:f4:e1:55:01:ac:d8:7d:12:fb.
Are you sure you want to continue connecting (yes/no)? yes
Твой локальный компьютер просто не распознает удаленный сервер — это нормально при первом подключении. Введи yes (именно yes, а не y) и нажми Enter. Команда ssh-copy-id найдет созданный ключ и отправит его на сервер. Содержимое ключа ~/.ssh/id_rsa.pub будет скопировано в файл ~/.ssh/authorized_keys удаленной учетной записи. Данный способ сработает, если пока еще действует аутентификация по паролю. На этапе первоначальной настройки это обычное дело — сначала все пользователи генерируют ключевые пары и загружают на сервер свои открытые ключи, а затем закрывается вход по паролю. Но если вход по паролю уже отключен, а тебе надо загрузить ключ для нового пользователя, то потребуется найти способ доставить ключ (файл id_rsa.pub) на сервер. Далее нужно перейти в каталог ~/.ssh учетной записи, для которой настраивается ключ, и поместить содержимое id_rsa.pub в конец файла authorized_keys:
cat id_rsa.pub » authorized_keys
Но не будем строить лишние предположения и усложнять себе жизнь. Считаем, что доступ по паролю пока открыт и достаточно использовать команду ssh-copy-id для загрузки ключей на сервер. Когда открытые ключи всех пользователей загружены, можно отключить вход по паролю. Для этого открой в любом текстовом редакторе файл /etc/ssh/sshd_config и установи в значение No директиву PasswordAuthentication:
PasswordAuthentication no
Также нужно убедиться, что три следующие директивы установлены таким образом:
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitRootLogin without-password
Первая включает аутентификацию по публичному ключу, а вторая указывает имя файла, в котором должны храниться ключи. Третья разрешает вход как root без использования пароля (по ключу).
Осталось перезагрузить SSH:
systemctl restart ssh
На стороне клиента войти по ключу на SSH-сервер можно так:
ssh -i ~/.ssh/id_rsa.pub user@example.com
Здесь мы указываем имя файла ключа, имя пользователя и имя сервера. В Windows нужно настраивать используемый тобой SSH-клиент, например в Bitvise SSH Client необходимо нажать кнопку‑ссылку Client key manager на вкладке Login и в появившемся окне нажать кнопку Generate New. В окне Generate New Keypair можно просто воспользоваться кнопкой Generate. А можно дополнительно защитить ключевую пару паролем — для этого ввести пароль, подтвердить его и нажать кнопку Generate. Рекомендуется использовать парольную фразу — если во время твоего отсутствия кто‑то запустит SSH-клиент и попробует подключиться к серверу, используя твой открытый ключ, у него ничего не получится, так как он не знает пароль.
Пароль нужен для доступа к ключевой паре только на локальном компьютере, он не передается в каком бы то ни было виде на сервер. После того как ключевая пара сгенерирована, нужно нажать кнопку Export для экспорта публичного ключа. Формат — OpenSSH. После того как ты сохранишь открытый ключ в каком‑нибудь файле, загрузи этот ключ на сервер и добавь его содержимое в файл
~/.ssh/authorized_keys
Способов много, например можно использовать учетку, в которой уже настроена аутентификация для загрузки этого файла. Можно загрузить ключ на какой‑то сайт и на сервере скачать его с помощью команды wget http:адрес/имя_файла. В общем, прояви фантазию, и у тебя все получится. После того как сервер «узнает» твой ключ, в основном окне клиента выбери Initial method — publickey, а из списка Client Key — профиль, в котором ты сохранил ключ. Client key manager Основное окно Bitvise SSH Client ===7. НАЗНАЧАЕМ SSH НЕСТАНДАРТНЫЙ ПОРТ=== По умолчанию SSH использует порт 22. Но ты можешь перенастроить его на другой порт из соображений безопасности — тогда для подключения по SSH нужно знать еще и номер порта. Открой /etc/ssh/sshd_config и найди директиву Port. Вместо 22 укажи другой порт: Port 2206 После этого перезапусти SSH и перелогинься. При входе в настройках клиента укажи новый номер порта. ===8. НАСТРАИВАЕМ БРАНДМАУЭР=== Разобравшись с безопасностью пользователей, нужно настроить брандмауэр. Традиционно в качестве брандмауэра (фильтра пакетов) в Ubuntu используется iptables, но поскольку Ubuntu позиционируется как простой дистрибутив, то и оболочка для iptables была разработана соответствующая — UFW (Uncomplicated Firewall). Это несложный файрвол. Первым делом убедись, что пакет ufw вообще установлен, и установи его, если это не так: sudo apt install ufw Базовая настройка Теперь посмотрим состояние брандмауэра: sudo ufw status verbose По умолчанию фильтр пакетов выключен, поэтому команда выведет сообщение Status: inactive. Не нужно спешить включать файрвол: сначала его требуется настроить. Ведь если порт 22 окажется по умолчанию недоступен, то ты потеряешь доступ к своему VDS. Конечно, саппорт поможет, но это напрасная трата времени. С базовыми настройками брандмауэр запрещает все входящие соединения и разрешает все исходящие. Такая политика идеальна с точки зрения безопасности — ведь если кто‑то (и ты в том числе) захочет к нему подключиться, у него это не получится. В то же время приложения на сервере смогут создавать исходящие соединения. Рассмотрим две команды: ufw default deny incoming ufw default allow outgoing Эти два правила как раз и задают политику по умолчанию: запрещаются все входящие соединения и разрешаются все исходящие. Итак, все входящие соединения запрещены. Чтобы до сервера можно было достучаться по определенному порту, его нужно сначала открыть. UFW хорош тем, что админу даже не требуется помнить номер порта — необходимо знать только название сервиса. Например, вот как можно разрешить подключение по SSH: ufw allow ssh При этом UFW сам создаст правило для порта 22 — именно этот порт используется для SSH. Брандмауэр знает порты и имена всех распространенных служб (HTTP, SSH, FTP, SFTP и так далее). Однако если ты перенастроил SSH на нестандартный порт, нужно явно указать номер порта: ufw allow 2206 После разрешения SSH (это главное, чтобы сейчас файрвол нам не разорвал соединение) можно включить ufw следующей командой: ufw enable Необходимо подтвердить запуск: Command may disrupt existing ssh connections. Proceed with operation (y|n)? Базовая настройка Разберемся, что произошло. Сначала мы разрешили SSH и получили ответ Rules updated, то есть правила обновлены. Затем мы включаем файрвол и получаем сообщение, что он активен и будет запускаться при загрузке системы. На этом базовая настройка выполнена — SSH успешно работает, и мы можем приступить к дальнейшей настройке фильтра пакетов. Создание правил для сервисов Теперь нужно разрешить работу других приложений. Как правило, требуется разрешить службу HTTP (веб‑сервер), FTP (если этот сервис вам нужен) и постараться не забыть о HTTPS (что очень важно в последнее время): ufw allow http ufw allow https ufw allow ftp Сделать то же самое можно было бы и по номерам портов: ufw allow 80 ufw allow 443 ufw allow 21 При желании можно разрешить целый диапазон портов, указав при этом транспортный протокол (UDP или TCP): sudo ufw allow 2000:2200/tcp sudo ufw allow 4000:4400/udp Разрешаем IP-адреса Ufw позволяет разрешить определенному IP-адресу доступ ко всем портам сервера, например: ufw allow from 111.222.33.44 Если нужно разрешить доступ конкретному IP-адресу только к определенному порту, то делается это так: ufw allow from 111.222.33.44 to any port 22 Здесь мы разрешаем не все подключения к SSH, а только подключения с IP-адреса 111.222.33.44. WARNING Делать это нужно только в том случае, если у тебя постоянный IP — такой IP можно получить за дополнительную плату у твоего провайдера. Обычно у пользователей динамические IP-адреса — если ты прямо сейчас посмотришь свой внешний IP, укажешь его в команде выше, то, как только твой IP поменяется, ты лишишься доступа к серверу. Так что будь осторожен! Разрешить доступ целого диапазона IP-адресов (например, когда у админа динамический IP) можно таким образом: ufw allow from 123.45.67.89/24 to any port 22 Запрещаем IP-адреса и службы Чтобы запретить доступ с определенного IP-адреса, воспользуйся вот такой командой: ufw deny from 123.45.67.89 При желании можно запретить все подключения к определенной службе: ufw deny ftp Удаление и сброс правил Сбросит все правила следующая команда: ufw reset Но до того, как вводить эту команду, убедись, что ты отключил файрвол (команда ufw disable), иначе потеряешь доступ по SSH. Удалить конкретное правило можно по номеру. Сначала введи следующую команду, чтобы узнать номер правила: ufw status numbered Далее введи команду такого вида: ufw delete <номер правила> ===9. НАСТРАИВАЕМ РЕЗЕРВНОЕ КОПИРОВАНИЕ=== Как правило, в админке управления серверами и другими услугами провайдера есть возможность настроить резервное копирование для каждого сервера. В зависимости от условий тарифного плана бэкап может быть бесплатным (то есть ты можешь использовать какой‑то объем пространства под бэкапы), а может быть платным. Как показывает практика, часто провайдеры требуют плату за хранение бэкапов, поэтому сама возможность резервного копирования хоть и имеется, но выключена, чтобы у клиента не было дополнительных трат. У тебя, как у админа VDS, есть два варианта. Первый — использовать средства резервного копирования провайдера, второй — настроить резервное копирование на своем сервере. Бэкап на стороне провайдера надежнее, так как резервная копия хранится за пределами сервера. Второй вариант менее надежен, поскольку если что‑то случится с файловой системой сервера, то ты потеряешь все свои данные. Как быть? Лучше всего использовать комбинированную систему — настроить бэкапы на стороне провайдера со средней периодичностью, скажем раз в неделю. При такой периодичности счет за бэкапы не будет космическим. Зато, если что‑то случится с файловой системой, ты сможешь восстановить данные, пусть и не самые актуальные, но это лучше, чем начинать все с нуля. А теперь поговорим о бэкапе вручную на стороне сервера. Есть целые решения для резервного копирования. Нужны они или нет — решать только тебе. Я же предлагаю пойти по самому простому пути. Первым делом надо определиться, какие данные стоит резервировать. Если у тебя на сервере веб‑сайт (например, интернет‑магазин), то копировать нужно только файлы корневого каталога веб‑сервера (DocumentRoot, обычно это /var/www/html, но зависит от настроек сервера) и базу данных. Файлы веб‑сервера можно копировать раз в неделю — они меняются относительно нечасто. Если ты делаешь бэкап средствами провайдера, скажем каждую пятницу, то бэкап файлов сервера можно делать в середине недели — в среду. Тогда у тебя будет на всякий случай две резервные копии за неделю. Можно и чаще — главное, чтобы хватило места на диске. Если у тебя 1 Тбайт, а сайт весит 250 Гбайт, то очень часто бэкапы создавать не придется. Создать архив с резервной копией файлов сайта можно командой zip -r /backups/latest.zip /var/ww/html Эту команду нужно добавить в расписание crontab. Введи команду crontab –e и добавь строчку: 0 2 * * 3 /usr/bin/zip –r /backups/latest.zip /var/ww/html Делать бэкап лучше всего ночью, чтобы снизить нагрузку на сервер. Здесь копия будет создаваться по средам в два часа ночи. Распаковать архив можно с помощью команды unzip. Теперь о базе. Изменения в базу данных вносятся постоянно: менеджеры добавляют информацию о продуктах, какой‑то скрипт импорта изменяет цены и остатки товаров, а посетители делают заказы. Поэтому копия базы должна создаваться раз в день. Для копии используем mysql-dump: mysqldump -u cp_user -p –opt cp_main_v2 –max_allowed_packet=100M > db-latest.sql Здесь cp_user — имя пользователя БД, cp_main_v2 — имя базы данных, опция max_allowed_packet задает максимальный размер пакета — на случай, если БД занимает несколько гигов, эта опция тебя спасет. Бэкап делается в файл db-latest.sql. Восстановиться можно так: mysql –host=127.0.0.1 –port=3310 –max_allowed_packet=100M -u cp_user -p cp_main_v2 < /db-latest.sql Назначение параметров должно быть понятно. Параметры host и port можно не указывать, если MySQL работает на localhost и использует стандартный порт. Команду создания дампа нужно запускать каждый день, поэтому в crontab добавляем строку 0 1 * * * /usr/bin/mysqldump -u cp_user -p –opt cp_main_v2 –max_allowed_packet=100M > /root/db-latest.sql Бэкап будет сниматься каждый день в час ночи (а в два мы запускаем создание бэкапа файлов). Кроме бэкапов не забывай о снапшотах! Перед каждым значимым изменением на сервере (вроде установки расширения, пересборки CMS, обновления ПО, например установки новой версии PHP) делай снапшот. Да, всегда можно восстановиться из бэкапа, но бэкап у нас не самый свежий, да и времени такое восстановление занимает больше, чем восстановление из снапшота. Снапшоты тоже платные, но их цена ничтожна на фоне простоя production-сервера. НАПОСЛЕДОК — УСТАНОВКА АДМИНКИ Лично мне проще и привычнее управлять сервером через SSH. Но если нужен графический интерфейс для выполнения ежедневных рутинных задач, можешь установить панель управления. Выбор конкретной панели зависит от двух факторов: необходимой функциональности и стоимости панели управления. Если нужны бесплатные решения, смотри в сторону Webmin и VestaCP. Остальные варианты менее популярны. Собственно, на этом все — базовая настройка VDS завершена. Теперь можно приступить к установке и настройке необходимого ПО (Nginx, MySQL, PHP и прочее). Источник —–