Pull to refresh

Реанимация серверов Ubuntu на Hetzner или немного полезных команд

Reading time3 min
Views38K


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

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

Resсue, монтирование разделов, chroot


Итак, начнем с того, что никакого доступа к системе у нас нет, после, к примеру, очередной перезагрузки. Поэтому у нас остается два варианта — переустановить систему или восстановить её. В случае с VPS хецнер просто накатит новую систему и, естественно, что на диске ничего не останется. Поэтому мы, безусловно, выбираем восстановление.
Кому интересно, для переустановки из rescue используется команда:
installimage




После этого hetzner покажет сгенерированный пароль. Перегружаем из админки сервер и коннектимся, лучше через IP адресс по ssh, ssh root@55.22.33.44
Логин, естественно, root.

После залогинивания нас встречает приглашение такого рода root@rescue chroot цвет поменяется на синий root@rescue

Первое, что мы делаем — смотрим название наших дисков:
ls /dev/[hsv]d[a-z]*[0-9]*
 # самый распространенный пример вывода: /dev/sda /dev/sda1 /dev/sda2 /dev/sda3


Затем монтируем диск с нашей системой:
mount /dev/sda3 /mnt

Разделы /boot и прочие пока не трогаем. После того как подмонтировали, нам надо сделать видимым содержимое /dev /sys /proc иначе, если мы остались без ядра, то оно не поставится.
mount --bind /dev /mnt/dev/; mount --bind /proc /mnt/proc/; mount --bind /sys /mnt/sys/

в debian есть удобная команда, заменяющая эту строчку, в ubuntu она обнаружена не была.
chroot-prepare /mnt

После этого:
chroot /mnt;

Теперь можно домонтировать все остальное: /boot
mount -a

На этом этапе мы имеем, в принципе, более менее подконтрольную нам недавно упавшую систему.

Диагностика


Чаще все приходится сталкиваться с проблемами обновления или установки. Тут, конечно, детализировать что-то сложно — можно только посоветовать, если обновляется дистрибутив, делать это через screen
Например:
screen -S upgrade
apt-get update
apt-get dist-upgrade
do-release-upgrade

Причина одной из самых распространенных проблем — банальная нехватка места на диске
df -h

Иногда бывает, что место есть а нодов свободных нет. Тогда это тоже приведет к сбою обновления и дальнейшим проблемам.
df -i

Безопасность

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

Посмотреть кто какие команды вводил:
last

Глянуть на историю
history

Конечно, это все полумеры, но тем не менее.
Далее нужно:
  • Проверить /root/.ssh чтобы там не было левых сертификатов.
  • Посмотреть в /etc/passwd чтобы кроме root ни у кого не было полномочий.
  • nmap чтобы не было подозрительных открытых портов, а если есть, то убеждаемся, что никто подозрительный их не слушает.
  • Меняем на всякий случай пароль root c помощью passwd.
  • Польза от изучения логов в /var/log бывает неоценима .
  • Проверяем систему на руткиты


Обновление и установка:
apt-get install rkhunter
rkhunter --update

Поиск руткитов:
rkhunter -c -sk

Warnin-гов он, скорее всего, найдет много, особенно в /bin и /usr/bin
Еще есть альтернативный вариант:
Установка chkrootkit:
apt-get install chkrootkit

Поиск руткитов:
chkrootkit


Восстановление


Рассмотрим худший вариант, когда в папке /boot вообще пусто и в системе grub не стоит, ядра нет и большая часть пакетов битая.

Восстановление системы


Чистим архив пакетов
apt-get clean

Удаляем не удалённые зависимости от уже удалённых пакетов
apt-get autoremove


Ставим grub2:
apt-get install grub2

Записываем grub в MBR
grub-install /dev/sda

Устанавливаем или переустанавливаем нормальное ядро.
apt-get install linux-image-x.x.x-xx-generic --reinstall

Обновляем меню grub
update-grub


Выполняем команды, предназначенные для разрешения конфликтов зависимостей:
apt-get install -f

dpkg --configure -a


Переустанавливаем все пакеты:
apt-get install --reinstall `dpkg --get-selections | grep -v deinstall | awk '{print $1}'`


Если известно в чем была проблема, то достаточно переустановить нужный пакет:
apt-get install {имя_пакета}  --reinstall


В конце можно еще раз выполнить:
apt-get install -f
dpkg --configure -a


Заключение


Предварительно выйдя из chroot c помощью Ctrl+D или exit делаем:
reboot


Смотрим, что вышло. Если проблема осталась, то все по новой и смотрим, что мы упустили, как можно больше внимания уделяя /var/log.

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

Полезные ссылки:

wiki Hetzner Rescue System
ubuntu wiki восстановления grub
screen
Tags:
Hubs:
+37
Comments13

Articles

Change theme settings