1.0.1. Проверка и изменение часового пояса сервера

Открываем консоль, через SSH и проверяем текущую дату и время на сервере с помощью следующей команды:

date

Вывод будет примерно следующим:

Fri 16 Jun 2022 01:01:01 AM MSK

Мы привыкли к 24 часовому отображению времени и нам его нужно изменить. Для этого вписываем в консоль следующую команду и нажимаем "Enter":

sudo dpkg-reconfigure tzdata

В выпадающем окне "Geographic area:" выбираем "Europe".

На следующей странице в "Time zone:" выбираем "Moscow".


После чего наблюдаем измененные часовые пояс и время в удобном для нас формате, например:

Current default time zone: 'Europe/Moscow'
Local time is now:      Fri Jun 16 01:12:12 MSK 2022.
Universal Time is now:  Thu Jun 15 22:12:12 UTC 2022.

Обращаем ваше внимание на то, что встроенный в Ubuntu планировщик заданий "cron", использующийся для периодического выполнения заданий в определённое время автоматически не подхватывает новый часовой пояс и его надо перезагрузить командой:

sudo service cron restart

1.0.2. Проверка настройки кодировки сервера и установка кириллицы в консоли

Если в консоли нет поддержки UFT-8 и кириллицы, то у нас могут возникнуть некоторые неприятные ситуации. Заранее избежать их мы можем, если установим, правильно настроим и сконфигурируем локаль используя команду:

sudo apt install locales

После этого производим следующую настройку:

sudo dpkg-reconfigure locales

Выбираем желаемые локализации в окне "Locales to be generated:"


"en_US.UTF-8 UTF-8" является предпочтительным выбором в большинстве случаев, но вы можете добавить "ru_RU.UTF-8 UTF-8"

В следующем окне "Default locale for the system environment:" предпочтительно выбирать "en_US.UTF-8"

1.0.3. Производим замену названия сервера/hostname

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

Изменение hostname влияет в основном на восприятие и на наш взгляд правильно каждый сервер называть своим понятным и читаемым именем, а не тем, что вам рандомно генерирует хостер, например мы можем заменить «vps-server-548739» на понятное для вас имя «companyname-ru-msk-WEBServer-01».

Имя сервера может быть свободно изменено в любой момент следующей командой:


echo 'companyname-ru-msk-WEBServer-01 ' > /etc/hostname

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

sudo reboot

1.0.4 Обновляем UBUNTU

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

sudo apt update && sudo apt dist-upgrade

Выбираем варианты на ваш выбор:

[O] keep the local version currently installed т.к. вашим хостинг-провайдером могут быть изначально вписаны дополнительные днс и тп
show the differences between the versions — для сравнения разницы в файлах

1.0.5. Настройка ssh

1.0.5.1. Меняем порт ssh сервера на произвольный

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

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

Используя следующую команду меняем порт на понравившийся вам, желательно не использовать порты из первой тысячи (1-999) и порты используемые другими приложениями (список основных используемых портов можно посмотреть в википедии), если эти приложения когда-либо могут оказаться установленными на ваш сервер:

sudo nano /etc/ssh/sshd_config

В редакторе находим строку со следующим содержимым:

#Port 22

