Forum Webscript.Ru

Программирование => PHP => Тема начата: sergo_stavropol от 16 Декабря 2002, 03:07:25

Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 16 Декабря 2002, 03:07:25
PHP не выполняет команды операционной среды (Linux)

в частности, сначала обнаружил, что не сработало архивирование зааплоаденного файла
exec("gzip -c price.xls > price.gz");

а потом начал пытаться выполнить любые другие команды - тот же результат.  В чем дело? что нужно настроить? у меня root-доступ к серверу.
Название: PHP не выполняет команды ОС
Отправлено: rembo от 16 Декабря 2002, 06:02:52
а что говорит при этом? секрет? или поделишься?
Название: PHP не выполняет команды ОС
Отправлено: gad от 16 Декабря 2002, 06:56:43
А раньше выполнял?
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 16 Декабря 2002, 09:21:44
rembo
да ничего не говорит, просто не делает ничего

gad
раньше я просто не пользовался ими

Предвижу еще один вопрос:  из командной строки в самой ОС все выполняется, в скриптах - нет
Название: PHP не выполняет команды ОС
Отправлено: Bang от 16 Декабря 2002, 10:19:31
может, попробовать прописать полный путь к каталогам, где лежат эти команды?
Название: PHP не выполняет команды ОС
Отправлено: gad от 16 Декабря 2002, 12:32:30
apache выпускает из домашней директории?
типа вайлик почитать в другом месте  скажем /home/bin/?
Название: PHP не выполняет команды ОС
Отправлено: Tronyx от 16 Декабря 2002, 12:37:28
А у тебя может safemode включен? Посмотри phpinfo();
Название: PHP не выполняет команды ОС
Отправлено: Меняздесьдавнонет от 16 Декабря 2002, 13:03:24
круто
одинаковые ответы в одинаковой последовательности
http://phpclub.net/talk/showthread.php?s=&threadid=27851
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 16 Декабря 2002, 14:36:37
safe_mode = off

функция  posix_geteuid ();
вернула мне "nobody"  - стало  ясно, что тут собака порылась.  
с другой стороны,  не совсем понял, что делает эта функция - выявляет того, кто выполнил скрипт или того кто его создал

ls -l говорит, что создал его я, а не nobody
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 16 Декабря 2002, 15:33:28
хотя я посмотерл phpinfo на других серверах - у всех USER/GROUP = nobody...

и еще что я заметил: все что я пробовал раньше - это команды, которые записывают файлы на сервер. Сделал
"exec ("ls"); - получилось.  Следовательно, нету прав...
Права у скрипта, который содержит команды OS: -rwxr-xr-x ,
на папку в котрой он лежит: drwxr-xr-x

Мужики, если я во что-то туго втыкаюсь, то сорри - я совсем не знаю UNIX, но вот обстоятельства сложились так что нужно втыкаться. и как можно скорее.. так что если сморожу какую глупость или юуду тормозить - поймите правильно...
Название: PHP не выполняет команды ОС
Отправлено: Tronyx от 16 Декабря 2002, 17:11:09
Я тоже в юниках не очень секу, но всё же: попробуй поставить права доступа 777.;)
Название: PHP не выполняет команды ОС
Отправлено: gad от 17 Декабря 2002, 06:20:57
не нада так ставить!
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 17 Декабря 2002, 11:01:43
все, спасибо, со всем справился.
на папку в которой  я делал всякие exec("gzip.."), exec("cp..") сменил owner\'a
chown Myusername.nobody /home/../folder - то есть дал группе nobody как владельцу php и запускателю Апача побольше прав на эту папку.

Права на нее сделал drwxrwxrwx (ну а по-другому ведь никак)

отсюда вытекает следующий вопрос:  
если все смогут в нее писать (так как последняя группа rwx), то это же наводит на соответствующие мысли...  
если бы туда писались неисполняемые файлы - это еще полбеды,  но они не могут быть неисполняемыми, так как в них эти пресловутые команды OC.  

то есть, юзер сможет залить туда php или cgi скрипт  с какой-нибудь гадостью и выполнить его...

конечно, чтобы пользователь попал на страницу с формой для закачки файла,  ему нужно будет авторизоваться, но во-первых, бывают случаи, когда авторизацию обходят :), а во -вторых, теоритечески обладатели логинов и паролей для авторизации тоже могут оказаться любителями "повзламывать что-нибудь"  В этой связи я даю при закачке  файлу  принудительно имя price.xls, но вот недавно прочитал в хакере, что и это легко обходят: не помню о чем там шла речь, но в общем, проверку на расширение обошли кажется с помощью перлового символа "конец строки"

может,  стоит тему  отдельную создать по  этому вопросу ?
Название: PHP не выполняет команды ОС
Отправлено: Меняздесьдавнонет от 17 Декабря 2002, 11:48:01
а зачем на эту папку x?
хотя РНР выполнится и без х.
а у тебя что - эта папка под корнем веб-сервера?
Не приходила мысль расположить ее повыше?
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 17 Декабря 2002, 12:12:26
RomikChef

мне нужно чтобы после закачки файла он (файл) попадал в директорию, доступную через веб, так как он должен скачиваться пользователями

если я положу его вне /htdocs,  то никто ведь его скачать не сможет
Название: PHP не выполняет команды ОС
Отправлено: Меняздесьдавнонет от 17 Декабря 2002, 12:22:31
а что после сжатия файл можно скопировать - это тебе в голову не приходило?
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 17 Декабря 2002, 12:41:27
в принципе, наверное можно сделать так:

upload в /tmp/
потом

if ($userfile_name == "price.xls") {
exec ("cp  /home/htdocs/filesfolder/price.xls");
}

главное чтобы  "cp"  этот скрипт выполнил
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 17 Декабря 2002, 12:47:12
RomikChef

это ты имел в виду?

правда в моем случае не после сжатия его надо копировать, а после upload\'a, а потом уже когда в директорию /htdocs/filesfolder/ он лег, его gzip-нуть

ок, сделали мы так... какие-то варианты взлома у тех  кто файл загружает остались? могут они под именем price.xls какую-то каку подсунуть?
Название: PHP не выполняет команды ОС
Отправлено: sergo_stavropol от 17 Декабря 2002, 12:54:35
[OFF]кстати, а почему интересно на форуме частенько таблица стилей слетает? я разными броузерами юзал - и во всех это бывало[/OFF]
Название: PHP не выполняет команды ОС
Отправлено: Меняздесьдавнонет от 17 Декабря 2002, 13:16:04
я имел в в виду команду php - copy

В твоем случае надо сначала скопировать в
/arcfolder
там сжать
и потом скопировать в /htdocs/filesfolder/

Хотя сейчас я думаю, что можно вообще обойтись одной командой.
gzip -c $_FILES[\'userfile\'][\'tmp_name\'] > /htdocs/filesfolder/price.gz");

и все.
Название: PHP не выполняет команды ОС
Отправлено: Tronyx от 17 Декабря 2002, 13:35:30
Цитировать
если я положу его вне /htdocs, то никто ведь его скачать не сможет

Почему? Файл можно выдавать скриптом - иди в поиск по форуму.