CentOS, наряду с Ubuntu/Debian, популярна в качестве операционной системы на виртуальных серверах (VDS/VPS). Решил посмотреть, что это такое, а результаты зафиксировать в виде базовой статьи, чтобы в других материалах можно было не тратить время на описание установки и минимально необходимой настройки. Осторожно - беспрецедентное количество скриншотов.

С Ubuntu, как говорится, я уже давно знаком (с версии 14.04 и, соответственно, 2014 года). CentOS же до поры до времени оставалась для меня terra incognita (при том что в комментариях мне ее советовали установить еще на домашний сервер 1.0 в 2013 году), пока в голову не пришла мысль - существуют ли бесплатные виртуальные машины? Ответ лежал на поверхности - VirtualBox, и не нужны нам никакие эти ваши VMWare! biggrin

Подготовка

С одной стороны, нам понадобится образ установочного диска CentOS. На момент написания статьи это был CentOS-7-x86_64-Minimal-1810.iso, который можно скачать, в частности, с Яндекса. Windows 10 умеет самостоятельно монтировать образы (а возможно и восьмерка), в более ранних версиях Windows придется установить какой-нибудь виртуальный привод или банально записать.

С другой стороны, необходимо установить VirtualBox (я пользуюсь версией 6.0.2), причем не забыть про виртуальные сетевые адаптеры (Virtualbox Networking) - иначе не получится доступаться к гостевой ОС по SSH, HTTP и т.д.

 

На всякий случай проверим наличие, а в случае отсутствия - создадим виртуальный сетевой адаптер хоста с помощью соответствующего менеджера:

 

Создание виртуальной машины

На первом шаге указываем имя, тип ОС и папку с виртуальными машинами. Интересная особенность - если в качестве имени начать набирать Cent, то автоматически выберется Linux и Red Hat (64-bit). На втором шаге задаем объем оперативной памяти. Подобно стартовым тарифам VDS, предлагаю выставить 512 мегабайт. На третьем шаге выберем создание нового виртуального жесткого диска.

2019-01-31_17-14-56.png
2019-01-31_17-17-30.png
2019-01-31_17-17-50.png

 

Если на первом шаге нажать на кнопку "Экспертный режим", то все эти параметры окажутся на одном экране. Зачем надо было делать "мастер", непонятно.

 

Последующие действия тоже практически не отличаются в "экспертном" и "подробном" режимах, разве что в "подробном режиме" даются пояснения о типе и формате хранения виртуального жесткого диска. Думаю, после 1-2 раз создания виртуалки в режиме мастера быстрее будет "нащелкивать" в экспертном.

2019-01-31_17-23-00.png
2019-01-31_17-23-11.png
2019-01-31_17-25-15.png

 

Я оставляю "родной" формат (VDI), но фиксированный размер - чтобы место было выделено сразу.

 

На моей мега-SSD выделение места происходит за считанные секунды, после чего вновь созданная виртуальная машина появляется в списке. Настройки виртуальной машины по умолчанию не вполне устраивают, поэтому, прежде чем ее включать, внесем ряд изменений в конфигурацию. В разделе "Система" меняем чипсет на ICH9 (PIIX3 что-то совсем не в тему), а манипулятор курсора - на "USB планшет". Немного странное название, но так надо. smile Аудио отключаем - зачем оно в консоли?

2019-01-31_17-28-39.png
2019-01-31_17-32-15.png

 

Самое главное - настройки сети. Первый адаптер включен по умолчанию в режиме NAT - оставляем. Для доступа к сервисам гостевой системы включаем второй адаптер в режиме "Виртуальный адаптер хоста":

2019-01-31_17-32-56.png
2019-01-31_17-33-18.png

 

Остальные настройки можно не менять. У меня получилась следующая конфигурация:

 

Не обращайте внимания на другие ВМ. Надо же было на чем-то тренироваться! smile

Установка

При первом запуске машины VirtualBox запрашивает загрузочный диск. В моем примере установочный образ CentOS смонтирован в диск G:

 

На первом экране, соответственно, выбираем Install CentOS 7. После загрузки установщика мы довольно неожиданно попадаем в весьма симпатичную графическую оболочку. Именно для нее потребовалась мышь типа "USB планшет". smile Теоретически можно выбрать русский язык, но "для полноты ощущений" предлагаю оставить английский:

VirtualBox_CentOS 7 example_31_01_2019_17_42_26.png
VirtualBox_CentOS 7 example_31_01_2019_17_48_03.png

 

Данные для следующего этапа некоторое время заполняются значениями по умолчанию. Большинство пунктов можно не трогать - это Keyboard, Language Support, Installation Source, Software Selection, KDUMP и Security Policy. За исключением клавиатуры и языка, альтернатив особо и нет. Сначала настраиваем время (фактически просто выбираем часовой пояс):