С большой вероятностью эта строка будет закомментирована знаком решетки (#), т.к. используются значения по умолчанию, т.е. порт 22.

Нам же нужно раскомментировать эту строку (удалить знак "#") и заменить порт на желаемый, например на 62222 (любой на ваш выбор).

Port 62222

В обязательном порядке нужно записать и сохранить в надежном месте (или в нескольких) ваш новый порт, во избежание дальнейших проблем с подключением к серверу!

Перезапускам демон ssh для применения настроек:

sudo /etc/init.d/ssh restart
или 
sudo service ssh restart 

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

1.0.5.1.2. Устанавливаем netstat 

Устанавливаем netstat и проверяем корректность сделанных изменений: 

sudo apt install net-tools

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

netstat -tulpan | grep ssh

В результатах мы должны увидеть указанный ранее порт, например:

tcp   0   0 0.0.0.0:62222   0.0.0.0:*   LISTEN   1150/sshd: /usr/sbi

После чего отключаемся от сервера по ssh, меняем в вашей программе порт на указанный ранее (пр.: 62222) и подключаемся уже с новым портом.

1.0.5.2. Отключаем DebianBanner

Добавим ещё один полезный параметр, который отсутствует в файле sshd_config – DebianBanner. Этот параметр добавляет в строку ответа sshd информацию об операционной системе, при обращению к серверу по протоколу TELNET или при сканировании nmap. Эта строка может выглядеть так: SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze1.

Скроем информацию о нашей операционной системе:

sudo nano /etc/ssh/sshd_config

Добавляем следующую строку в конце файла:

DebianBanner no

Для применения изменений перезагружаем демон ssh:

sudo service ssh restart

1.0.5.3. Включаем проверку прав на директорию подключения StrictModes

Опция «StrictModes» определяет должен ли ssh проверять права пользователей в их домашних каталогах и файлы rhosts перед тем, как авторизовать на сервере. Эта опция должна всегда быть установлена в «yes», т.к. некоторые пользователи по неосторожности допускают запись в своих каталогах и файлах любым авторизованным пользователям, что в свою очередь является критической уязвимостью в случае взлома одного из аккаунтов.

Во избежание этого момента вносим следующие правки в файл

sudo nano /etc/ssh/sshd_config

Находим и изменяем (раскомментируем):

StrictModes  yes

Для применения изменений перезагружаем ssh:

sudo service ssh restart

1.0.5.4. Добавление нового системного пользователя UBUNTU 20.04 LTS

Ввиду того, что заходить под рут аккаунтом не рекомендовано, то мы должны создать нового пользователя, например "your_user_name":

adduser your_user_name 

После чего вводим СЛОЖНЫЙ пароль этого пользователя и записываем в надежном месте, а лучше в двух, т.к. потеряв его вы в дальнейшем потеряете доступ к серверу.

Пример хорошего пароля: 0$j%lQM1ArBS

После этого нужно дать возможность пользователю выполнять команды sudo:

nano /etc/sudoers

Добавляем следующую строку в самом конце:

имя_пользователя ALL=(ALL) ALL

например:

your_user_name ALL=(ALL) ALL

После этого у вас появится возможность, авторизовавшись на сервере по ssh под новым пользователем зайти под рутом, для этого выполняем:

su

вводим пароль пользователя root

После этого обязательно нужно отключить возможность авторизации root пользователя по ssh

1.0.5.5. Отключаем доступ у root пользователя PermitRootLogin (дополняется)

Этот параметр разрешает или запрещает вход по SSH под суперпользователем «root». Запрещаем вход суперпользователю.

Снова редактируем знакомый нам конфигурационный файл ssh:

sudo nano /etc/ssh/sshd_config

Находим и изменяем:

PermitRootLogin no

Для применения изменений перезагружаем ssh:

sudo service ssh restart

После этого можно отключиться от ssh и попробовать снова залогиниться под пользователем root. Если вы всё правильно настроили, то ничего не получится. Нужно подключаться по дополнительному созданному вами пользователю your_user_name.

На запрос пароля sudo надо отвечать СВОИМ паролем. На su — паролем рута.
PermitRootLogin no означает, что нельзя зайти root пользователем по ssh, надо зайти иным пользователем, а потом (если надо) поднимать привилегии до рута. Нормальная политика безопасности. Имя root слишком известно 🙂

Можно сделать НЕБЕЗОПАСНЫЙ финт ушами и отключить у вашего только что созданного пользователя (your_user_name) ввод пароля после попытки запуска команд от суперпользователя root (su/sudo/sudo -s).

Открываем от root пользователя следующий файл:

sudo nano /etc/sudoers

После этого в конец файла добавляем строку:

your_user_name  ALL=(ALL) NOPASSWD:ALL

Не забыв заменить your_user_name на имя вашего нового пользователя.

После этого вы сможете запускать команды не вводя пароль root пользователя.

Стоить помнить, что данный способ является плохим примером безопасности!

1.0.6. Устанавливаем htop

htop — продвинутый монитор процессов, написанный для Linux. Он был задуман заменить стандартную программу top. Htop показывает динамический список системных процессов, список обычно выравнивается по использованию ЦПУ. В отличие от top, htop показывает все процессы в системе. Также показывает время непрерывной работы, использование процессоров и памяти. Htop часто применяется в тех случаях, когда информации даваемой утилитой top недостаточно, например при поиске утечек памяти в процессах. Htop написан на языке Си и использует для отображения библиотеку Ncurses. Я всегда ставлю его при установке системы и моментально забываю про утилиту top.

sudo apt install htop

Команда запуска:

htop

Для выхода нажимаем F10 или CTRL+C

Более детальную информацию по использованию утилиты htop можно найти на этой странице

1.0.7. Устанавливаем Midnight Commander

Midnight Commander — консольный файловый менеджер для Linux.

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

В консольном окружении для работы с файлами вы должны знать основные команды и их синтаксис. К счастью, в Linux также имеется текстовый файловый менеджер, работающий в консольном окружении. Он называется Midnight Commander (далее мы будем называть его просто MC).

Команда инсталляции:

sudo apt install mc

Команда запуска:

mc
или
sudo mc

Для выхода из mc (Midnight Commander) нажимаем клавишу F10

1.0.7. Устанавливаем и настраиваем ProFTPD (FTP-сервер на UBUNTU 20.04 LTS)

Мы очень надеемся, что большинство из вас прекрасно понимает, что устанавливать ftp сервер proftpd (как и любой другой) в 2022 году очень неразумно. Используйте SFTP, т.к. ftp протокол является небезопасным и устаревшим.

Установка производится командой:

sudo apt install proftpd

Открываем файл настроек:

sudo nano /etc/proftpd/proftpd.conf

Далее отключаем ipv6 (зачем вам на сервере с ftp — ipv6? *сарказм* )

UseIPv6 off

По желанию можно изменить приветственное название от сервера:

ServerName "FTPServerOK"

Рекомендуем вам изменить стандартный ftp порт, например на 48921:

Port 48921

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

DefaultRoot ~

Для разрешения перезаписи файлов проверяем наличие следующей строк:

AllowOverwrite on

Следующие настройки proftpd добавляем в конце текущего файла.

Пользователь root не должен иметь возможности попасть на ftp сервер, это реализуется добавлением следующей строки:

RootLogin off

Разрешаем дозагрузку файлов, при передаче которых произошла ошибка:

AllowStoreRestart on

В целях безопасности отключаем идентификацию proftpd сервера (в консоли ftp клиента):

ServerIdent   off

Так же можно изменить идентификацию на произвольную:

ServerIdent on "Welcome to FuckingTypeServer"

На этом настройка ftp сервера proftpd завершена, перезапускам его:

sudo service proftpd restart 
или
sudo /etc/init.d/proftpd restart

Небольшое отступление для тех, кто набрел на эту статью, после того, как казалось бы правильно настроенный сервер при попытке подключения сообщает что-то вроде: «FTP ошибка 530, некорректные данные аутентификации, «ProFTPD login failing with 530» или «proftpd 530 login incorrect», то вы наверняка будете рады тому, что найдете ниже, а именно следующую строку и правильный процесс создания пользователя.

Далее нужно выполнить следующие операции:

sudo nano /etc/shells

В конце файла добавить:

/bin/false

Сохраняем файл и закрываем редактирование.

Добавление пользователей proftpd ftp сервера

Предположим, что мы создаем пользователя с именем "sample_user_name", в таком случае команда будет выглядеть следующим образом:

sudo useradd sample_user_name -b /home -m -U -s /bin/false;

где, sample_user_name — это имя пользователя, папка которого будет находиться по адресу /home/sample_user_name/

Создаем пароль пользователя:

sudo passwd sample_user_name

Вводим пароль, подтверждаем и всё, готово, можно подключаться к ftp серверу.

1.0.8. Устанавливаем и настраиваем file2ban на UBUNTU 20.04 LTS

Принцип работы fail2ban прост. Специальный сервис ищет в системных журналах (логах) записи о неудачных попытках аутентификации и при определенных условиях с помощью iptables блокирует IP-адреса, с которых ведется атака.

Устанавливаем пакет fail2ban:

sudo apt install fail2ban

Теперь нужно сделать так, чтобы сервис fail2ban автоматически запускался при загрузке системы:

sudo systemctl enable fail2ban

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

sudo systemctl status fail2ban

Результат должен быть примерно следующим:

 fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-06-22 22:22:22 MSK; 29s ago
       Docs: man:fail2ban(1)
   Main PID: 2222 (f2b/server)
      Tasks: 5 (limit: 38328)
     Memory: 13.8M
     CGroup: /system.slice/fail2ban.service
             └─2222 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Файлы настроек fail2ban расположены в каталоге /etc/fail2ban/:

  • /fail2ban.conf – дефолтные настройки сервиса fail2ban;
  • /fail2ban.d/ – пользовательские настройки сервиса fail2ban;
  • /jail.conf – дефолтные настройки для защищаемых сервисов;
  • /jail.d/ – пользовательские настройки для защищаемых сервисов;
  • /filter.d/ – настройки шаблонов поиска в системных журналах (логах);
  • /action.d/ – настройки исполняемых действий;
  • /paths*.conf – настройки путей для различных операционных систем.

Во избежание перезаписи ваших настроек при обновлении пакетов, рекомендуем вместо редактирования файлов с дефолтным настройками создавать собственные (пользовательские) файлы настроек.

Вам необходимо удалить дефолтные настройки защиты sshd (очищаем файл):

cat /dev/null >/etc/fail2ban/jail.d/defaults-debian.conf

После этого создаём файл /etc/fail2ban/jail.d/sshd.local

nano /etc/fail2ban/jail.d/sshd.local

И добавляем в него следующую текстовую конфигурацию:

[sshd]
enabled = true
#порт, на который вы изменили стандартный 22 ssh:
port = 48922
#баним на 24 часа:
bantime = 86400 
#если за 2 часа:
findtime = 7200 
#более 2 неудачных попыток авторизации:
maxretry = 2 

Теперь если параметр enabled будет иметь значение true, сервис fail2ban заблокирует соответствующий IP-адрес на количество секунд, прописанное в параметре bantime, при условии, что за период, указанный в секундах в параметре findtime, с этого адреса будет проведено заданное параметром maxretry или большее число неудачных попыток ssh-аутентификации. По прошествии периода, прописанного в параметре bantime, заблокированный IP-адрес автоматически разблокируется.

В нашем примере IP-адрес будет блокироваться на 86400 секунд (24 часа), если в течение последних 7200 секунд (2х часов) с него было осуществлено 2 и более неудачных попыток аутентификации.

Настройка сервиса fail2ban завершена, необходимо его перезапустить:

sudo systemctl restart fail2ban 

В ходе использования fail2ban вам может понадобиться на время снять блок с конкретного IP-адреса или добавить его в список исключений.

Прежде всего, убедитесь, что нужный IP-адрес находится в списке заблокированных:

fail2ban-client status sshd

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

Образец результата команды:

Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 12
| ̀ - File list: /var/log/secure
̀ - Actions
|- Currently banned: 1
|- Total banned: 2
̀ - Banned IP list: 8.8.4.4

Добавить ip в список исключений fail2ban ssh:

fail2ban-client set sshd addignoreip 8.8.4.4

Разблокировать ip в fail2ban ssh:

fail2ban-client set sshd unbanip 8.8.4.4

Более подробно 1: https://andreyex.ru/linux/kak-ustanovit-i-nastroit-fail2ban-v-ubuntu-20-04/

Более подробно 2: https://www.servers.ru/knowledge/linux-administration/how-to-protect-ssh-using-fail2ban-on-ubuntu-16_04 и тут: https://linux-notes.org/udalit-iz-fail2ban-zablokirovanny-j-ip/

1.0.9. Настройка приветствия консоли, устанавливаем landscape-common UBUNTU 20.04 LTS

Установка производится командой:

sudo apt install landscape-common

После чего перезагружаем сервер:

sudo reboot

1.1.0. Установка и настройка nginx на UBUNTU 20.04 LTS

Установка самой последней версии nginx всё ещё занимает чуть больше времени, чем стандартная команда

sudo apt install nginx

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

Установите пакеты, необходимые для подключения apt-репозитория:

sudo apt install curl gnupg2 ca-certificates lsb-release

Для подключения apt-репозитория стабильной версии nginx, выполните следующую команду (я использую её):

echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \     | sudo tee /etc/apt/sources.list.d/nginx.list 

Если предпочтительно использовать пакеты для основной версии nginx, выполните следующую команду вместо предыдущей:

Для UBUNTU 18.04.2:

echo "deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx" \
     | sudo tee /etc/apt/sources.list.d/nginx.list

Для UBUNTU 20.04.1:

echo "deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ focal nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ focal nginx" \
     | sudo tee /etc/apt/sources.list.d/nginx.list

Для UBUNTU 22.04:

echo "deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ jammy nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ jammy nginx" \
     | sudo tee /etc/apt/sources.list.d/nginx.list

Теперь нужно импортировать официальный ключ, используемый apt для проверки подлинности пакетов:

curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

Проверьте, верный ли ключ был импортирован:

sudo apt-key fingerprint ABF5BD827BD9BF62 

Вывод команды должен содержать полный отпечаток ключа 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62:

pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573B FD6B 3D8F BC64 1079  A6AB ABF5 BD82 7BD9 BF62
uid   [ unknown] nginx signing key <signing-key@nginx.com>
apt-key export 7BD9BF62 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/nginx_key.gpg

Чтобы установить/обновить nginx, выполните следующие команды:

sudo apt update && sudo apt install nginx

После этого можно проверить актуальность установленной версии nginx командой:

nginx -v

И сравнить версию с версией на официальном сайте nginx https://nginx.org/en/download.html (Stable version)

1.1.1. Конфигурирование nginx на UBUNTU 20.04 LTS для мультисайтинга

Переименовываем старый файл настроек nginx:

sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf_OLD

Создаем новый файл конфигурации nginx:

sudo nano /etc/nginx/nginx.conf 

Вставляем в него следующее содержимое:

user www-data;
worker_processes 4; #Количество одновременно запущенных процессов nginx должно быть равно количеству ядер вашего процессора
pid /run/nginx.pid;

events {
	worker_connections 300;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##
	
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 30;
	types_hash_max_size 2048;
	server_tokens off;
	#more_set_headers 'Sever: EGOmedia fast server';

	client_max_body_size 00m;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# nginx-naxsi config
	##
	# Uncomment it if you installed nginx-naxsi
	##

	#include /etc/nginx/naxsi_core.rules;

	##
	# nginx-passenger config
	##
	# Uncomment it if you installed nginx-passenger
	##
	
	#passenger_root /usr;
	#passenger_ruby /usr/bin/ruby;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
# 
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

Создаем две новых папки под конфигурационные файлы:

mkdir {/etc/nginx/sites-available,/etc/nginx/sites-enabled}

Перезагружаем nginx командой:

sudo service nginx restart

После чего переходим в браузере по адресу: http://ip_вашего_сервера

Если всё настроено правильно, то вы должны будете увидеть примерно следующий текст:

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.

1.2.0. Установка и настройка MySQL/MariaDB на UBUNTU 20.04 LTS

MySQL является системой управления базами данных с открытым исходным кодом и обычно используется, как часть популярного стека LAMP (Linux, Apache, MySQL, PHP/Python/Perl). MySQL использует реляционную базу данных и SQL (Structured Query Language, язык структурированных запросов) для управления данными.

Короткая версия установки очень проста: достаточно обновить индекс пакетов, установить пакет mysql-server, а затем запустить скрипт настройки безопасности.

Обновляем индекс пакетов apt командой:

sudo apt update

Затем устанавливаем сам пакет MySQL:

[ранее] Установка mysql-server:

sudo apt install mysql-server

[предпочтительный вариант] Установка mariadb-server:

sudo apt install mariadb-server

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

Выполните скрипт безопасности командой:

sudo mysql_secure_installation 

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

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Можно смело нажимать "Enter", т.к. пароль у вас ещё не установлен.

После чего вы увидите предложение установить пароль для root пользователя:

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]

Выбираем "Y", придумываем сложный пароль и вписываем его два раза.

После чего вы получите следующее сообщение:

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]

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

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]

