Вступление

Вступление

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

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

В этом руководстве объясняется, как использовать https://ansible.com [Ansible] для автоматизации шагов, содержащихся в наших https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 Руководство по первоначальной настройке сервера. Ansible - это современный инструмент управления конфигурацией, который можно использовать для автоматизации предоставления и настройки удаленных систем.

Предполетная проверка

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

  • Ansible установлен на локальном компьютере или на удаленном сервере что вы настроили в качестве _ Ansible Control Node. Вы можете выполнить шаг 1 учебного руководства Как установить и настроить Ansible в Ubuntu 18.04, чтобы настроить это.

  • Корневой доступ к одному или нескольким серверам Ubuntu 18.04, которые будут управляться по Ansible.

Перед запуском playbook важно убедиться, что Ansible может подключиться к вашим серверам через SSH и запустить Ansible modules с помощью Python. В следующих двух разделах описано, как настроить инвентаризацию Ansible для включения ваших серверов и как запустить специальные команды Ansible для проверки подключения и действительных учетных данных.

Файл инвентаря

Inventory file содержит информацию о хостах, которыми вы будете управлять с помощью Ansible. Вы можете включить от одного до нескольких сотен серверов в свой файл инвентаризации, и хосты могут быть организованы в группы и подгруппы. Файл инвентаря также часто используется для установки переменных, которые будут действительны только для определенных хостов и групп, чтобы использоваться в книгах воспроизведения и шаблонах. Некоторые переменные также могут влиять на способ запуска playbook, например, переменная + ansible_python_interpreter +, которую мы увидим через минуту.

Чтобы просмотреть содержимое стандартного инвентаря Ansible, откройте файл + / etc / ansible / hosts + с помощью выбранного редактора командной строки на локальном компьютере или на узле управления Ansible:

sudo nano /etc/ansible/hosts

Файл инвентаризации по умолчанию, предоставляемый установкой Ansible, содержит несколько примеров, которые вы можете использовать в качестве ссылок для настройки инвентаризации. В следующем примере определяется группа с именем * server *, в которой находятся три разных сервера, каждый из которых идентифицируется по своему псевдониму: * server1 *, * server2 * и * server3 *:

/ и т.д. / анзибль / хостов

[servers]
server1 ansible_host=
server2 ansible_host=
server3 ansible_host=

[servers:vars]
ansible_python_interpreter=/usr/bin/python3

Подгруппа + server: vars + устанавливает параметр хоста + ansible_python_interpreter +, который будет действителен для всех хостов, входящих в группу + servers +. Этот параметр гарантирует, что удаленный сервер использует + / usr / bin / python3 + Python 3 вместо + / usr / bin / python + (Python 2.7), которого нет в последних версиях Ubuntu.

Чтобы завершить настройку файла инвентаризации, замените выделенные IP-адреса IP-адресами ваших серверов. Когда вы закончите, сохраните и закройте файл, нажав + CTRL + X +, затем + y +, чтобы подтвердить изменения, а затем + ENTER +.

Теперь, когда ваш файл инвентаризации готов, пришло время проверить подключение к вашим узлам

Тестирование подключения

После настройки файла инвентаризации для включения ваших серверов, пришло время проверить, может ли Ansible подключиться к этим серверам и запускать команды через SSH. В этом руководстве мы будем использовать учетную запись Ubuntu * root *, поскольку это обычно единственная учетная запись, доступная по умолчанию на вновь создаваемых серверах. Этот playbook создаст нового пользователя без полномочий root с привилегиями + sudo +, который вы должны использовать при последующих взаимодействиях с удаленным сервером.

С вашего локального компьютера или узла управления Ansible запустите:

ansible -m ping all -u root

Эта команда будет использовать встроенный модуль + ping + Ansible для запуска теста подключения на всех узлах из инвентаря по умолчанию, подключаясь как * корень *. Модуль + ping + проверит: +, доступны ли хосты; + если у вас есть действительные учетные данные SSH; + если хосты могут запускать модули Ansible с использованием Python.

