[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

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-командам, начинаете вредить и разрушать сервер экспериментировать. Самое простое применение - это работа с архивами. Вместо того, чтобы загружать множество мелких файлов с сервера к себе или обратно (как же это долго и утомительно), вы можете создать архив, загрузить его на сервер (скажи спасибо, поддержке ftp-докачки) и распаковать его там используя команду tar (linuxportal.vrn.ru/index.php?title=Основные_команды_Linux). Верен и обратный подход. Неплохой способ сэкономить немножко трафика и времени при переносе сайта с хостинга "A" на хостинг "B" это выполнить архивирование собственно документов сайта, а затем с помощью wget или ftp соединиться с удаленной машиной и начать переливать данные без промежуточного выкачивания информации на свою локальную машину. По правде говоря, благодаря FXP - классной технологии позволяющей двум ftp-серверам разговаривать напрямую - (http://ru.wikipedia.org/wiki/FXP) такая хитрость может и не пригодится - но все же. Были случаи, когда мне приходилось создавать dump или восстанавливать из dump-а огромные по размеру базы данных (несколько сотен мегабайт). Естественно, что в этом случае использовать старый добрый phpmyadmin (также являющийся частью джентльменского набора хостера) не возможно. По правде говоря, есть замечательная утилита Sypex Dumper Lite (http://sypex.net/products/dumper/), которая умеет работать с БД гораздо быстрее и стабильнее, и почти всегда она мне помогала. А когда не помогала Sypex Dumper Lite последней инстанцией был прямой доступ к функция shell на удаленной машине. Тогда я запускал mysql клиент или mysqldump и оно работало. Если сфера применения ssh для развертывания и обслуживания веб-приложений вас заинтересовала то можете почитать еще немножко тут http://www.host.ru/support/articles/unix-shell.html

Одним словом, если у вас на хостинге нет 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" то вас попросят представиться, ввести имя и пароль - разумеется это не те учетные данные которые вы получили от вашего хостера

Так что вам нужно настроить права доступа: кто может получить доступ к shell через эту утилиту. Для этого в файле config.php найдите секцию users и добавьте в нее имя пользователя и пароль в следующем виде:

vasyano=secret 

Если вас смущает то что пароль задан в открытом виде то воспользовавшись файлом pwhash.php вы можете узнать свертку md5 пароля и в файле config.php будет храниться именно он

Теперь делаем повторную попытку входа и попадаем в окно, где в нижней части окна вводим команду, жмем "запуск" а затем результат ее выполнения отображается в центре окна страницы

На этом все, может и вам phpshell как-нибудь поможет.

Автор: black zorro
Источник: http://black-zorro.jino-net.ru/mediawiki/Phpshell




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 4302 сегодня - 2

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 4147 сегодня - 3

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 3996 сегодня - 0

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 4034 сегодня - 1

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 4020 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects