При настройке ssh сервера возможна ситуация, при которой новый конфиг не взлетел (например при настройке sftp), текущая сессия потеряна, при этом, хостинг-провайдер не предоставляет KVM или VNC доступ к серверу, панели управления нет, но есть доступ к терминалу через web (например сайт на WordPress и плагин WP-Term). Что делать?
Для начала нужно понимать начальные условия. У меня они были следующими:
- Наличие WordPress на VPS c админкой
- PHP-FPM работающий под юзером www-data
- Наличие пользователя на VDS в группе sudoers
- FTP доступ ко всей файловой системе (не критично, можно и без этого)
- Неверно настроенный sshd не позволяющий принимать входящие подключения (connection refused).
Что будем делать?
Первым делом определите свои начальные условия, мои нарисовали такой план:
- Получить доступ к терминалу любым наиболее простым способом.
- Получить доступ к пользователю, имеющим доступ к sudoers.
- Получить доступ к руту, сделать chmod 777 на /etc/ssh/sshd_config.
- Зайти по FTP и исправить ошибку в конфиге SSH-сервера.
- Перезагрузить сервис или сервер для восстановления доступа к управлению сервером.
Поехали
Поскольку у меня был доступ к админке WordPress, я установил плагин WPTerm для получения доступа к терминалу. Если есть доступ к файлам сайта, можно залить любой php shell, работать будет.
Убедимся, что для команды su система попросит зайти в «нормальный» терминал, а не оболочку от php exec:
Какое решение? Правильно, завернуть нашу команду в script, чтобы получить доступ к нашему пользователю, затем доступ к root и изменить права на нужный файл, чтобы после исправить конфиг по ftp. Немного подумав, получаем следующую команду спасения сервера:
$ sh -c "sleep 1; echo pass" | script -c 'su -c "echo pass | sudo -S -k chmod 777 /etc/ssh/sshd_config" - sudouser' | tail -n +2
pass — пароль пользователя входящего в sudoers,
sudouser — логин пользователя входящего в sudoers
Проверим, что показывает whoami:
Получилось, whoami показывает, что мы успешно залогинились как root. Далее заходим по FTP, меняем конфиг и после презагрузки sshd не забываем вернуть начальные права доступа к файлу.
Заключение
Таким образом, зная логин и пароль пользователя из группы sudoers и имея доступ к выполнению php exec, можно выполнить любую команду от привилегированного пользователя.
Комментировать