webew
Войти » Регистрация
 
Linux

Почему для выполнения скрипта PHP веб-серверу нужны именно права на чтение, а не на выполнение?

24 марта 2012, 10:30
Автор: 1234ru
И в каких случаях тогда нужны права именно на выполнение?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

rgbeast

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

В случае скрипта PHP, на самом деле запускается программа php (php.exe, /usr/bin/php), а скрипт является ее аргументом. PHP интерпретирует скрипт и выполняет команды в нем от своего имени (то есть в рамках исполнения своего кода). Если php - модуль apache, то он уже внутри apache и все скрипты выполняются внутри процесса apache - запускать что-либо не требуется.

Некоторе исключение из правила - скрипт на Perl или bash, в первой строчке которого #!/bin/sh или #!/usr/bin/perl. В этом случае, при наличии права "x" этот скрипт можно запустить напрямую ./script.pl
Тем не менее, это только формальная запись для удобства работы - скрипт не является по настоящему исполняемым файлом, а реально запускается бинарная программа perl с именем скрипта в виде аргумента. Даже если нет права "x", такой скрипт можно выполнить командой perl script.pl
24.03.2012, 16:54
Ответить

1234ru

О, про #! - ценно. Всегда было интересно, зачем это пишут.

А можно, кстати, #!/bin/php ?
То, что не убивает нас, делает нас инвалидами.
30.03.2012, 18:26
Ответить

1234ru

А вот интересно, почему чтобы просматривать каталог, недостаточно прав на чтение (r) - нужные еще и на исполнение (x).
В то же время, если дать права только на исполнение - не дает зайти вообще.
Т.е. права на чтение необходимы, но сами по себе фактически ничего не дают. Для чего тогда они нужны?
То, что не убивает нас, делает нас инвалидами.
31.03.2012, 14:01
Ответить
NO USERPIC

rgbeast

Вполне нормальный "исполняемый" файл получается

#!/usr/bin/php
<?php
echo "Hello webew!\n";
?>
31.03.2012, 14:15
Ответить
NO USERPIC

rgbeast

Твое утверждение не совсем точно. Если есть право x, то ты можешь зайти в каталог и читать файлы в нем, если знаешь их имя (и запускать программы оттуда). Но ты не можешь выполнить листинг каталога, если нет права 'r'.

$ mkdir B
$ cd B
$ echo "Hello" > file.txt
$ cd ..
$ chmod -r B
$ cd B
$ ls
ls: cannot open directory .: Permission denied
$ cat file.txt
Hello
31.03.2012, 14:19
Ответить

1234ru

Да, действительно. Я спутал возможность чтения списка файлов (листинга) и возможности чтения файлов напрямую, зная их имя.
То, что не убивает нас, делает нас инвалидами.
01.04.2012, 22:04
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2024 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: