Начальная настройка сервера с Ubuntu
Совместимо с версиями 14–22
--
Введение
Если вы разворачиваете сервер в сети интернет, то его необходимо настроить для удобного использования и безопасности. В данной статье описаны шаги для достижения этих целей.
Шаг 1 — первое подключение
Для входа на сервер и управления им используется подключение через SSH клиент. Протокол SSH обеспечивает зашифрованную передачу данных при общении с сервером, так что никто кроме вас не сможет подсмотреть, что именно вы делаете. Даже в момент создания подключения логин и пароль передаются в зашифрованном виде.
Для подключения вам понадобится публичный IP адрес сервера и пароль учетной записи root.
Вы можете подключиться к серверу по SSH, если выполните указанную ниже команду, заменив USER
на имя вашего пользователя и IP_ADDRESS
на IP адрес вашего сервера:
ssh USER@IP_ADDRESS
При первом подключении к серверу ваш компьютер ничего не знает о нем, в связи с чем вы увидите сообщение:
The authenticity of host '203.0.113.0 (203.0.113.0)' can't be established.
ECDSA key fingerprint is SHA256:IcLk6dLi+0yTOB6d7x1GMgExamplewZ2BuMn5/I5Jvo.
Are you sure you want to continue connecting (yes/no)? yes
Напечатайте yes и нажмите Enter.
Далее система предложит вам ввести пароль учетной записи, используемой при подключении. Введите его и нажмите Enter. После успешного подключения вы увидите приветствие системы, а поле ввода в интерпретаторе команд будет начинаться со строки root@ServerName:~$. Это очень удобно, так как при выполнении команд вы всегда видите имя сервера, а не имя своего домашнего или рабочего компьютера, и всегда можете убедиться, что ничего не сломаете.
Шаг 2 — смена пароля root
Сразу после первого подключения стоит изменить стандартный пароль учетной записи root. Для этого выполните команду:
passwd
Система предложит вам ввести новый пароль и его подтверждение. Подтверждение необходимо для удостоверения в том, что вы не ошиблись, когда печатали пароль.
Придумывайте как можно более сложные пароли — от этого напрямую зависит безопасность сервера. Короткие пароли, состоящие из настоящих слов, очень легко подобрать по словарю. Лучше всего будет, если длина пароля будет более 12 символов, включая строчные и прописные буквы, цифры и служебные символы.
Чтобы создать случайный пароль в 24 символа, включающий буквы различных регистров и цифры, вы можете воспользоваться командой:
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 24 ; echo ''
Шаг 3 — создание нового пользователя
Учетная запись root является администратором ОС Linux. От его имени следует выполнять только самые важные задачи, которые требуют особых привилегий. Из-за того, что он обладает неограниченными правами, следует обезопасить себя и создать специального пользователя для подключения к серверу. При этом доступ к серверу через SSH под root следует запретить.
Нового пользователя можно создать командой:
adduser ИМЯ_ПОЛЬЗОВАТЕЛЯ_СИСТЕМЫ
Вам зададут несколько вопросов, первым из которых будет пароль для новой учетной записи. Его так же нужно сделать как можно более сложным. Можете воспользоваться тем же способом, что и при создании пароля для root.
Вводить дополнительную информацию не обязательно. Можно просто нажать Enter в любом поле.
Шаг 4 — привилегии пользователя
Теперь у вас есть учетная запись со стандартными привилегиями для работы с сервером. Однако, иногда необходима возможность выполнять команды с повышенными привилегиями от лица созданного вами пользователя.
Чтобы выполнить команду с повышенными привилегиями, нужно сделать это в режиме “супер-пользователя”, добавив к началу команды слово sudo. Однако, по умолчанию пользователи не обладают таким правом.
Чтобы предоставить возможность использовать команду sudo в Ubuntu есть несколько способов.
Первый способ — добавить пользователя в группу sudo. В Ubuntu все пользователи, находящиеся в данной группе могут выполнять команды в режиме “супер-пользователя”. Для этого выполните команду:
usermod -aG sudo ИМЯ_ПОЛЬЗОВАТЕЛЯ_СИСТЕМЫ
Второй способ — выдать пользователю права на выполнение команды sudo по его имени.
Я предпочитаю второй способ, так как он явно указывает на привилегии конкретного пользователя, когда в первом способе легко забыть, что пользователь находится в группе sudo, или что все пользователи в этой группе обладают определенными правами.
Разрешения на команду sudo находятся в файле /etc/sudoers. Для просмотра и редактирования файлов я предпочитаю использовать программу vim, которую можно установить указанной ниже командой, но вы можете воспользоваться любым другим удобным вам способом.
apt-get install vim
Итак, в файле /etc/sudoers уже должна быть такая строчка:
root ALL=(ALL) ALL
Ее присутствие позволяет пользователю или группе root (первый параметр), исполнять на любой машине (второй параметр) команды, указанные в третьем параметре (после знака равно).
Аналогичным способом нужно наделить нового пользователя правом на команду sudo, добавив в файл следующую строку:
ИМЯ_ПОЛЬЗОВАТЕЛЯ_СИСТЕМЫ ALL=(ALL) ALL
Если внимательно посмотреть содержание файла /etc/sudoers, то в нем можно увидеть строчку sudo ALL=(ALL:ALL) ALL
, которая дает права группе sudo на использование соответствующей команды.
Шаг 5 — запрет подключения через SSH под root
Возможность подключиться к серверу через SSH под учетной записью root, это дырка в безопасности, которую хотелось бы закрыть.
Так как мы создали специального пользователя для управления сервером, который наделен всеми необходимыми правами, то доступ под root к SSH там больше не нужен.
Изменим настройки ssh сервера. Запретим логин под root, доступ по доменному имени и разрешим логин только под нашим новым пользователем.
Для этого нужно внести в файл /etc/ssh/sshd_config следующие изменения:
PermitRootLogin no
UseDNS no
AllowUsers ИМЯ_ПОЛЬЗОВАТЕЛЯ_СИСТЕМЫ
Возможно, директивы PermitRootLogin и UseDNS уже присутствуют в файле, и необходимо просто задать им нужное значение.
Если вы используете Ubuntu 14, то перезапустите ssh сервер командой:
reload ssh
Или для Ubuntu ≥ 16:
service ssh restart
Шаг 6 — смена порта для SSH
Для дополнительной защиты можно сменить порт SSH, который по умолчанию имеет значение 22:
Port 50683
Выбирайте значение между 49152 и 65535, это диапазон динамических портов (частных). Можно воспользоваться командой shuf для случайного выбора в этом диапазоне:
shuf -i 49152-65535 -n 1
На всякий случай можно проверить, не занят ли выбранный порт. Выполните указанную ниже команду. Если результат выполнения пустой, значит порт свободен:
sudo lsof -i :22
Если вы используете Ubuntu 14, то перезапустите ssh сервер командой:
reload ssh
Или для Ubuntu ≥ 16:
service ssh restart
Шаг 7— Настройка авторизации по открытому ключу (Рекомендуется)
Намного удобнее и безопаснее способ авторизации по ключу, а вход по паролю может быть даже и вовсе заблокирован. Обращение к системе по SSH не вполне безопасно. Злоумышленники могут подсмотреть пароль, когда вы будете вводить его в другой программе. Так же, если у вас множество серверов, то все пароли запомнить довольно проблематично, особенно если они состоят из набора букв и цифр. Поэтому лучше для авторизации использовать ключи, которые и так защищены дальше некуда.
Для начала проверьте, существует ли на вашем локальном компьютере папка /home/ВАШ_ПОЛЬЗОВАТЕЛЬ/.ssh. Если нет, то создайте ее командой:
mkdir ~/.ssh
Для генерации ключа выполните команду:
ssh-keygen -t rsa -f ~/.ssh/myrsakey
Если не указать имя файла, то по умолчанию он будет создан в каталоге ~/.ssh с именем id_rsa.
После выполнения команды система предложит вам ввести кодовую фразу для ключа и повторить ее для минимизации опечаток. Если ее указать, то в момент подключения по SSH вместо введения пароля вам нужно будет ввести эту самую фразу. Кодовой фразой может быть любое короткое запоминающееся предложение. Если при создании ключа фразу не указывать, то и при подключении вводить ее не придется. Более защищенным вариантом будет подключение с кодовой фразой, но и подключение без нее будет лучше, чем подключение по паролю:
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
После успешного создания ключа вы увидите сообщение о том, что создались секретный и открытый ключи:
Your identification has been saved in /home/ВАШ_ПОЛЬЗОВАТЕЛЬ/.ssh/myrsakey.
Your public key has been saved in /home/ВАШ_ПОЛЬЗОВАТЕЛЬ/.ssh/myrsakey.pub
Отобразите на экране содержание файла myrsakey.pub:
cat ~/.ssh/myrsakey.pub
Вы должны увидеть примерно следующее:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBGTO0tsVejssuaYR5R3Y/i73SppJAhme1dH7W2c47d4gOqB4izP0+fRLfvbz/tnXFz4iOP/H6eCV05hqUhF+KYRxt9Y8tVMrpDZR2l75o6+xSbUOMu6xN+uVF0T9XzKcxmzTmnV7Na5up3QM3DoSRYX/EP3utr2+zAqpJIfKPLdA74w7g56oYWI9blpnpzxkEd3edVJOivUkpZ4JoenWManvIaSdMTJXMy3MtlQhva+j9CgguyVbUkdzK9KKEuah+pFZvaugtebsU+bllPTB0nlXGIJk98Ie9ZtxuY3nCKneB+KjKiXrAvXUPCI9mWkYS/1rggpFmu3HbXBnWSUdf localuser@machine.local
На сервере, осуществив вход под созданным вами пользователем, создайте новую директорию под названием .ssh и ограничьте права на доступ к ней при помощи следующих команд:
mkdir ~/.ssh
chmod 700 ~/.ssh
Теперь создайте или откройте файл в директории .ssh с названием authorized_keys в текстовом редакторе и добавьте в его конец содержание файла ~/.ssh/myrsakey.pub с вашего локального компьютера. Только убедитесь, что владельцем файла authorized_keys является пользователь, под которым вы осуществляете подключение к серверу.
Далее ограничьте права на доступ к файлу authorized_keys при помощи следующей команды:
chmod 600 ~/.ssh/authorized_keys
Теперь вы можете заходить на сервер по SSH с учетной записью вашего нового пользователя, используя закрытый ключ для авторизации:
ssh -i ~/.ssh/myrsakey ИМЯ_ПОЛЬЗОВАТЕЛЯ_СИСТЕМЫ@IP_адрес_сервера
Если при создании ключа вы указали кодовую фразу, то ее необходимо будет ввести.
Если при подключении по ключу выдаётся ошибка “authentication error”, добавьте в файл /etc/ssh/sshd_config следующие строки:
PubkeyAcceptedKeyTypes=+ssh-rsa
Итак, вход по ключу настроен. Если вы хотите отключить доступ по паролю, то добавьте строчку PasswordAuthentication no
в файл /etc/ssh/sshd_config и перезапустить ssh сервер.
Заключение
Теперь ваш сервер имеет удобный доступ и минимальную защиту, с которыми можно начинать работу.