Gemorroj » 2009.09.26 13:30

В последнее время меня очень огорчают вопросами типа "почему скриптом не создается папка, а через фтп создается".
Решил написать небольшую заметку, по этому поводу.
На *NIX системах существует система распределения прав между пользователями.
Суть ее состоит в том, что все пользователи разделены на 3 группы. А именно: владелец, группа в которую входит владелец и все остальные (гости).
И каждому члену из этой группы права задаются отдельно. Например, права 751, 7 - права владельца, 5 - права группы владельца, 1 - права всех остальных.
Что означают эти цифры, смотрите по ссылкам в конце заметки. Я же хочу рассказать о другом.
Что такое FTP - это протокол передачи данных. Но в нашем случае под FTP подразумевается конкретно работа пользователя через этот протокол.
Так вот чтобы на сервере был доступ по FTP протоколу, должен быть запущен FTP сервер (имеется ввиду программное обеспечение) обрабатывающий данные соответствующим протоколу образом. Точно так же, как если нам нужен доступ по HTTP протоколу, запускается еще сервер, как правило Apache. В случае с FTP сервером, очень часто это - ProFTPD или Pure-FTPd.
Но сервера сами по себе не запускаются, их кто-то запускает. Так вот, тот кто их запускает, уже имеет некоторые права на сервере. И при запуске сервера, он наследует права того, кто его запускал. Это очень важный момент, из-за которого мне и приходится писать эту заметку.
Допустим, админ авторизовался под пользователем WWW и запустил HTTP сервер, затем авторизовался под пользователем HTML и запустил FTP сервер.
А теперь вернемся к правам доступа. Вы авторизуетесь по FTP протоколу под выданным вам пользователем HTML и создаете папку dir. Затем ставите на нее права 751. А теперь PHP скриптом пытаетесь переименовать ее. Но, PHP-то запущен у нас либо с правами сервера (если PHP собран как модуль Apache), либо у него свой отдельный пользователь (если PHP работает как CGI/FastCGI приложение). Не суть важно какой пользователь у PHP, важно что он отличен от пользователя FTP. Конечно, он может быть и одинаковый, но в случаях с хостингами это практически исключено.
Так вот, у PHP на эту директорию права обозначены цифрой 5, а у FTP пользователя, который создал папку, а соответственно стал ее владельцем, права 7.
По ссылкам ниже можно почитать подробнее что означают эти цифры, тут лишь скажу, что у FTP пользователь может делать с этой папкой все что угодно. А вот у PHP есть права лишь на чтение этой директории и выполнение исполняемых файлов в ней. Т.е. переименовать эту директорию, а именно такая задача у нас стояла, Вы не сможете.
То же самое касается и обратного случая, когда Вы создаете папку с помощью скрипта и пытаетесь ее переименовать через FTP протокол.

http://ru.wikipedia.org/wiki/Chmod
http://chmod.ru