Насколько вам приятно рекомендовать FirstVDS своим друзьям и коллегам?
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
В прошлый раз вы поставили нам из 10, продолжить опрос?

Решение для конкурса "Почини сломанный VDS"

Аватар пользователя i.kuzmin
Автор статьи Игорь Кузьмин

Конкурс администраторов «Почини сломанный VDS» вызвал неожиданное количество откликов — многим хотелось попробовать свои силы в тестовых заданиях, подготовленных нашими администраторами. За сутки, отведенные на проведение конкурса, с заданием смогли справиться 8 человек! Мы публикуем пошаговое руководство, на случай если вы хотите повысить свою квалификацию администратора или просто узнать, где допустили ошибку. Четкие команды к исполнению представляем только в начале решения, так как в администрировании всегда есть место для индивидуального подхода.

Администрируем конкурсный VDS:

Загрузка сервера

Сервер загружен в rescue-режиме с ISO-образа, требуется загрузиться с «жесткого» диска. Для этого отправляем сервер в перезагрузку и сразу переподключаемся к VNC, в меню загрузки выбираем загрузку с диска. ОС не стартует и выдает kernel panic.

Для выявления ошибки отключаем quite-режим загрузки в конфигурационном файле grub и при следующей загрузке видим ошибку о том, что нет root-устройства.

Выполняем: mount /dev/vda1 /mnt
 vim /mnt/grub/grub.conf

Снова перезагружаемся в rescue-режим. Какие диски присутствуют в системе можно посмотреть по UUID:


ls -la /dev/disk/by-uuid/

Выбрать правильный поможет команда:


fdisk -l /dev/vda

Идем в grub.conf и исправляем UUID, либо выставляем загрузку непосредственно с устройства /dev/vda3

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

Снова перезагружаемся. У нас есть 2 четкие проблемы:

Ошибки о закончившемся месте — нужно освободить

Подключаем корневой раздел:

mount /dev/vda3 /mnt
df -h /mnt

Место, вроде бы есть, но свободны ли inodes?

df -i /mnt

догадка верна, нужно искать место скопления файлов. Проверим каталог /tmp

ls -f /mnt/tmp | wc -l 

Также, выполнив команду ls -la /mnt, можно обратить внимание на размер директории /mnt/tmp. Можно сразу обратить внимание на права 000 на корневой раздел и исправить их. Удаляем немного файлов в /mnt/tmp и изменяем права на корень.

Нет доступа root на сервер — нужно сбросить root пароль

Для этого выполняем команду chroot:

chroot /mnt

Ругается на отсутствие zsh — поэтому надо явно указать какой shell будем использовать, например, bash.

chroot /mnt /bin/bash

Теперь меняем пароль командой passwd.

Перезагружаемся, пробуем зайти. Не заходит, но и не ругается на неправильный пароль. Перезагружаемся и проверяем файл passwd. Видим неправильно прописанную командную оболочку. Исправляем на /bin/bash или другой по вкусу.

Работа сети

На этом шаге уже можно отключить ISO-образ, чтобы не мешал при каждой перезагрузке. Перезагружаемся и успешно входим в систему. Проверяем работу сети — не работает. Смотрим в конфигурационный файл — надо найти данные для сетевого подключения. Это VMmanager, куда у нас есть доступ. Заполняем корректно файл настроек сети. Пробуем запустить и выясняем, что eth0 нет на сервере. Сходим в /etc/udev/rules.d/70-persistent-net.rules и проверим, так ли это на самом деле. Обнаруживаем 2 устройства вместо одного и сетевую карту с нашим MAC-адресом, который мы узнали в VMmanager — eth1. Удаляем лишнюю и переименовываем нашу сетевую карту в eth0. Перезагружаемся.

Сеть поднялась, но сервер недоступен. Проверяем firewall и убираем прописанные ограничения. Можно попробовать открыть сайт по IP-адресу. И ничего не открывается.

Подключаемся по SSH.

Проверяем все необходимые нам сервисы: mysql, apache.

Запуск Apache отрабатывает нормально, но при проверке, запущен ли он, не обнаруживается ни один процесс. Файлы логов говорят об ошибке созданием pid-файла. Смотрим путь, где Apache пытается создать файл — symlink на /var/run/httpd, но директория отсутствует. Создаем файл, даем права и запускаем Apache.

Запускаем MySQL. Нам честно отвечают, что проблема с запуском. Смотрим лог-файл: если ранее проблема с корневым каталогом не была устранена, то возникнет проблема с правами:

[ERROR] Can't start server: Bind on unix socket: Permission denied

Выставляем права на корень, если необходимо, и пробуем снова запуститься — не хватает таблиц в базе. Таблицы на месте, но принадлежат root. Меняем пользователя на mysql, запускаем и вновь ошибка — невозможно создать pid-файл, как уже было с httpd. Повторяем операцию, что уже проделали с Apache и запускаем, наконец, MySQL сервер.

Открываем IP-адрес сервера в браузере и понимаем, что он ведет не туда, куда нужно. Проверяем конфигурацию httpd и не находим VirtualHost’a, который бы вел в необходимый каталог, но видим его в соседнем каталоге — vhost. Добавляем Include. Так же видим, что указан неверный IP для NameVirtualHost и для самого VirtualHost — исправляем. Если мы ну очень внимательные, то сразу понимаем, что DocumentRoot тоже неверный, либо видим warning при перезапуске об этом и исправляем его. Переходим на сайт и получаем ошибку 403 – сморим права. Исправляем права на /var/www/interview/data/, но получаем ошибку о нехватке прав — чаще всего это означает наличие immunable-бита на файл/директорию, убираем его. Добавляем прав на /var/www/interview/data/www/interview.fvds.ru/index.html открывается, но ошибка 403 до сих пор присутствует, необходимо указать DirectoryIndex для VirtualHost’a.

Теперь все открывается, но php не обрабатывается. Добавляем:

php_admin_value engine 1 

в конфигурационный файл /etc/httpd/conf/vhosts/interview/interview.fvds.ru. Mysql.php обрабатывается, но не работает, а вот mail.php вообще не обрабатывается, а все потому, что используется короткий тег. Разрешаем его в php.ini и перезапускаем Apache.

Mysql.php – в VirtualHost настраиваем логи. Из них узнаем, что не хватает расширения mysqli – устанавливаем и перезапускаем службу httpd. Следующая ошибка — неверный хост, и необходимость использовать IP нашего сервера. Исправляем mysql.php, заменяя хост на свой IP, но при сохранении возникает ошибка, а на своих ошибках мы учимся – проверяем immunable-бит и убираем его. Незадача, подключение запрещено — необходимо разрешить пользователю удаленные подключения. Конечно, легкий путь — просто установить localhost, но так совсем не интересно. Держим путь в консоль mysql и добавляем прав пользователю, к счастью, root-пароль для mysql не нужен.

grant all privileges on interview.* to 'interview'@'%' identified by 'R5b8K2r8';

Проверяем — все хорошо.

Mail.php — проверка пишет, что письмо не отправлено. Попробуем отправить письмо из консоли. И получаем ошибку доступа. Добавляем права на запуск и запускаем почтовый сервер — почта уходит из консоли корректно идем проверить сайт — не работает. Файлы журналов сайта говорят, функция отключена — ее необходимо включить в php.ini и перезапустить Apache. Снова проверяем — работает.

Вот и все : ) Мы надеемся, что выполнять это тестовое задание было настолько же весело, как и нам его выдумывать :)

Было интересно?

Назад к списку
Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!