su: failed to execute /usr/bin/zsh: No such file or directory

Подобное сообщение появляется если попытаться залогиниться под пользователям, для которого был установлен альтернативный shell, который был впоследствии удалён. Самый эпик фейл, если этим пользователем является root.

su
Password:
su: failed to execute /usr/bin/zsh: No such file or directory

Но ничего страшного, выход есть! Чтобы поменять оболочку для рута не имея доступа к аккаунту придётся загрузиться с LiveCD и вручную поправить файл /etc/passwd.

Если прямого доступа к серверу нет, то тоже ничего страшного. Большинство нормальных хостеров предлагают консоль для восстановления. У нормальных хостеров её можно включить автоматически и бесплатно. Из недостатков данного метода — простой сервера во время восстановления, Но займёт он не более 5 минут.

Для простоты я будут использовать термин LiveCD, хотя никакого CD в данном случае не существует. У Hetzner Resue система работает так:  после активации системы спасения на нашем DHCP-сервере будет создан файл конфигурации. При следующей перезагрузке ваш сервер будет загружаться из сети, и с нашего TFTP-сервера будет загружена минимальная операционная система. Тогда вы сможете использовать спасательную систему столько, сколько захотите. Заказ на спасательную систему будет активен в течение 60 минут. Если вы перезагрузите сервер, будет запущена обычная установленная система.

Для Hetzner нужно зайти в панель robot, Выбрать сервер, затем вкладку Rescue. Выбрать операционную систему для LiveCD и её архитектуру, для CentOS 7 подойдёт Linux 64. Затем нажать кнопку Activare resque system, после чего появится сообщения с подобным содержимым:

After the next reboot your server will boot from the rescue system.
Then you can access your server, using the user name "root" and the following password: xdpxbqaUR7c2Bj

Нужно запомнить пароль для LiveCD системы. Затем нужно перейти в о вкладку Reset, выбрать пункт Execute an automatic hardware reset и нажать кнопку Send. Всё, теперь нужно заново подключиться к серверу по ssh под логином и паролем указанным в сообщении из прошлого шага. Теперь самое интересное, нужно примонтировать физические диски в LiveCD образ. Подробнее можно почитать в документации Hetzner. В моём случае был софтварный RAID, для начала нужно получить список разделов:

ls /dev/md*

В моём случае найдены:

/dev/md0 /dev/md1 /dev/md2 /dev/md3

Далее нужно примонировать корневой раздел в любую директорию, например в стандартную /mnt:

mount /dev/md2 /mnt

Скорее всего и у вас корневой раздел будет /dev/md2.

Теперь нужно отредактировать файл /etc/passwd:

nano /etc/passwd

Если файл не найден, значит примонтировать не правильный раздел. Сначала нужно отмонтировать текущий:

umount /mnt

А затем примонтировать следующий, до тех пор, пока не будет найден корневой.

Теперь нужно поменять первую строчку с:

root:x:0:0:root:/root:/usr/bin/zsh

На:

root:x:0:0:root:/root:/bin/bash

Сохранить, выйти и сделать reboot.

Ссылки

  • https://wiki.hetzner.de/index.php/Hetzner_Rescue-System/ru