Лаб. работа "Развертывание среды и установка CMS с помощью сервиса Segfault"

Цель работы

Получить практический навык установки CMS на удалённый сервер с использованием бесплатного хостинга Segfault, работы с встроенным PHP-сервером и базой данных SQLite.

Задачи

  • Подключиться к серверу Segfault через SSH
  • Установить PHP и необходимые модули
  • Скачать и настроить WordPress для работы с SQLite
  • Запустить встроенный PHP-сервер
  • Выполнить установку WordPress
  • Войти в административную панель
  • Создать резервную копию базы данных

Ключевые навыки

  • Работа с удалённым сервером через SSH
  • Управление файлами в Linux (командная строка)
  • Установка и настройка PHP-приложений
  • Работа с базой данных SQLite
  • Использование зашифрованного хранилища
  • Запуск веб-сервера вручную

Теоретическая часть

Что такое Segfault?

Segfault — бесплатный сервис от The Hacker’s Choice (THC), предоставляющий временные root-серверы на базе Kali Linux.

Основные особенности:

  • Бесплатный доступ: ssh root@segfault.net (пароль: segfault)
  • Kali Linux с предустановленными инструментами
  • Зашифрованное хранилище /sec и /home
  • Возможность установки любого ПО
  • Публичный IP-адрес с портом
  • Поддержка TOR и onion-адресов

Ограничения бесплатной версии:

  • Ограниченные ресурсы (CPU, RAM ~256MB, диск)
  • Сервер может быть выключен при нехватке ресурсов
  • Данные могут быть уничтожены при длительном неиспользовании
  • Используйте /sec для важных данных (шифрование)

Почему SQLite вместо MySQL?

SQLite — встраиваемая база данных, хранящаяся в одном файле.

Преимущества для обучения:

  • Не требует отдельного сервера
  • Занимает меньше памяти (~5MB vs ~100MB MySQL)
  • Проще в управлении (один файл)
  • Достаточно для небольших сайтов

Недостатки:

  • Не подходит для высокой нагрузки
  • Ограниченная масштабируемость
  • Нет пользователей и прав доступа как в MySQL

Официальный плагин sqlite-database-integration

В этой работе используется официальный плагин от WordPress Core Team:

  • Назначение: Тестирование SQLite для будущего включения в ядро WordPress
  • Авторы: WordPress Core Team (aristath, janjakes, zieladam и др.)
  • Популярность: 3000+ активных установок
  • Версия: Последняя стабильная (автоматически)

Как работает:

Плагин заменяет стандартный слой базы данных WordPress (wpdb) на SQLite-реализацию. При этом:

  • WordPress продолжает использовать стандартный API (wpdb)
  • Все MySQL-запросы автоматически конвертируются в SQLite-синтаксис
  • Файл базы данных создаётся автоматически в wp-content/database/.ht.sqlite
  • Не требуется отдельный сервер базы данных

Преимущества официального плагина:

  • Полная совместимость с WordPress API
  • Поддержка WordPress Core Team
  • Регулярные обновления
  • Высокая стабильность

Архитектура решения

Архитектура WordPress + SQLite на Segfault

Компоненты системы:

  1. Браузер клиента — отправляет HTTP-запросы на публичный IP и порт Segfault
  2. Segfault Server — бесплатный виртуальный сервер на Kali Linux
  3. Встроенный PHP-сервер — обрабатывает HTTP-запросы без Apache/Nginx
  4. WordPress — CMS с официальным плагином sqlite-database-integration
  5. SQLite — база данных в файле .ht.sqlite (через плагин)
  6. Зашифрованное хранилище /sec — сохраняет данные между сессиями

Практическая часть

Шаг 1. Подключение к Segfault

1.1. Откройте терминал на вашем компьютере

1.2. Подключитесь к серверу:

1ssh root@segfault.net

1.3. Введите пароль:

1segfault

1.4. После подключения вы увидите приветственное сообщение с важной информацией:

