« Доступ к базам данных из php. Часть 1 | Мелкие хитрости в отладке кода с помощью alert. Часть 1 » |
Полезняшки. PHPShell - скрипт php, позволяющий выполнять на веб-сервере shell-команды
Недавно на необъятных просторах Интернета я натолкнулся на упоминание о “PHP Shell”. Пару лет назад мне эта утилита очень помогла и я сейчас хочу отдать своеобразный долг ее разработчику Martin Geisler (http://mgeisler.net/).Каково назначение “PHP Shell”? Я полагаю, что каждый “продвинутый” веб-программист, не говоря тем более о сисадминах, сталкивался и использовал SSH. SSH позволяет нам получить удаленный доступ к серверу и выполнять на нем shell-команды (ну там всякие команды типа ходить по каталогам туда-сюда, вверх-вниз, перемещать, удалять и копировать файлы, запускать сценарии и всякие хитроумные утилитки), как будто бы провод к вашему монитору от системного блока удлинился до невероятных размеров и дошел, аж, до сервера хостера. Надо сказать, что возможно через ssh туннелировать и X-графику, изображение рабочего стола, показывая запущенные оконные приложения, но это явно не для веб-серверов.
Одним словом, в тех случаях, когда средства ftp, или панель управления сайтом (от вашего хостера) не справляются и вам нужна непредусмотренная функция, то вам на выручку придет SSH. В идеальном случае на вашем хостинге есть поддержка ssh и после заключения договора вам пришлют учетные данные для доступа. Затем вы скачиваете putty (самый лучший в мире ssh-клиент доступен по адресу http://www.chiark.greenend.org.uk/~sgtatham/putty/) и, вооружившись учебником по linux-командам, начинаете
Одним словом, если у вас на хостинге нет SSH, то “что не ладно в датском королевстве”. Минус в том, зачастую SSH по умолчанию на вашем “свежем” сайте отключен, и требуется некоторое время поругаться со службой поддержки, чтобы ssh заработал. Именно так и случилось в тот далекий зимний вечер. Мне нужно было срочно перенести сайт с одной машины на другую, в ходе чего возникли проблемы, и я привычно потянулся к ярлыку putty на рабочем столе, дабы посмотреть что там “внутри” у пациента. Упс..., а поддержка ssh не активирована. Как быть? Если вы достаточно искушены в программировании на каком-то там языке, то не составит сложности написать небольшой скрипт реализующий нужную задачу. Я же открыв google и, пробежавшись по паре ссылок, нашел упоминание о PHP Shell. Одним словом, домой я ушел вовремя.
По правде говоря, мне очень повезло, что хватило тех урезанных возможностей работы с shell, которые предоставила мне PHP Shell - все же это его имитация.
В основе своей PHP Shell использует функцию php - proc_open. Эта функция запускает некоторую команду и открывает потоки ввода-вывода для того чтобы ввести некоторую информацию в приложение (имитируя ручной ввод как бы на клавиатуре) и вывести результаты работы (если вы знаете что такое pipes то речь как раз про них). По сути, функция proc_open является улучшенной и дополненной версией функций exec или system. Те, правда только запускали программу, и не давали возможность взаимодействовать с ней, вы должны были сразу в параметрах командной строки указать все необходимые для работы команды данные. proc_open позволяет создать pipes связанные с вашим php-скиптом, и соответсвенно вы можете имитировать ввод данных в программу и читать результаты ее работы.
Для любителей бесплатных хостингов сразу скажу:
НЕТ, С ПОМОЩЬЮ PHP Shell ВЫ НЕ СМОЖЕТЕ ПОЛУЧИТЬ ДОСТУП К SSH
Дело в том, для бесплатных или очень дешевых хостингов привычно запускать php в режиме safe_mode. В нем отключен ряд функций, в том числе и proc_open.
НЕТ, С ПОМОЩЬЮ PHPSHELL ВЫ НЕ СМОЖЕТЕ РАБОТАТЬ С ИНТЕРАКТИВНЫМИ ПРОГРАММАМИ
Сама суть веб говорит нам, что не возможно запустить на удаленном сервере некоторую программку, которая бы продолжала работу и позволяла бы нам вводить и выводить данные в течении нескольких отдельных http-запросов.
НЕТ, ВЫ НЕ МОЖЕТЕ ПОЛУЧИТЬ ДОСТУП КО ВСЕМ ПРОГРАММАМ, ФАЙЛАМ И ПАПКАМ НА СЕРВЕРЕ
Скрипт работает либо от имени apache и тогда его возможности ограничены лишь тем, что в правах делать учетная запись apache. Либо как вариант если на хостинге используется suexec (http://en.wikipedia.org/wiki/SuEXEC), то ваши права будут совпадать с правами учетной записи от которой идет запуск php-скрипта.
Предположим, что это вас не остановило, и вы загрузили и распаковали архив на своем сервере в папку, скажем, phpshell. Если ввести в адресную строку браузера “как-то-называется-ваш-сайт/phpshell/phpshell.php” то вас попросят представиться, ввести имя и пароль – разумеется это не те учетные данные которые вы получили от вашего хостера (см. рис. 1).
Так что вам нужно настроить права доступа: кто может получить доступ к shell через эту утилиту. Для этого в файле config.php найдите секцию users и добавьте в нее имя пользователя и пароль в следующем виде:
vasyano=secretЕсли вас смущает то что пароль задан в открытом виде то воспользовавшись файлом pwhash.php вы можете узнать свертку md5 пароля и в файле config.php будет храниться именно он (см. рис. 2).
Теперь делаем повторную попытку входа и попадаем в окно, где в нижней части окна вводим команду, жмем “запуск” а затем результат ее выполнения отображается в центре окна страницы (см. рис. 3).
На этом все, может и вам phpshell как-нибудь поможет.
« Доступ к базам данных из php. Часть 1 | Мелкие хитрости в отладке кода с помощью alert. Часть 1 » |