Висит у меня на Amazon AWS виртуалка, которая используется исключительно под proxy/vpn и захотелось мне посмотреть, а сколько же я использую на ней трафика. Панель управления от Amazon не позволила мне без дополнительных телодвижений посмотреть трафик за расчетный период, после чего я решил прямо на сервак воткнуть утилиту vnStat.
vnStat ведёт лог трафика за определённый период и хранит собранную статистику по каждому выбранному администратором интерфейсу, предоставляя доступ к ней в случае необходимости. vnStat, в отличие от снифферов, например таких, как Wireshark, не собирает информацию непосредственно с сетевого интерфейса, а анализирует данные, предоставляемые ядром через файловые системы proc и sys, что даёт возможность использовать эту утилиту даже непривилегированным пользователем.
Установка vnStat на сервере с Ubuntu 18.04. LTS
vnStat в Ubuntu имеется в стандартных репозиториях, так что установка не должна вызвать каких-либо осложнений:
sudo apt install vnstat
После установки будет выдано предупреждение о том, что база данных пуста. Не пугайтесь, это естественно, если в этой системе vnStat ещё никогда не работала. После того, как вы настроите vnStat должным образом, база данных будет наполняться информацией о статистике сетевого трафика, а пока она пуста.
Настройка и запуск vnStat на сервере Ubuntu 18.04 LTS
После установки vnStat необходимо инициализировать базы данных для интерфейсов для того, чтобы демон смог начать работу по сбору статистики. Делается это простой командой (замените eth0 на имя нужного инетрфейса):
sudo vnstat -i eth0 -u #eth0 -- ваш внешний сетевой интерфейс
Error: Unable to read database "/var/lib/vnstat/eth0".
Info: - A new database has been created.
Повторите эту процедуру для всех интерфейсов, активность которых необходимо отслеживать.
Сбором статистики занимается демон vnStat — vnstatd. Init-скрипт для запуска/останова демона располагается в файле /etc/init.d/vnstat. После установки пакета будут созданы симлинки из каталогов /etc/rc*.d для автоматического запуска демона во время старта системы. Если вы не перезагружали систему после установки vnStat, его придётся запустить вручную:
sudo /etc/init.d/vnstat start или sudo service vnstat start
Предварительно вы можете просмотреть и изменить в случае необходимости файл конфигурации vnStat, расположенный в файле /etc/vnstat.conf. Хотя, как мне кажется, настройки по умолчанию вполне пригодны для использования в большинстве случаев.
По умолчанию демон vnStat обновляет базу данных каждые 5 минут, а «снимает» информацию с интерфейсов каждые 30 секунд. Эти и другие параметры регулируются в файле конфигурации, и при необходимости вы можете изменить их, предварительно проконсультировавшись с man vnstat.conf. Если вы не хотите ждать, пока демон обновит данные в БД, вы можете принудительно обновить данные:
sudo vnstat -u
Эта команда обновит БД всех интерфейсов. Если вам необходимо обновить информаци по какому-то определённому интерфейсу, воспользуйтесь опцией «-i», передав ей имя нужного интерфейса, например:
sudo vnstat -i eth0 -u
Автостарт и автоматическое обновление статистики трафика при помощи vnStat на сервере Ubuntu 18.04 LTS
Т.к. на нескольких машинах с Ubuntu 18.04 LTS vnstat сам не стартанул, я решил не заморачиваться, не разбираться в проблеме и решить её очень простым путем:
Открываем задания крона:
sudo crontab -e
Вставляем туда ежеминутное обновление vnstat:
* * * * * vnstat -u >/dev/null 2>&1
Просмотр статистики трафика при помощи vnStat на сервере Ubuntu 18.04 LTS
Сводная информация по всем интерфейсам:
vnstat
Сводная информация по конкретному интерфейсу:
vnstat -i eth0
Отдельный интерфейс, по часам:
vnstat -i eth0 -h
Отдельный интерфейс, по дням:
vnstat -i eth0 -d
Отдельный интерфейс, по неделям:
vnstat -i eth0 -w
Отдельный интерфейс, по месяцам:
vnstat -i eth0 -m
Live-режим просмотра статистики трафика при помощи vnStat на сервере Ubuntu 18.04 LTS
Также vnStat можно использовать для просмотра статистики в режиме реального времени:
vnstat -i eth0 -l
Также можно использовать следующие ключи:
-h, --hours по часам -d, --days за день -m, --months за месяц -w, --weeks за неделю -t, --top10 top10 -s, --short короткий вывод -l, --live мониторинг в реальном времени
Обратите внимание, что крон автоматически не подхватывает новый часовой пояс, его надо перезагрузить:
sudo service cron restart
Пункт 1.0.0.1 (проверяем настройку кириллицы в консоли)
Неплохо бы чтобы в консоли понимались файлы с русскими символами, для этого устанавливаем пакет локалей
sudo apt install locales
после этого настраиваем его:
sudo dpkg-reconfigure locales можно выбрать только одну локализацию en_US.UTF-8
Пункт 1.0.0.2 (изменяем название сервера/hostname)
На мой взгляд правильно каждый сервер называть своим понятным и читаемым именем, а не тем, что вам приподносит хостер, например мы можем заменить «мзы-server-548739» на понятное для вас имя «companyname-ru-msk-WEBServer-01»:
echo 'companyname-ru-msk-WEBServer-01 ' > /etc/hostname для обновления настроек нужно перезагрузить сервер sudo reboot
Пункт 1.0.1 (обновляем Ubuntu)
Теперь же необходимо обновить все пакеты в нынешней системе до актуальных версий:
sudo apt update && sudo apt dist-upgrade
Выбираем варианты на ваш выбор:
[O] keep the local version currently installed т.к. вашим хостинг-провайдером могут быть изначально вписаны дополнительные днс и тп
show the differences between the versions — для сравнения разницы в файлах
Пункт 1.0.2.0 (настройка ssh: меняем порт ssh)
sudo nano /etc/ssh/sshd_config
Ищем в открывшемся файле следующую строку:
#Port 22
Если строка начинается с символа #, его нужно удалить и вместо 22 порта, написать любой другой, например 48922:
sudo /etc/init.d/ssh restart или sudo service ssh restart
Если вы допустили какую-либо ошибку в конфигурационном файле, то вы можете потерять связь с сервером. Будьте осторожны!
Далее, установив netstat можно проверить корректность сделанных изменений:
sudo apt install net-tools
После установки вводим следующую команду:
netstat -tulpan | grep ssh
В результатах мы должны увидеть наш указанный ранее порт, например:
tcp 0 0 0.0.0.0:48922 0.0.0.0:* LISTEN 2355/shd
После чего отключаемся от сервера по ssh, меняем в вашей программе порт на указанный ранее (пр.: 48922) и подключаемся уже с новым портом
Пункт 1.0.2.1 (настройка ssh: отключаем 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.2.2 (настройка ssh: включаем проверку прав на директорию подключения StrictModes)
Опция «StrictModes» определяет должен ли ssh проверять права пользователей в их домашних каталогах и файлы rhosts перед тем, как пустить на сервер. Эта опция должна всегда быть установлена в «yes», потому что иногда пользователи могут случайно оставить свои каталоги и файлы открытыми всем для записи.
sudo nano /etc/ssh/sshd_config
Находим и изменяем (раскомментируем):
StrictModes yes
Для применения изменений рестартуем ssh:
sudo service ssh restart
Пункт 1.0.2.3 (настройка ssh: отключаем доступ у root пользователя PermitRootLogin )
Этот параметр разрешает или запрещает вход по SSH под суперпользователем «root». Запрещаем вход суперпользователю.
sudo nano /etc/ssh/sshd_config Находим и изменяем: PermitRootLogin no Для применения изменений рестартуем ssh: sudo service ssh restart
Пункт 1.0.3 (устанавливаем htop)
htop — продвинутый монитор процессов, написанный для Linux. Он был задуман заменить стандартную программу top. Htop показывает динамический список системных процессов, список обычно выравнивается по использованию ЦПУ. В отличие от top, htop показывает все процессы в системе. Также показывает время непрерывной работы, использование процессоров и памяти. Htop часто применяется в тех случаях, когда информации даваемой утилитой top недостаточно, например при поиске утечек памяти в процессах. Htop написан на языке Си и использует для отображения библиотеку Ncurses. Я всегда ставлю его при установке системы и моментально забываю про утилиту top.
sudo apt install htop
Команда запуска:
htop
Для выхода нажимаем F10 или CTRL+C
Столбцы:
PID — идентификатор процесса. USER — владелец процесса. PRI — текуший приоритет (влияет на процессорное время, отводимое процессу, значение по умолчанию — 20; чем меньше приоритет, тем больше времени отводится процессу, следовательно он выполняется быстрее). NI — величина изменения приоритета относительно значения PRI (клавиши F7, F8). VIRT — общий объем виртуальной памяти, используемой процессом. Включает в себя: область кода (CODE), данные (DATA), разделяемые библиотеки (SHARED) и страницы, перемещенные в swap-область памяти. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, данный столбец всё равно будет показывать цифру 100. (CODE — объем памяти, содержащий исполняемый код процесса. DATA — объем памяти, занятой данными, используемыми процессом в ходе выполнения. SWAP — объем памяти, используемой процессом, но перемещенной в swap-область.) RES — количество резидентной (не перемещаемой в swap) памяти в килобайтах. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, то данный столбец покажет 5. Но здесь есть два ньюанса: а) RES не показывает сколько данных было перемещено в swap, б) часть RES-памяти может быть разделяемой. SHR — количество разделяемой (shared) памяти программы в килобайтах, т.е. памяти, которая может быть использована другими приложениями.
S — состояние процесса: S — так называемое состояние сна; R — состояние выполнения; D — состояние ожидания.
CPU% — использование процессора в процентном отношении. MEM% — использование процессом памяти в процентном отношении. TIME+ — время работы процесса. Command — указывает на команду, которой был запущен процесс. Через настройки (F2) можно добавить еще некоторые полезные параметры: IO RATE — Операции вводавывода. Чтение + запись. Если нужно отдельно на чтение и на запись, то можно добавить: IO READ RATE и IO WRITE RATE. Также на экран выводятся следующие параметры: Load average — отражает число блокирующих процессов в очереди на исполнение в определенный временной интервал, а именно 1 минута, 5 минут и 15 минут, соответственно. Блокирующий процесс — это процесс, который ожидает ресурсов для продолжения работы. Uptime — время работы системы.
Управление:
F1 — справка; F2 — настройки; F3 — поиск процесса; F4 — сортировка списка процессов (от большего к меньшему или от меньшего к большему); F5 — устанавливает древовидное отображение (корни — родительские процессы, а листья — дочерние) и наоборот; F6 — открывает панель с выбором параметра сортировки процессов; F7 — увеличить приоритет выполнения текущего процесса; F8 — уменьшить приоритет выполнения текущего процесса; F9 — убить процесс; F10 — выйти из программы.
Пункт 1.0.5 (устанавливаем Midnight Commander)
Midnight Commander — консольный файловый менеджер для Linux.
Если вам приходится работать с большим количеством файлов в консольном окружении, то вы можете найти такую работу достаточно утомительной. В графическом окружении имеются файловые менеджеры, которые помогают повысить скорость работы с файлами. Вам не нужно помнить название и синтаксис каждой команды, связанной с файлами.
В консольном окружении для работы с файлами вы должны знать основные команды и их синтаксис. К счастью, в Linux также имеется текстовый файловый менеджер, работающий в консольном окружении. Он называется Midnight Commander (далее мы будем называть его просто MC).
Для установки вводим:
sudo apt install mc
Команда запуска:
mc или sudo mc
Для выхода нажимаем F10
Пункт 1.1.6 (устанавливаем и настраиваем ProFTPD(FTP-сервер))
Я очень надеюсь, что большинство из вас прекрасно понимает, что устанавливать ftp сервер proftpd (как и любой другой) в 2019 году очень неразумно. Используйте SFTP!
Для установки вводим:
sudo apt install proftpd
Открываем файл настроек:
sudo nano /etc/proftpd/proftpd.conf
Далее отключаем ipv6 (зачем вам на сервере с ftp — ipv6? *сарказм* )
UseIPv6 off
По желанию можно изменить приветственное название от сервера:
ServerName "FTPServerOK"
Весьма желательно изменить стандартный ftp порт, например на 48921:
Port 48921
Для того, что бы пользователи не могли выйти из домашнего каталога изменяем (раскоментируем) строчку:
DefaultRoot ~
Для разрешения перезаписи файлов проверяем наличие следующей строчки:
AllowOverwrite on
Следующие настройки добавляем в конце текущего файла
Пользователь root не должен иметь возможности зайти на сервер. Добавляем ещё одну строчку:
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«, то вы наверняка будете рады тому, что найдете ниже, а именно следующую строку и правильный процесс создания пользователя.
Далее нужно выполнить следующие операции, иначе кина не будет:
где, sample_user_name — имя пользователя, папка которого будет находиться по адресу /home/sample_user_name/
Создаем пароль пользователя
sudo passwd sample_user_name
Вводим пароль, подтверждаем и всё, готово, можно подключаться к ftp серверу.
Пункт 1.1.7 (устанавливаем и настраиваем file2ban)
Принцип работы 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 Wed 2021-01-01 01:01:01 MSK; 5min ago
Docs: man:fail2ban(1)
Process: 454 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 463 (f2b/server)
Tasks: 5 (limit: 125068)
Memory: 17.4M
CGroup: /system.slice/fail2ban.service
└─463 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Файлы настроек fail2ban расположены в каталоге /etc/fail2ban/:
/jail.conf – дефолтные настройки для защищаемых сервисов;
/jail.d/ – пользовательские настройки для защищаемых сервисов;
/filter.d/ – настройки шаблонов поиска в системных журналах (логах);
/action.d/ – настройки исполняемых действий;
/paths*.conf – настройки путей для различных операционных систем.
Чтобы ваши настройки не перезаписывались при обновлении пакетов, рекомендуем вместо редактирования файлов с дефолтным настройками создавать собственные (пользовательские) файлы настроек.
Вам необходимо удалить дефолтные настройки защиты sshd (очищаем файл):
Затем создайте файл /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
Пункт 1.1.9 (настройка приветствия консоли, устанавливаем update-notifier)
Было бы не плохо при входе в консоль получать количество пакетов, которые можно обновить. Жаль, весит обновление почти полгига, ну да не суть. Если у вас впс не на 5Гб, то можно и поставить, в остальном не самая обязательная штука.
apt install update-notifier
после чего перезагружаем сервер
sudo reboot
Пункт 1.1.10 (добавление нового системного пользователя)
т.к. заходить под рутом мягко говоря не рекомендовано, то мы должны создать нового пользователя, например «your_user_name»:
adduser your_user_name после чего вводим СЛОЖНЫЙ пароль этого пользователя и записываем в надежном месте, а лучше в двух, т.к. потеряв его вы в дальнейшем потеряете доступ к серверу. Пример хорошего пароля: qtR_L2qWr@K9DU
После чего нужно дать возможность пользователю выполнять команды sudo:
nano /etc/sudoers
Вписываем в самом конце следующую строку
имя_пользователя ALL=(ALL) ALL
например:
your_user_name ALL=(ALL) ALL
Далее, при попытке войти на сервер по ssh под новым пользователем можно зайти под рутом, для этого выполняем:
su вводим пароль пользователя root
После этого обязательно нужно отключить возможность авторизации root пользователя по ssh:
sudo nano /etc/ssh/sshd_config
и исправляем значение на no PermitRootLogin no
после чего перезагружаем ssh командой: sudo service ssh restart
После чего можно отключиться от ssh и попробовать снова залогиниться под пользователем root. Если вы всё правильно настроили, то ничего не получится. Нужно подключаться по дополнительному созданному вами пользователю your_user_name.
На запрос пароля sudo надо отвечать СВОИМ паролем. На su — паролем рута. PermitRootLogin no означает, что нельзя зайти рутом по 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.2.0 (установка и настройка nginx)
sudo apt install nginx
Пункт 1.2.1 (установка самой последней версии nginx)
После чего переходим в браузере по адресу: 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.1 (установка и настройка MySQL)
MySQL является системой управления базами данных с открытым исходным кодом и обычно используется, как часть популярного стека LAMP (Linux, Apache, MySQL, PHP/Python/Perl). MySQL использует реляционную базу данных и SQL (Structured Query Language, язык структурированных запросов) для управления данными.
Короткая версия установки очень проста: достаточно обновить индекс пакетов, установить пакет mysql-server, а затем запустить скрипт настройки безопасности.
Обновляем индекс пакетов apt командой:
sudo apt update
Затем устанавливаем сам пакет MySQL:
Было:
sudo apt install mysql-server
Стало:
sudo apt install mariadb-server
В случае новой установки MySQL вам необходимо выполнить скрипт безопасности. Он изменяет некоторые настройки по умолчанию на более безопасные, например, удалённый вход для пользователей root и пользователи, созданные по умолчанию. В старых версиях MySQL вам было необходимо также инициализировать директорию данных вручную, теперь это делается автоматически.
Выполните скрипт безопасности командой:
sudo mysql_secure_installation
В результате выполнения этого скрипта вам будет предложено внести изменения в настройки безопасности вашей MySQL:
1.Сначала вам будет предложено установить плагин валидации паролей (Validate Password Plugin), который позволяет тестировать надёжность паролей MySQL.(можно нажать любую клавишу (кроме Y/y) для отмены установки плагина)
2. Далее вам предложат задать пароль для пользователя root вашей установки MySQL. Выберите надёжный пароль и введите его два раза.
3. Далее вы можете выбирать Y и нажимать ENTER для всех последующих вопросов. При этом будут удалены некоторые анонимные пользователи и тестовые базы данных, будет отключена возможность удалённого входа для root пользователей, после чего все внесённые изменения будут применены к вашей установке MySQL.
Пункт 1.3.0 (установка и настройка apache2-mpm-itk)
Модуль 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 18.04:
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 18.04 и можно дальше настраивать сервер.
Пункт 1.4.0.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
Если ошибка не появились или вы её успешно исправили, то далее обновляем список командой:
На появившиеся в процессе установки вопросы отвечаем 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.1 (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
Перезапускаем 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
После этого нам желательно настроить наш первый тестовый сайт и проверить его работоспособность.