1Welcome to Segfault.
2Your server is ready...
3
4SSH               : ssh -o "SetEnv SECRET=???????????????????" root@adm.segfault.net

1.5. Сохраните секретный ключ для повторного подключения:

Важно: Запомните или скопируйте полную команду SSH с параметром SECRET.

Пример:

1ssh -o "SetEnv SECRET=???????????????????" root@adm.segfault.net

Без этого ключа вы не сможете:

  • Повторно подключиться к своему серверу
  • Получить доступ к сохраненным файлам в /sec
  • Восстановить зашифрованные данные

Совет: Сохраните эту команду в надежном месте (менеджер паролей, заметки).

1.6. Получите открытый порт для доступа к сайту:

1curl sf/port

В выводе будет строка:

1👾 Your reverse Port is 83.143.242.45 39815 [83.143.242.45:39815]

Запомните: IP-адрес и порт (в примере: 83.143.242.45:39815)

Примечание: Если подключение не работает, попробуйте порт 443:

1ssh -p 443 root@segfault.net

Шаг 2. Проверка системы и установка PHP

2.1. Проверьте версию системы:

1cat /etc/os-release

Ожидаемый вывод: Kali GNU/Linux Rolling (на базе Debian)

2.2. Обновите список пакетов:

1apt update

2.3. Установите PHP и необходимые модули:

1apt install -y php php-sqlite3 php-gd php-curl php-xml php-mbstring php-zip wget unzip

2.4. Проверьте установку PHP:

1php --version

Ожидаемый вывод: PHP 8.x.x

2.5. Проверьте наличие модуля SQLite:

1php -m | grep sqlite

Должно отобразиться: pdo_sqlite, sqlite3

2.6. Проверьте открытый порт (если забыли):

Если вы не записали порт на шаге 1.6, получите его снова:

1curl sf/port

Важно: PHP-сервер должен слушать именно на этом порту, иначе сайт не будет доступен извне.


Шаг 3. Создание директории проекта

3.1. Перейдите в зашифрованное хранилище:

1cd /sec

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

3.2. Создайте директорию для WordPress:

1mkdir wordpress-site
2cd wordpress-site

Шаг 4. Скачивание WordPress

4.1. Скачайте последнюю версию WordPress:

1wget https://wordpress.org/latest.tar.gz

4.2. Распакуйте архив:

1tar -xzf latest.tar.gz

4.3. Переместите файлы WordPress в текущую директорию:

1mv wordpress/* .
2mv wordpress/.* . 2>/dev/null || true
3rmdir wordpress

4.4. Удалите архив:

1rm latest.tar.gz

4.5. Проверьте содержимое:

1ls -la

Должны быть файлы: index.php, wp-config-sample.php, wp-admin/, wp-content/, wp-includes/


Шаг 5. Установка официального плагина SQLite Database Integration

5.1. Скачайте официальный плагин от WordPress Core Team:

1cd /sec/wordpress-site/wp-content/plugins
2wget https://downloads.wordpress.org/plugin/sqlite-database-integration.zip

Примечание: Это официальный плагин от WordPress Core Team для тестирования SQLite в ядре WordPress. Он автоматически перехватывает подключение к базе данных.

5.2. Распакуйте плагин:

1unzip sqlite-database-integration.zip
2rm sqlite-database-integration.zip

5.3. Скопируйте db.php для активации SQLite:

1cp sqlite-database-integration/db.copy ../db.php

Важно: Файл db.php в директории wp-content/ активирует плагин на уровне ядра WordPress, перехватывая все запросы к базе данных.

5.4. Перейдите обратно в корневую директорию сайта:

1cd /sec/wordpress-site

Шаг 6. Настройка WordPress для работы с SQLite

6.1. Создайте файл конфигурации из примера:

1cp wp-config-sample.php wp-config.php

6.2. Откройте файл для редактирования:

1nano wp-config.php

6.3. Настройте параметры базы данных (строки 20-35):

Оставьте стандартные настройки или замените значения:

1define( 'DB_NAME', 'wordpress' );
2define( 'DB_USER', 'wordpress' );
3define( 'DB_PASSWORD', 'wordpress_password' );
4define( 'DB_HOST', 'localhost' );
5define( 'DB_CHARSET', 'utf8' );
6define( 'DB_COLLATE', '' );

6.4. Добавьте константу для выбора движка базы данных (после настроек DB_**):

1define( 'DB_ENGINE', 'sqlite' );

Важно:

  • Константа DB_ENGINE указывает WordPress использовать SQLite вместо MySQL
  • Файл wp-content/db.php (скопированный на шаге 5.3) активирует плагин на уровне ядра
  • Файл базы данных будет создан автоматически в wp-content/database/.ht.sqlite

6.5. Добавьте ключи безопасности (генерируются автоматически при установке, можно оставить как есть или заменить):

Найдите строки:

1define('AUTH_KEY',         'put your unique phrase here');
2define('SECURE_AUTH_KEY',  'put your unique phrase here');
3...

Можно сгенерировать случайные ключи командой:

1curl -s https://api.wordpress.org/secret-key/1.1/salt/

И вставить их вместо стандартных значений.

6.6. Сохраните файл (Ctrl+O, Enter, Ctrl+X)


Шаг 7. Запуск встроенного PHP-сервера

7.1. Убедитесь, что вы в директории сайта:

1cd /sec/wordpress-site
2pwd

7.2. Получите открытый порт (если забыли):

1curl sf/port

7.3. Запустите PHP-сервер в фоновом режиме на открытом порту:

1nohup php -S 0.0.0.0:ВАШ_ПОРТ > /tmp/server.log 2>&1 &

Важно: Замените ВАШ_ПОРТ на номер порта, полученный на шаге 2.6 (например: 39815).

Пример:

1nohup php -S 0.0.0.0:39815 > /tmp/server.log 2>&1 &

7.4. Проверьте, что сервер запущен:

1ps aux | grep "php -S"

Ожидаемый вывод: должна быть строка с php -S 0.0.0.0:ВАШ_ПОРТ

7.5. Проверьте логи сервера:

1cat /tmp/server.log

Должно отобразиться: Listening on http://0.0.0.0:ВАШ_ПОРТ


Шаг 8. Установка WordPress через браузер

8.1. Получите ваш публичный адрес и порт:

На сервере выполните:

1curl sf/port

В выводе будет строка:

1👾 Your reverse Port is 83.143.242.45 39815 [83.143.242.45:39815]

Запомните: IP-адрес и порт (в примере: 83.143.242.45:39815)

8.2. Откройте браузер и перейдите по адресу:

1http://ВАШ-IP:ВАШ-ПОРТ/wp-admin/setup-config.php

Пример: http://83.143.242.45:39815/wp-admin/setup-config.php

8.3. Выберите язык (русский) и нажмите “Продолжить”

8.4. Заполните форму установки:

ПолеЗначение
Название сайтаМой первый сайт на WordPress
Имя пользователяadmin
Пароль(придумайте надёжный пароль, минимум 12 символов)
Ваш emailваш@email.com
Поисковая видимость☐ (снимите галочку для обучения)

8.5. Нажмите “Установить WordPress”

8.6. После успешной установки нажмите “Войти”

8.7. Введите логин и пароль, созданные на шаге 8.4


Шаг 9. Проверка работоспособности

9.1. Проверьте доступность сайта:

  • Откройте: http://ВАШ-IP:ВАШ-ПОРТ/
  • Должна появиться стандартная тема WordPress с приветственной записью

9.2. Проверьте административную панель:

  • Откройте: http://ВАШ-IP:ВАШ-ПОРТ/wp-admin
  • Зайдите под учётной записью администратора

9.3. Создайте тестовую запись:

  1. В админ-панели перейдите: Записи → Добавить новую
  2. Заголовок: “Моя первая запись на Segfault”
  3. Текст: “Этот сайт работает на WordPress + SQLite на бесплатном сервере Segfault!”
  4. Нажмите “Опубликовать”

9.4. Проверьте запись на сайте:

  • Перейдите на главную страницу сайта
  • Запись должна отображаться

Шаг 10. Работа с зашифрованным хранилищем

10.1. Проверьте содержимое /sec:

1ls -la /sec/wordpress-site/

10.2. Проверьте файл базы данных SQLite:

Официальный плагин создаёт базу данных в директории wp-content/database/:

1ls -lh /sec/wordpress-site/wp-content/database/

Должен быть файл: .ht.sqlite (скрытый файл)

10.3. Проверьте размер базы данных:

1du -h /sec/wordpress-site/wp-content/database/.ht.sqlite

Примечание: Файл .ht.sqlite создаётся автоматически при первом запуске WordPress с установленным плагином. Название файла начинается с точки, что делает его скрытым в Unix-системах.

10.4. Важно: Данные в /sec сохраняются между сессиями благодаря шифрованию. При выходе из SSH ключи шифрования стираются, но данные остаются зашифрованными и будут доступны при следующем входе.


Дополнительные задания

Задание 1. Резервное копирование базы данных

Создайте резервную копию базы SQLite (официальный плагин создаёт файл .ht.sqlite):

1cd /sec/wordpress-site/wp-content/database
2cp .ht.sqlite wordpress-backup-$(date +%Y%m%d).sqlite

Скачайте бэкап на локальный компьютер (в другом терминале):

1scp root@segfault.net:/sec/wordpress-site/wp-content/database/wordpress-backup-*.sqlite .

Задание 2. Установка темы

  1. В админ-панели перейдите: Внешний вид → Темы
  2. Нажмите “Добавить новую”
  3. Выберите тему (например, “Twenty Twenty-Four”)
  4. Нажмите “Установить” → “Активировать”
  5. Проверьте изменение внешнего вида сайта

Задание 3. Настройка постоянных ссылок (ЧПУ)

  1. В админ-панели: Настройки → Постоянные ссылки
  2. Выберите “Название записи”
  3. Сохраните изменения
  4. Проверьте, что URL записей стали читаемыми

Примечание: Для работы ЧПУ встроенный PHP-сервер не требует дополнительной настройки .htaccess.


Управление сервером

Остановка PHP-сервера

1# Найдите PID процесса
2ps aux | grep "php -S"
3
4# Остановите процесс (замените XXXX на PID)
5kill XXXX

Перезапуск сервера

1cd /sec/wordpress-site
2nohup php -S 0.0.0.0:8080 > /tmp/server.log 2>&1 &

Просмотр логов сервера

1tail -f /tmp/server.log

Выход из SSH (сервер продолжит работать)

1exit

Или нажмите Ctrl+D

Важно: PHP-сервер продолжит работать в фоновом режиме после выхода благодаря nohup.


Требования к отчёту

Отчёт должен содержать:

  1. Титульный лист с названием работы, ФИО студента, группы, датой
  2. Введение — цель и задачи работы (1 страница)
  3. Ход работы — пошаговое описание выполнения со скриншотами:
    • Подключение к Segfault через SSH
    • Установка PHP и модулей
    • Содержимое директории /sec/wordpress-site
    • Запуск PHP-сервера
    • Установка WordPress (скриншоты веб-интерфейса)
    • Административная панель
    • Созданная тестовая запись
    • Файл базы данных SQLite
  4. Архитектура решения — схема или описание компонентов
  5. Вывод — какие навыки получены, преимущества и недостатки использования SQLite и Segfault (1 страница)
  6. Список используемых источников (минимум 3 источника)

Объём отчёта: 6-10 страниц

Формат: PDF или DOCX


Критерии оценки

КритерийБаллыОписание
Успешное подключение к Segfault10SSH-соединение установлено
Установка PHP и модулей15Все необходимые пакеты установлены
Корректная установка WordPress25WordPress установлен и работает
Настройка SQLite15База данных SQLite функционирует
Проверка функциональности15Создана запись, проверена админка
Работа с /sec и резервное копирование10Использовано зашифрованное хранилище
Оформление отчёта10Соблюдена структура, есть скриншоты
Дополнительные задания+20За каждое дополнительное задание

Максимальный балл: 100 (+20 бонус)

Шкала оценок:

  • 90-100: отлично
  • 75-89: хорошо
  • 60-74: удовлетворительно
  • менее 60: неудовлетворительно

Контрольные вопросы для защиты

  1. Что такое Segfault и какие у него преимущества/недостатки?
  2. Почему используется SQLite вместо MySQL?
  3. Какие преимущества даёт встроенный PHP-сервер?
  4. Зачем использовать зашифрованное хранилище /sec?
  5. Как выполнить резервное копирование базы данных SQLite?
  6. Что такое nohup и зачем он используется?
  7. Как проверить, что PHP-сервер запущен?
  8. Какие ограничения имеет бесплатный Segfault?
  9. Чем SQLite отличается от MySQL?
  10. Как сохранить данные между сессиями работы с Segfault?
  11. Как работает официальный плагин sqlite-database-integration и чем он отличается от неофициальных решений?

Возможные проблемы и решения

Проблема: Потерян секретный ключ для подключения

Решение:

  • Если вы не сохранили секретный ключ при первом входе, создайте новый сервер:
    1ssh root@segfault.net
    
  • Новый сервер будет создан с новым ключом
  • Важно: Данные в /sec предыдущего сервера будут потеряны без возможности восстановления
  • Совет: Всегда сохраняйте команду с SECRET сразу при первом входе

Проблема: Не удаётся подключиться по SSH

Решение:

  • Используйте полную команду с SECRET:
    1ssh -o "SetEnv SECRET=ВАШ_КЛЮЧ" root@adm.segfault.net
    
  • Попробуйте порт 443:
    1ssh -o "SetEnv SECRET=ВАШ_КЛЮЧ" -p 443 root@adm.segfault.net
    
  • Подождите несколько минут и попробуйте снова (возможен лимит подключений)
  • Проверьте подключение к интернету

Проблема: Команда apt не работает

Решение:

1apt update
2apt install -y имя_пакета

Проблема: PHP-сервер не запускается

Решение:

  • Проверьте, что используете правильный порт (полученный через curl sf/port):
    1curl sf/port
    2# Используйте порт из строки "Your reverse Port is..."
    
  • Проверьте, не занят ли порт:
    1netstat -tlnp | grep ВАШ_ПОРТ
    
  • Остановите предыдущий процесс PHP:
    1ps aux | grep "php -S"
    2kill <PID>
    
  • Запустите снова с правильным портом:
    1nohup php -S 0.0.0.0:ВАШ_ПОРТ > /tmp/server.log 2>&1 &
    

Проблема: WordPress не видит базу данных

Решение:

  • Проверьте, что файл wp-content/db.php существует:
    1ls -la /sec/wordpress-site/wp-content/db.php
    
  • Если файла нет, скопируйте его:
    1cp /sec/wordpress-site/wp-content/plugins/sqlite-database-integration/db.copy /sec/wordpress-site/wp-content/db.php
    
  • Проверьте файл wp-config.php, должен быть добавлен:
    1define( 'DB_ENGINE', 'sqlite' );
    
  • Проверьте права доступа:
    1chmod 755 /sec/wordpress-site/wp-content
    2chmod 755 /sec/wordpress-site/wp-content/database 2>/dev/null || true
    

Проблема: Данные не сохраняются между сессиями

Решение:

  • Убедитесь, что вы используете правильный SECRET ключ при подключении:
    1ssh -o "SetEnv SECRET=ВАШ_КЛЮЧ" root@adm.segfault.net
    
  • Проверьте, что работаете в директории /sec:
    1pwd  # должно быть /sec/wordpress-site или поддиректория
    
  • Проверьте, что данные записываются:
    1ls -la /sec/wordpress-site/
    
  • Не храните данные в /tmp или /var/tmp — они удаляются при выходе
  • Проверьте, что не превышен лимит дискового пространства:
    1df -h /sec
    

Проблема: Сайт недоступен из интернета

Решение:

  • Проверьте, что сервер слушает на 0.0.0.0, а не 127.0.0.1:
    1netstat -tlnp | grep php
    2# Должно быть: 0.0.0.0:ВАШ_ПОРТ
    
  • Проверьте правильный порт:
    1curl sf/port
    2# Используйте именно этот порт для PHP-сервера
    
  • Проверьте IP-адрес:
    1curl ipinfo.io/ip
    2netstat -tlnp | grep php
    
  • Убедитесь, что порт открыт на файрволе Segfault (обычно открыт автоматически)

Рекомендуемые источники

Официальная документация

Segfault


Приложение А. Полный список команд

 1# Подключение (используйте ваш SECRET ключ из первого входа)
 2ssh -o "SetEnv SECRET=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ" root@adm.segfault.net
 3# Пароль: segfault
 4
 5# Получение открытого порта
 6curl sf/port
 7# Запомните: IP-адрес и номер порта из строки "Your reverse Port is..."
 8
 9# Установка PHP
10cd /sec
11apt update
12apt install -y php php-sqlite3 php-gd php-curl php-xml php-mbstring php-zip wget unzip
13
14# Создание директории
15mkdir wordpress-site && cd wordpress-site
16
17# Скачивание WordPress
18wget https://wordpress.org/latest.tar.gz
19tar -xzf latest.tar.gz
20mv wordpress/* . && rmdir wordpress
21rm latest.tar.gz
22
23# Установка официального плагина SQLite (от WordPress Core Team)
24cd wp-content/plugins
25wget https://downloads.wordpress.org/plugin/sqlite-database-integration.zip
26unzip sqlite-database-integration.zip
27rm sqlite-database-integration.zip
28
29# Копирование db.php для активации SQLite (обязательно!)
30cp sqlite-database-integration/db.copy ../db.php
31cd /sec/wordpress-site
32
33# Настройка WordPress (использовать стандартные настройки БД + DB_ENGINE)
34cp wp-config-sample.php wp-config.php
35nano wp-config.php
36# Добавьте: define( 'DB_ENGINE', 'sqlite' );
37# Файл базы данных будет создан в wp-content/database/.ht.sqlite
38
39# Запуск сервера (замените ВАШ_ПОРТ на порт из curl sf/port)
40nohup php -S 0.0.0.0:ВАШ_ПОРТ > /tmp/server.log 2>&1 &
41
42# Проверка
43ps aux | grep "php -S"
44curl http://localhost:ВАШ_ПОРТ
45
46# Резервное копирование (официальный плагин создаёт файл .ht.sqlite)
47cd /sec/wordpress-site/wp-content/database
48cp .ht.sqlite wordpress-backup-$(date +%Y%m%d).sqlite
49
50# Повторное подключение (используйте сохранённый SECRET ключ)
51ssh -o "SetEnv SECRET=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ" root@adm.segfault.net

Приложение Б. Пример структуры директорий

 1/sec/wordpress-site/
 2├── index.php
 3├── wp-config.php
 4├── wp-admin/
 5├── wp-content/
 6│   ├── db.php                      # ← Активатор SQLite (скопирован из плагина)
 7│   ├── database/
 8│   │   └── .ht.sqlite              # ← SQLite база данных (официальный плагин)
 9│   ├── plugins/
10│   │   └── sqlite-database-integration/  # ← Официальный плагин от WordPress Core
11│   ├── themes/
12│   └── uploads/
13├── wp-includes/
14└── ...
← Лаб. работа "Анализ и выбор CMS" Лаб. работа "Развертывание среды и установка … →