среда, 29 августа 2012 г.

Как получить доступ к серверу через SSH, имея только виртуальный FTP аккаунт

Сегодня попался довольно интересный случай в саппорте, где пришлось отлаживать работу приложения на PHP, имея только виртуальный FTP аккаунт. В качестве примера я буду называть сайт www.example.com и FTP аккаунт supportuser@example.com, ограниченный корневой директорией исходников сайта. Сервер, на котором расположен сайт, работает под управлением WHM/cPanel.

Моя цель - получить доступ к логам вебсервера (которые находятся вне корневой директории сайта), чтобы понять причину глюков в работе приложения. В корне сайта валяется файлик error_log, но его содерживое не содержит ничего полезного, его происходит ошибка уровнем выше, чем интерпретатор PHP.

Имея FTP доступ, я заливаю phpshell в корень сайта и проверяю под каким пользователем сервер выполняет php скрипты.

phpshell> id
uid=500(examplec) gid=500(examplec) groups=500(examplec)

Если имя пользователя состоит из 8 первых символов из названия домена, то это косвенно указывает на стандартную конфигурацию WHM/cPanel, а следовательно интерпретатор PHP на этом сайте работает в режиме CGI/FastCGI. А еще это означает, что мы имеем возможность изменять файлы, которые принадлежат пользователю examplec.

Проверяем, имеет ли этот пользователь валидный shell

phpshell> grep '^examplec:' /etc/passwd
examplec:x:500:500::/home/examplec:/bin/bash

Наличие /bin/bash в последнем поле подтверждает, что у пользователя examplec есть рабочий шелл. В принципе уже сейчас можно логиниться через SSH на examplec@example.com, но я не знаю пароль пользователя examplec (у меня есть только пароль от виртуального аккаунта supportuser@example.com).

Чтобы попасть на сервер, мне нужно воспользоваться возможностью логиниться через публичный ключ SSH (я еще не встречал сервер, где бы была отключена такая возможность). Для этого я создаю в домашней директории пользователя директорию .ssh и скачиваю в нее свой открытый ключ SSH.

phpshell> mkdir ~/.ssh
phpshell> wget -q -O ~/.ssh/authorized_keys http://sharedsite.com/my-ssh-public-key

Вот теперь можно логиниться через SSH.

2 комментария:

  1. Андрей, вариант конечно хороший, а что делать если чтение доступно только для владельца логов (root) ?

    ОтветитьУдалить
    Ответы
    1. К сожалению никаких простых, а главное законных способов сделать это, мне неизвестно. В моей ситуации пришлось ждать, пока клиент пришлет root доступ.

      Удалить