VirtualBox_CentOS 7 example_31_01_2019_17_53_23.png
VirtualBox_CentOS 7 example_31_01_2019_17_53_05.png

 

Переходим к выбору места установки (Installation Destination), и на этом пункте хотелось бы остановиться. Локальный диск у моей виртуальной машины один - он и выбран по умолчанию. Таблица разделов может быть создана автоматически, что по сути мы и сделаем. Однако хотелось бы понять, каким образом будет размечен диск, для этого переключаемся на I will configure partitioning. Ниже (не поместился на один экран) есть еще флаг Encrypt my data, но шифровать мы наверное ничего не будем. Открывается окно создания таблицы разделов.

VirtualBox_CentOS 7 example_31_01_2019_17_58_59.png
VirtualBox_CentOS 7 example_31_01_2019_18_00_55.png

 

Как я и говорил, рассмотрим автоматически создаваемую таблицу - нажимаем "Click here to create them automatically". Получается довольно интересно:

VirtualBox_CentOS 7 example_31_01_2019_18_02_35.png
VirtualBox_CentOS 7 example_31_01_2019_18_02_43.png
VirtualBox_CentOS 7 example_31_01_2019_18_02_49.png

 

Установщик создает три раздела: boot, / (centos-root) и swap, причем root и swap объединяются в группу логических томов (LVM Volume Group). На мой взгляд, это очень необычно, хотя при этом впоследствии потенциально проще будет изменять размеры. Файловая система - xfs, в отличие от ext4 в Ubuntu/Debian. Для загрузочного раздела мастер выделяет "честный" гигабайт, а для раздела подкачки - примерно 819 мегабайт (при 512, а фактически даже еще меньше, "виртуальных" мегабайт ОЗУ). Я пробовал было создавать единственный раздел на весь диск, но такой номер установщик не очень понимает, требуя создания все того же раздела подкачки. Так что нажимаем Done и принимаем изменения файловой системы:

 

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

VirtualBox_CentOS 7 example_31_01_2019_18_28_11.png
VirtualBox_CentOS 7 example_31_01_2019_18_28_26.png

 

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

 

По кнопке Begin Installation начинается собственно процесс установки, при этом параллельно можно установить пароль root'у (это такой unix'овый суперпользователь, если вдруг wink) и/или создать пользователя. "В стиле Ubuntu" предпочтительнее создание администратора без задания пароля root'а и повышение привилегий с помощью sudo при необходимости.

VirtualBox_CentOS 7 example_31_01_2019_18_15_08.png
VirtualBox_CentOS 7 example_31_01_2019_18_16_43.png
VirtualBox_CentOS 7 example_31_01_2019_18_17_02.png

 

Что за прикол с группой wheel, я сначала не понял - оказалось, в CentOS это и есть группа администраторов. Через некоторое время установка завершится и останется лишь нажать кнопку Reboot.

 

Первоначальная настройка

При загрузке CentOS немного ругается на мой любимый Ryzen 5 2600 и выдает еще пару каких-то ошибок. Вроде бы это ни на что не влияет.

 

В установленной мной комбинации непосредственно под root войти невозможно, поэтому заходим под созданным пользователем (vbox) и переходим в root командой sudo -i. Позабавило напоминание о прохождении инструктажа у местного сисадмина. smile

VirtualBox_CentOS 7 example_31_01_2019_18_37_14.png
VirtualBox_CentOS 7 example_31_01_2019_18_37_40.png

 

Обновление

В первую очередь - обновляем систему до актуального состояния:

# yum update

Здесь и далее - если в начале команды стоит #, значит команду выполняет root, а если $ - пользователь.

Или yum upgrade, если не планируется откат на предыдущие версии пакетов.

Примечание от 03.02.2019. Для пущей важности можно было бы сначала синхронизириовать информацию о репозиториях как таковых: yum check-updates

Какое-то время система ищет эти самые обновления и выводит сводку. Скорее всего обновление необходимо подтвердить. smile Лишних вопросов можно избежать с помощью параметра -y. Кстати могут возникнуть вопросы и по поводу установки ключей электронных подписей.

VirtualBox_CentOS 7 example_31_01_2019_18_45_55.png
VirtualBox_CentOS 7 example_31_01_2019_18_49_26.png

 

Итак, менеджер пакетов yum - одно из принципиальных отличий CentOS от Ubuntu, где таким менеджером является apt. На мой взгляд, yum выглядит как-то более опрятно, что ли, хотя в плане производительности, возможно, уступает.

Примечание от 03.02.2019. CentOS, в отличие от Ubuntu, при попытке выполнить неизвестную команду не подсказывает, в каком пакете она может находиться. Для определения пакета по команде надо делать запрос вида yum provides <команда>

"В стиле Windows" перезагружаемся командой reboot, видим, что появился новый вариант загрузки с обновленным ядром.

 

