Этот небольшой пост-шпаргалка предназначен для тех у кого внезапно в ходе неудачного эксперимента или обновления перестал пинговаться сервер, отвалился ssh
и прочее. Проще говоря он о восстановлении сервера после обновлений, взломов и тому подобного. По моим ощущениям последнее бывает гораздо реже.
Упоминания hetzner носят исключительно мимолетный характер, в силу того, что часто приходится пользоваться его услугами.
Resсue, монтирование разделов, chroot
Итак, начнем с того, что никакого доступа к системе у нас нет, после, к примеру, очередной перезагрузки. Поэтому у нас остается два варианта — переустановить систему или восстановить её. В случае с
Кому интересно, для переустановки из 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
Автор: Alex10