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

в 14:03, , рубрики: bash, Hetzner, linux, linux kernel, ubuntu server, операционные системы, Серверное администрирование

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

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

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

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

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

installimage

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

После этого 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

Автор: Alex10

Источник

* - обязательные к заполнению поля