Соглашаемся с тем, что root пользователь может подключаться с localhost, выбираем "Y".

Удаляем тестовую базу данных "Y":

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]

Перезагружаем привилегии "Y":

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]

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

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Подробности настройки MySQL 18.04 https://www.digitalocean.com/community/tutorials/mysql-ubuntu-18-04-ru

Подробности настройки MySQL 20.04 https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04-ru

1.3.0. Установка и настройка apache2-mpm-itk на UBUNTU 20.04 LTS

Модуль apache2-mpm-itk для Apache нужен для того чтобы запускать виртуальные хосты vhosts под своим UID или GID, проще говоря, скрипты сайта должны быть недоступны для других хостов даже для чтения (в случае взлома одного сайта не смогли взломать другой сайт находящихся на этом сервере).

Я уже давно использую apache2-mpm-itk на своих серверах, но после попытки установить apache2-mpm-itk в Ubuntu 18.04, понял что кое-что изменилось.

Теперь apache2-mpm-itk является отдельным модулем в Apache2 и устанавливается как модуль.

Чтобы установить модуль apache2-mpm-itk в Ubuntu 18.04 необходимо:

Установить apache2 в Ubuntu 20.04 LTS:

sudo apt install apache2 

После чего вы получите ошибку, это нормально.

Установить модуль libapache2-mpm-itk:

