Forum Webscript.Ru
Программирование => PHP => Тема начата: sergo_stavropol от 16 Декабря 2002, 03:07:25
-
PHP не выполняет команды операционной среды (Linux)
в частности, сначала обнаружил, что не сработало архивирование зааплоаденного файла
exec("gzip -c price.xls > price.gz");
а потом начал пытаться выполнить любые другие команды - тот же результат. В чем дело? что нужно настроить? у меня root-доступ к серверу.
-
а что говорит при этом? секрет? или поделишься?
-
А раньше выполнял?
-
rembo
да ничего не говорит, просто не делает ничего
gad
раньше я просто не пользовался ими
Предвижу еще один вопрос: из командной строки в самой ОС все выполняется, в скриптах - нет
-
может, попробовать прописать полный путь к каталогам, где лежат эти команды?
-
apache выпускает из домашней директории?
типа вайлик почитать в другом месте скажем /home/bin/?
-
А у тебя может safemode включен? Посмотри phpinfo();
-
круто
одинаковые ответы в одинаковой последовательности
http://phpclub.net/talk/showthread.php?s=&threadid=27851
-
safe_mode = off
функция posix_geteuid ();
вернула мне "nobody" - стало ясно, что тут собака порылась.
с другой стороны, не совсем понял, что делает эта функция - выявляет того, кто выполнил скрипт или того кто его создал
ls -l говорит, что создал его я, а не nobody
-
хотя я посмотерл phpinfo на других серверах - у всех USER/GROUP = nobody...
и еще что я заметил: все что я пробовал раньше - это команды, которые записывают файлы на сервер. Сделал
"exec ("ls"); - получилось. Следовательно, нету прав...
Права у скрипта, который содержит команды OS: -rwxr-xr-x ,
на папку в котрой он лежит: drwxr-xr-x
Мужики, если я во что-то туго втыкаюсь, то сорри - я совсем не знаю UNIX, но вот обстоятельства сложились так что нужно втыкаться. и как можно скорее.. так что если сморожу какую глупость или юуду тормозить - поймите правильно...
-
Я тоже в юниках не очень секу, но всё же: попробуй поставить права доступа 777.;)
-
не нада так ставить!
-
все, спасибо, со всем справился.
на папку в которой я делал всякие exec("gzip.."), exec("cp..") сменил owner\'a
chown Myusername.nobody /home/../folder - то есть дал группе nobody как владельцу php и запускателю Апача побольше прав на эту папку.
Права на нее сделал drwxrwxrwx (ну а по-другому ведь никак)
отсюда вытекает следующий вопрос:
если все смогут в нее писать (так как последняя группа rwx), то это же наводит на соответствующие мысли...
если бы туда писались неисполняемые файлы - это еще полбеды, но они не могут быть неисполняемыми, так как в них эти пресловутые команды OC.
то есть, юзер сможет залить туда php или cgi скрипт с какой-нибудь гадостью и выполнить его...
конечно, чтобы пользователь попал на страницу с формой для закачки файла, ему нужно будет авторизоваться, но во-первых, бывают случаи, когда авторизацию обходят :), а во -вторых, теоритечески обладатели логинов и паролей для авторизации тоже могут оказаться любителями "повзламывать что-нибудь" В этой связи я даю при закачке файлу принудительно имя price.xls, но вот недавно прочитал в хакере, что и это легко обходят: не помню о чем там шла речь, но в общем, проверку на расширение обошли кажется с помощью перлового символа "конец строки"
может, стоит тему отдельную создать по этому вопросу ?
-
а зачем на эту папку x?
хотя РНР выполнится и без х.
а у тебя что - эта папка под корнем веб-сервера?
Не приходила мысль расположить ее повыше?
-
RomikChef
мне нужно чтобы после закачки файла он (файл) попадал в директорию, доступную через веб, так как он должен скачиваться пользователями
если я положу его вне /htdocs, то никто ведь его скачать не сможет
-
а что после сжатия файл можно скопировать - это тебе в голову не приходило?
-
в принципе, наверное можно сделать так:
upload в /tmp/
потом
if ($userfile_name == "price.xls") {
exec ("cp /home/htdocs/filesfolder/price.xls");
}
главное чтобы "cp" этот скрипт выполнил
-
RomikChef
это ты имел в виду?
правда в моем случае не после сжатия его надо копировать, а после upload\'a, а потом уже когда в директорию /htdocs/filesfolder/ он лег, его gzip-нуть
ок, сделали мы так... какие-то варианты взлома у тех кто файл загружает остались? могут они под именем price.xls какую-то каку подсунуть?
-
[OFF]кстати, а почему интересно на форуме частенько таблица стилей слетает? я разными броузерами юзал - и во всех это бывало[/OFF]
-
я имел в в виду команду php - copy
В твоем случае надо сначала скопировать в
/arcfolder
там сжать
и потом скопировать в /htdocs/filesfolder/
Хотя сейчас я думаю, что можно вообще обойтись одной командой.
gzip -c $_FILES[\'userfile\'][\'tmp_name\'] > /htdocs/filesfolder/price.gz");
и все.
-
если я положу его вне /htdocs, то никто ведь его скачать не сможет
Почему? Файл можно выдавать скриптом - иди в поиск по форуму.