Если вместо аутентификации на основе ключей вы используете password-аутентификацию для подключения к удаленным серверам, вы должны предоставить дополнительный параметр + -k + для команды Ansible, чтобы она запрашивала у вас пароль подключающегося пользователя. ,

ansible -m ping all -u root -k

Вы должны получить вывод, похожий на этот:

Outputserver1 | SUCCESS => {
   "changed": false,
   "ping": "pong"
}
server2 | SUCCESS => {
   "changed": false,
   "ping": "pong"
}
server3 | SUCCESS => {
   "changed": false,
   "ping": "pong"
}

Если вы впервые подключаетесь к этим серверам через SSH, вас попросят подтвердить подлинность хостов, к которым вы подключаетесь через Ansible. При появлении запроса введите + yes, а затем нажмите` + Enter` для подтверждения.

Как только вы получите ответ «понг» от хоста, это означает, что вы готовы запускать команды Ansible и игровые книги на этом сервере.

Что делает этот Playbook?

Этот сборник пьес Ansible предоставляет альтернативу ручному запуску процедуры, описанной в Ubuntu 18.04 начальное руководство по настройке сервера и руководство по адресу https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-1804, где описывается настройка ключей SSH в Ubuntu 18.04].

Запуск этой пьесы приведет к выполнению следующих действий:

  1. Административная группа * wheel * создается и затем настраивается для _ без пароля sudo _.

  2. В этой группе создается новый административный пользователь с именем определяется переменной + create_user +.

  3. Открытый ключ SSH копируется из местоположения, определенного переменной + copy_local_key + и добавлен в файл + авторизованные_коды + для пользователя, созданного на предыдущем шаге.

  4. Проверка подлинности на основе пароля отключена для пользователя * root *.

  5. Обновлен локальный индекс пакетов + apt + и определены основные пакеты переменной + sys_packages + установлены.

  6. Брандмауэр UFW настроен на разрешение только SSH-соединений и запрещает любые другие запросы.

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

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

Как использовать эту книгу

Для начала мы загрузим содержимое playbook на ваш Ansible Control Node. Это может быть либо локальный компьютер, либо удаленный сервер, на котором установлен Ansible и настроен ваш инвентарь.

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

curl -L https://raw.githubusercontent.com/do-community/ansible-playbooks/master/initial_server_setup/ubuntu1804.yml -o initial_server_setup.yml

Это загрузит содержимое книги воспроизведения в файл с именем + initial_server_setup.yml + по вашему текущему локальному пути. Вы можете просмотреть содержимое книги воспроизведения, открыв файл в редакторе командной строки по своему выбору:

nano initial_server_setup.yml

Открыв файл playbook, вы должны заметить раздел с именем * vars * с тремя различными переменными, которые требуют вашего внимания:

  • * create_user : имя учетной записи пользователя без полномочий root для создания и предоставить привилегии sudo. В нашем примере используется *, но вы можете использовать любое имя пользователя.

  • * copy_local_key *: Локальный путь к действительному публичному ключу SSH для настройки в качестве авторизованный ключ для новой учетной записи не-root + sudo +. Значение по умолчанию указывает на открытый ключ текущего локального пользователя, расположенный по адресу + ~ / .ssh / id_rsa.pub +.

  • * sys_packages *: список основных системных пакетов, которые будут установлены используя менеджер пакетов + apt +.

Когда вы закончите обновление переменных внутри + initial_server_setup.yml +, сохраните и закройте файл.

Теперь вы готовы запустить эту книгу на одном или нескольких серверах. По умолчанию большинство playbooks настроено для выполнения на серверах «+ all » из вашего инвентаря. Мы можем использовать флаг ` -l `, чтобы удостовериться, что playbook затрагивает только подмножество серверов или один сервер. Чтобы выполнить playbook только на ` server1 +`, вы можете использовать следующую команду:

ansible-playbook initial_server_setup.yml

Вы получите вывод, похожий на этот:

Output
PLAY [all] ***************************************************************************************************************************************

TASK [Make sure we have a 'wheel' group] *********************************************************************************************************
changed: [server1]

TASK [Allow 'wheel' group to have passwordless sudo] *********************************************************************************************
changed: [server1]

TASK [Create a new regular user with sudo privileges] ********************************************************************************************
changed: [server1]

TASK [Set authorized key for remote user] ********************************************************************************************************
changed: [server1]

TASK [Disable password authentication for root] **************************************************************************************************
changed: [server1]

TASK [Update apt] ********************************************************************************************************************************
changed: [server1]

TASK [Install required system packages] **********************************************************************************************************
ok: [server1]

TASK [UFW - Allow SSH connections] ***************************************************************************************************************
changed: [server1]

TASK [UFW - Deny all other incoming traffic by default] ******************************************************************************************
changed: [server1]

PLAY RECAP ***************************************************************************************************************************************
server1                    : ok=9    changed=8    unreachable=0    failed=0

Когда выполнение playbook будет завершено, вы сможете войти на сервер с помощью:

ssh @

Не забудьте заменить пользователя, определенного переменной + create_user +, именем хоста или IP-адресом вашего сервера.

В случае, если вы установили пользовательский открытый ключ с переменной + copy_local_key +, вам нужно будет указать дополнительный параметр, указывающий местоположение его секретного ключа:

ssh @ -i

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

sudo ufw status

Вы должны получить вывод, похожий на этот:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Это означает, что брандмауэр UFW успешно включен. Так как это было последнее задание в playbook, это подтверждает, что playbook был полностью выполнен на этом сервере.

Содержание Playbook

Начальную книгу настроек сервера можно найти в ansible-playbooks репозитории в https: // github. com / do-community [организация сообщества GitHub]. Чтобы скопировать или загрузить содержимое сценария напрямую, нажмите кнопку * Raw * в верхней части сценария или https://raw.githubusercontent.com/do-community/ansible-playbooks/master/initial_server_setup/ubuntu1804.yml[click здесь, чтобы просмотреть сырое содержимое напрямую.

Полное содержание также включено сюда для удобства:

initial_server_setup.yml

---
- hosts: all
 remote_user: root
 gather_facts: false
 vars:
   create_user:
   copy_local_key: ""
   sys_packages: [  ]

 tasks:
   - name: Make sure we have a 'wheel' group
     group:
       name: wheel
       state: present

   - name: Allow 'wheel' group to have passwordless sudo
     lineinfile:
       path: /etc/sudoers
       state: present
       regexp: '^%wheel'
       line: '%wheel ALL=(ALL) NOPASSWD: ALL'
       validate: '/usr/sbin/visudo -cf %s'

   - name: Create a new regular user with sudo privileges
     user:
       name: "{{ create_user }}"
       state: present
       groups: wheel
       append: true
       create_home: true
       shell: /bin/bash

   - name: Set authorized key for remote user
     authorized_key:
       user: "{{ create_user }}"
       state: present
       key: "{{ copy_local_key }}"

   - name: Disable password authentication for root
     lineinfile:
       path: /etc/ssh/sshd_config
       state: present
       regexp: '^#?PermitRootLogin'
       line: 'PermitRootLogin prohibit-password'

   - name: Update apt
     apt: update_cache=yes

   - name: Install required system packages
     apt: name={{ sys_packages }} state=latest

   - name: UFW - Allow SSH connections
     ufw:
       rule: allow
       name: OpenSSH

   - name: UFW - Deny all other incoming traffic by default
     ufw:
       state: enabled
       policy: deny
       direction: incoming

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

Заключение

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

В этом руководстве мы продемонстрировали, как использовать Ansible для автоматизации начальных задач, которые должны быть выполнены на новом сервере, таких как создание пользователя без полномочий root с доступом sudo, включение UFW и отключение удаленного входа в систему root.

Если вы хотите включить новые задачи в эту книгу для дальнейшей настройки первоначальной настройки сервера, обратитесь к нашему вводному руководству Ansible https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible -playbooks [Управление конфигурацией 101: Написание Ansible Playbooks].

Related