sudo apt install libapache2-mpm-itk

Включаем модуль apache2-mpm-itk:

sudo a2enmod mpm_prefork
затем
sudo a2enmod mpm_itk 

Редактируем файл конфигурации, т.к. Apache по умолчанию принимает запросы из интернета (80 порт и из-за его занятости была ошибка), а у нас это делает nginx:

sudo nano /etc/apache2/ports.conf

И изменяем строку:

Listen 80
на
Listen 127.0.0.1:8080

Перезагружаем apache командой:

sudo service apache2 restart

Проверяем, какие модули у нас установлены:

sudo apachectl -t -D DUMP_MODULES

Если видим:

.......
mpm_itk_module (shared)
........

То модуль apache2-mpm-itk установлен в Ubuntu 20.04 LTS и можно дальше настраивать сервер.

В виртуальных хостах apache ничего не изменилось:

<IfModule mpm_itk_module>
    AssignUserId user-www user-www
</IfModule>

Где user-www меняем на вашего пользователя.

1.4.0. Установка и настройка php 8.1.x на UBUNTU 20.04 LTS

В случае ошибки "add-apt-repository: command not found" добавления смотрим подсказку ниже.

Добавляем PPA репозиторий:

sudo add-apt-repository ppa:ondrej/php
Нажимаем Enter.