Менеджер файлов

Следующим номером нашей программы является установка Midnight Commander для удобного перемещения по файловой системе, да и текстовый редактор будет очень часто требоваться.

$ sudo yum install -y mc

Как видите, согласно рекомендациям запустил установку "из-под себя" с помощью sudo. Первый запуск вроде как тоже целесообразно выполнить из обычной учетной записи, чтобы создались локальные папки настроек. Хотя вроде бы sudo mc аналогичные папки создает root'у.

 

Донастройка сети

Несмотря на то, что при установке были включены оба сетевых адаптера, доступа к виртуальной машине "извне" пока нет. Дело в том, что изначально полноценно работает только первый из них. Это подтверждает команда ip addr (ifconfig по умолчанию отсутствует) - адаптер enp0s8 не получил IP адрес.

 

Чтобы исправить этот недочет, необходимо отредактировать файл (разумеется в режиме суперпользователя) /etc/sysconfig/network-scripts/ifcfg-enp0s8 - установить параметр ONBOOT=yes

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=fe85f79c-ceef-46ae-8200-67c66659da34
DEVICE=enp0s8
ONBOOT=yes

В каталоге /etc как раз лежат всяческие конфиги, так что по началу вы там будете частенько бывать. smile

Перезагружаемся и проверяем ip addr:

[vbox@localhost ~]$ ip addr
...
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:36:95:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.104/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s8
       valid_lft 841sec preferred_lft 841sec
    inet6 fe80::e453:1ec6:5b3d:e3fa/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

В моем случае виртуальная машина получила IP адрес 192.168.56.104 (смотрим enp0s8 - inet). Проверяем ping из хоста (Windows):

C:\>ping 192.168.56.104

Обмен пакетами с 192.168.56.104 по с 32 байтами данных:
Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64
Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64
Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64
Ответ от 192.168.56.104: число байт=32 время<1мс TTL=64

Статистика Ping для 192.168.56.104:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

Все, PuTTY в руки и вперед коннектиться по SSH! Дело в том, что буфер обмена с VirtualBox я как-то не очень подружил (разве что общие папки, и то, в Ubuntu, которую вы могли видеть на скриншоте выше) - с этой точки зрения по SSH работать куда удобнее. Ключ, конечно же, принимаем. Кстати я схитрил - вставил конфиг адаптера и вывод ip addr уже после подключения по SSH. wink

Webmin

Опять же, по традиции, заложенной еще в Ubuntu, предлагаю установить панель управления Webmin. Можно установить из пакета, но лучше добавить репозиторий. Оба способа описаны на сайте, так что мне остается лишь продублировать.

Создаем файл /etc/yum.repos.d/webmin.repo следующего содержания:

[Webmin]
name=Webmin Distribution Neutral
#baseurl=https://download.webmin.com/download/yum
mirrorlist=https://download.webmin.com/download/yum/mirrorlist
enabled=1

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

# yum install wget

И только потом:

# cd ~
# wget http://www.webmin.com/jcameron-key.asc
# rpm --import jcameron-key.asc
# yum install webmin

Первая команда - это переход в домашнюю директорию (а то вдруг внутри etc находились). Вторая - собственно скачивание файла. Третья - добавление ключа в менеджер пакетов. И, наконец, установка.

Немного забегая вперед, если пароль root при установке ОС не задан, то произойдет конфуз - ни под root, ни под текущим пользователем войти не удастся. Вероятно, Webmin проверяет наличие пользователя в группе sudo, характерной для Debian, которой в CentOS изначально нет. Придется установить пароль пользователя root для Webmin с помощью скрипта changepass.pl:

# /usr/libexec/webmin/changepass.pl /etc/webmin root password

Вместо password надо написать фактический пароль. smile Второй параметр - /etc/webmin - путь к настройкам, root - имя пользователя.

Казалось бы, теперь можно в основной системе открыть https://192.168.56.104:10000/ - ан нет! В дело вступает FirewallD, а мы переходим к следующему разделу.

FirewallD

Это новый файрволл, который идет в комплекте с CentOS 7. Рекомендую две статьи, где этот сервис рассматривается достаточно подробно: Настройка firewalld CentOS 7 с примерами команд и Настройка брандмауэра FirewallD в CentOS 7. Если коротко, то для работы Webmin нам нужно открыть доступ к порту 10000 по протоколу tcp; также предлагаю сразу включить http - почти наверняка впоследствии вы будете устанавливать веб-сервер.

Для начала посмотрим текущую конфигурацию:

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Наиболее важным здесь является то, что текущей зоной является public (что-то вроде "общественной сети" в Windows), тем не менее, в индивидуальном порядке можно разрешить внешние соединения. Что и сделано для SSH (смотрим services), благодаря чему удалось подключиться через PuTTY без особого "шаманства". Если dhcpv6-client "мозолит глаза", можно убрать:

# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Примечания от 03.02.2019:

  1. Флаг --permanent обозначает применение настроек "навсегда".
  2. Для применения команд к активной зоне параметр --zone указывать необязательно, поэтому из дальнейших команд добавления портов или сервисов я убрал этот параметр.

Но можно и оставить. smile Что касается Webmin, то или просто добавляем порт:

# firewall-cmd --permanent --add-port=10000/tcp

Или немного заморочимся и сделаем "красиво", добавив описание сервиса. Как предлагается во второй статье, скопируем описание сервиса SSH и переделаем:

# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/webmin.xml

Изменим содержимое последнего файла примерно следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Webmin</short>
  <description>
    Webmin is a web-based interface for system administration for Unix.
    Using any modern web browser, you can setup user accounts, Apache, DNS, file sharing and much more.
    Webmin removes the need to manually edit Unix configuration files like /etc/passwd,
    and lets you manage a system from the console or remotely.
  </description>
  <port protocol="tcp" port="10000"/>
</service>

Описание бессовестно взял прямо с сайта, надеюсь, никто не обидится. blush

Перезагружаем конфигурацию файрволла и проверяем список доступных сервисов:

# firewall-cmd --reload
# firewall-cmd --get-services

Где-то среди огромного списка должен обнаружиться и наш webmin (в соответствии с именем файла описания сервиса). Добавляем в активную зону сервисы http и webmin, еще раз перезагружаем конфигурацию и проверяем, что получилось:

# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=webmin
# firewall-cmd --reload
# firewall-cmd --list-all

Если все в порядке, фрагменты вывода последней команды могут выглядеть так:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  services: ssh dhcpv6-client http webmin

Вот теперь можно зайти в Webmin, разве что преодолев сопротивление антивируса и/или браузера по части самоподписанного сертификата.

 

SELinux

В двух словах, SELinux можно охарактеризовать как дополнительные права доступа к файлам для сервисов (ftp, http и т.д.). В рамках начальной установки этот самый SELinux можно разве что отключить, но мы так делать не будем. Просто убедимся, что он есть:

[vbox@localhost ~]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

Хотя вру. Можно сразу же установить утилиты администрирования:

# yum install policycoreutils-python

Благодаря этому станет доступна, помимо прочего, команда semanage. Поверьте - пригодится. smile

Заключение

На этом, пожалуй, начальная настройка окончена - можно со спокойной совестью выключить машину (sudo poweroff) и сделать снимок (вообще-то самый первый снимок желательно было сделать сразу после установки). Дальнейшие действия будут зависеть от назначения сервера. Например, можно будет установить и настроить LEMP. Не путать с LAMP smile - отличие заключается в веб-сервере (nginx или Apache). Правда актуальность Webmin'а для LEMP несколько снижается, поскольку модуля конфигурирования nginx в нем не предусмотрено (по крайней мере работающего). В связи с наличием FirewallD и SELinux применение CentOS в качестве веб-сервера возможно более предпочтительно, нежели Ubuntu Server. Хотя в последней есть iptables и AppArmor, да и ядро более новое (скажем 4.15 против 3.10).

Итак, по моим ощущениям, основные "внешние" отличия CentOS от Ubuntu заключаются в yum и только что упомянутых SELinux и FirewallD. Есть также менее значимые отличия в структуре каталогов - можно, конечно, слегка запутаться. Но это, наверное, больше вопросы к пакетам (репозиториям). Сам по себе yum выглядит симпатично, однако структура конфигурационных файлов по-моему все же лучше в Ubuntu (например у nginx и php). А так - linux как linux, я почему-то ожидал большего "красноглазия", что ли. Впрочем было и такое - ProFTPD конфликтовал с SELinux, а про последний я узнал позже, чем хотелось бы.

Надеюсь, начало положено, а в будущем я постараюсь осветить уже более специализированные вопросы.

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

  1. Если установщик сразу предлагает русский язык, лучше вернуть английский, чтобы потом в консоли не получить квадратики вместо русских букв.
  2. Имеет смысл посетить Software Selection, чтобы отметить дополнительные пакеты для установки.
  3. Сетевые адаптеры включаются сразу и правильно настраиваются.
  4. Вместо yum используется его "правопреемник" dnf. Синтаксис команд аналогичен.
  5. Тем не менее, репозитории по прежнему добавляются в /etc/yum.repos.d/
  6. Зона по умолчанию в FirewallD называется FedoraServer.
  7. Для установки утилит администрирования SELinux используется другой пакет: policycoreutils-python-utils

Категория: Обзоры софта | Опубликовано 31.01.2019 | Редакция от 03.02.2019

Похожие материалы:


Комментарии, обсуждение

комментарии простроенны на платформе Disqus