Почему для выполнения скрипта 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 Ответить |
NO USERPIC
|
rgbeastВполне нормальный "исполняемый" файл получается#!/usr/bin/php
<?php echo "Hello webew!\n"; ?> |
31.03.2012, 14:15 Ответить |
![]() |
1234ruА вот интересно, почему чтобы просматривать каталог, недостаточно прав на чтение (r) - нужные еще и на исполнение (x).В то же время, если дать права только на исполнение - не дает зайти вообще. Т.е. права на чтение необходимы, но сами по себе фактически ничего не дают. Для чего тогда они нужны? То, что не убивает нас, делает нас инвалидами.
|
31.03.2012, 14:01 Ответить |
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 Ответить |