1.4.1. Fix add-apt-repository: command not found error

Иногда после этой команды мы наблюдаем ошибку следующего вида:

sudo: add-apt-repository: command not found

Ошибка проста. Пакет add-apt-repository не установлен в вашей системе.

Если вы попытаетесь использовать sudo apt-get install add-apt-repository, это не сработает.

Это связано с тем, что команда add-apt-repository находится в пакете software-properties-common, и вам необходимо установить этот пакет, чтобы установить add-apt-repository.

Поэтому во избавление ошибки (если она появилась) используем следующую команду:

sudo apt-get install software-properties-common 
подтверждаем установку кнопкой:
Y
и снова пытаемся добавить репозиторий вышеуказанной командой:
sudo add-apt-repository ppa:ondrej/php 

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

sudo apt-get update

Установите PHP 8.1.7, используя следующую команду:

php 7.3:

sudo apt-get install php7.3 libapache2-mod-php7.3 php7.3-mysql php7.3-curl php7.3-gd php7.3-imagick php7.3-snmp php7.3-imap php7.3-recode php7.3-zip php-pear php7.3-memcache libapache2-mod-php7.3 php7.3-bcmath 

php 8.0.1:

sudo apt-get install php8.0 libapache2-mod-php8.0 php8.0-mysql php8.0-curl php8.0-gd php8.0-imagick php8.0-snmp php8.0-imap php8.0-zip php-pear php8.0-memcache libapache2-mod-php8.0 php8.0-bcmath php8.0-xmlrpc

php 8.0.1 https://www.cloudbooklet.com/how-to-install-php-8-on-ubuntu/

php 8.1.7:

sudo apt-get install php8.1 libapache2-mod-php8.1 php8.1-mysql php8.1-curl php8.1-gd php8.1-imagick php8.1-snmp php8.1-imap php8.1-zip php-pear php8.1-memcache libapache2-mod-php8.1 php8.1-bcmath php8.1-xmlrpc

На появившиеся в процессе установки вопросы отвечаем "Y"

Используйте следующую команду, чтобы проверить версию PHP, установленную на вашем сервере:

php -v

Вывод должен быть следующим:

PHP 7.3.x-x+ubuntu18.04.1+deb.sury.org+1 (cli) (built: xxx  x xxxx xx:xx:xx) ( NTS )
 Copyright (c) 1997-2018 The PHP Group
 Zend Engine v3.3.x, Copyright (c) 1998-2018 Zend Technologies
     with Zend OPcache v7.3.x-x+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

PHP 8.0.x (cli) (built: Jan 13 2021 08:22:35) ( NTS )
 Copyright (c) The PHP Group
 Zend Engine v4.0.1, Copyright (c) Zend Technologies
     with Zend OPcache v8.0.1, Copyright (c), by Zend Technologies

PHP 8.1.x (cli) (built: Jun 10 2022 12:22:48) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.7, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.7, Copyright (c), by Zend Technologies

Перезапускаем Apache для применения изменений:

sudo service apache2 restart

Дополнительно вносим изменения в конфигурационный файл Apache:

sudo nano /etc/apache2/apache2.conf

Находим следующие строчки:

<Directory />
       Options FollowSymLinks
       AllowOverride None
       Require all denied
</Directory>

<Directory /usr/share>
       AllowOverride None
       Require all granted
</Directory>

<Directory /var/www/>
       Options Indexes FollowSymLinks
       AllowOverride None
       Require all granted
</Directory>

<Directory /srv/>
       Options Indexes FollowSymLinks
       AllowOverride None
       Require all granted
</Directory>

Их нужно закомментировать и добавить после них следующие пять строчек:

<Directory /home/>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
        #ErrorDocument 403 /var/www/html/403.html
</Directory>

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

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
#<Directory />
#       Options FollowSymLinks
#       AllowOverride None
#       Require all denied
#</Directory>

#<Directory /usr/share>
#       AllowOverride None
#       Require all granted
#</Directory>

#<Directory /var/www/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

<Directory /home/>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
        #ErrorDocument 403 /var/www/html/403.html
</Directory>

После чего снова перезагружаем Apache:

sudo service apache2 restart

Дабы однажды не столкнуться с ошибкой вроде:

Ошибка /var/www/site/public_html/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

Нужно включить rewrite модуль Apache:

sudo a2enmod rewrite

После чего нужно снова перезагрузить сервер Apache:

sudo service apache2 restart

После этого нам желательно настроить наш первый тестовый сайт и проверить его работоспособность.

2.0.0. Создание нового сайта на UBUNTU 20.04 LTS

2.1.0. Установка и настройка phpMyAdmin на UBUNTU 20.04 LTS

Всю эту процедуру можно прочесть по этой ссылке