PHP :: Определение прав доступа к файлам и папкам
При размещении файлов сайта на веб-сервере Unix разработчик сталкивается с необходимостью определения прав доступа для каждого отдельного файла или каталога. Права доступа определяют кто и что может делать с данным файлом или каталогом. Существуют три основных вида прав доступа:
- чтение содержимого файла или просмотр перечня имен файлов в каталоге;
- запись файла или создание и удаление файлов из каталога;
- запуск файлов (например, скриптов) или доступ к файлам в каталоге.
Все перечисленные виды прав назначаются одной из трех групп пользователей (отношение пользователей к той или иной группе определяется сервером в момент их подключения к нему):
- user (владелец файла) – это пользователь, который создает данный файл или папку, и затем подключается к серверу, например, по протоколу FTP под своим именем и паролем;
- group (группа, к которой принадлежит владелец файла) – это другие пользователи, которые также подключаются к серверу по протоколу FTP и пытаются получить доступ к файлам или каталогам непосредственного владельца;
- other (все остальные пользователи) – это все посетители сайта, которые заходят на него через свой браузер.
Сами права доступа обозначаются либо при помощи букв r (чтение), w (запись), x (исполнение) в формате ixxxyyyzzz , либо при помощи трехзначного числа в восьмеричной системе счисления (цифры от 0 до 7 ) в формате 0nnn . Первая группа букв или цифра устанавливают права для владельца файла, вторая – для группы, а третья – для всех остальных. Что касается первой буквы в символьном формате, то она указывает на то, что права доступа назначаются либо директории, тогда ставится буква d , либо обычному файлу, тогда ставится дефис — . Если вместо буквы указан дефис, то данный вид прав для соответствующей группы отсутствует. Например, файл с правами доступа -rwxrwxrwx или 0777 могут читать, записывать и запускать все группы пользователей, а вот директорию с правами доступа drwxr—r— или 0744 может просматривать, удалять и создавать в ней файлы, а также получать доступ к файлам только владелец. Остальным группам разрешается лишь просмотр каталога. Реальный пример отображения прав доступа к файлам на хостинге показан на рис. №1 .
Рис. №1. Пример отображения прав доступа на сервере
Нас будет интересовать числовой формат определения прав доступа к файлам и каталогам, расшифровка цифр которого представлена в таблице №2 .
Числовой формат | Символьный формат | Права доступа |
---|---|---|
0 | — | Права отсутствуют |
1 | —x | Только выполнение |
2 | -w- | Только запись |
3 | -wx | Запись и выполнение |
4 | r— | Только чтение |
5 | r-x | Чтение и выполнение |
6 | rw- | Чтение и запись |
7 | rwx | Чтение, запись, выполнение |
Таблица №2. Таблица прав доступа в цифровом формате
Теперь, когда мы получили некоторое представление о правах доступа к файлам и каталогам, продемонстрируем определение прав доступа к файлу на примере №3 .
'; //fileperms()- возвращает информацию о правах доступа в виде 10-го //числа (или false). После перевода в восьмеричное число, последние //4 цифры будут содержать сведения о правах доступа, а также //(на большинстве платформ) инф-цию о типе файла. Например, для файла //test_2.php на рис. 9.1 получим 33188 или в 8-й 100644 echo substr(decoct(fileperms('test_2.php')), -4); //Выведет 0644 echo '
'; echo '-------- chmod() --------
'; //chmod() - изменяет режим доступа к файлу и возвращает true|false chmod('test_2.php', 0777); //Разрешили всем все права chmod('test_2.php', 0744); //Владельцу все, остальным только чтение chmod('test_2.php', 0755); //Владельцу все, остальным чтение и запись ?>
Также обратите внимание на функции chown() , chgrp() , umask() . Все они находятся в «Функции для работы с файловой системой» -> «Файловая система» .
Быстрый переход к другим страницам
html.okpython.net Copyright © 2016-2023.
Права доступа к файлам
Одной из важнейших составляющих безопасности сайта явлются правильные права доступа к файлам. Думаю, что многие из Вас видели подобные права, например, «777«, «755«, «444» и другие. Иногда перед ними идёт ещё ведущий «0«, но в этой статье мы его опустим. Вот что они означают и как составляются, а также как правильно их использовать, я попытаюсь объяснить в сегодняшней статье.
Права доступа к файлам определяются 3-мя составляющими: разрешение на чтение, на запись и на выполнение. Также существует три группы пользователей: владелец файла, группа, к которой принадлежит владелец, и все другие пользователи. Вот на основании 3-х составляющих прав и групп пользователей и строятся эти числа, обозначающие права доступа к файлам.
Продолжим. Права состоят из трёх цифр. Первая цифра отвечает за права владельца файла, вторая цифра — за группу владельца, а третья цифра — за права других пользователей.
Далее. Каждая цифра отвечает за количество прав. Считается она следующим образом: за права чтения даётся 4, за право записи даётся ещё 2, за выполнение ещё 1. Получается, что максимально возможные права — это 4+2+1=7 (чтение+запись+выполнение). Если группа может читать и выполнять файл, но не может записывать, то права будут 4+1=5 (чтение+выполнение).
Чтобы стало ещё понятнее, возьмём пример: права «754«, и подробно разберём их:
- 7 — владелец файла может читать (4), записывать (2) и выполнять (1) файл.
- 5 — группа владельца может читать (4) и выполнять (1) файл.
- 4 — все остальные пользователи могут только читать (4) файл.
Многие могут спросить: «А что же с каталогами?«. Каталоги — это те же файлы, поэтому на них распространяются те же правила.
Теперь о том, как нужно выставлять права доступа к файлам на Вашем сайте:
- На все файлы поставить права «644«.
- На все директории поставить права «755«.
- На особо важные файлы (как правило, это файл config.php, в котором содержатся пароли от базы данных) необходимо поставить права «444«.
- На все директории, в которые пользователь может загружать файлы, надо ставить права 777. Например, это папка с аватарками.
И последний момент, который хотелось бы осветить — это права в системе Windows. Самое главное — это понять, что в Windows нет никаких прав доступа вообще. Они относятся только к Unix-системам. Поэтому бесполезно на каком-нибудь Denwer узнавать, какие права доступа к файлам у Вас стоят.
В этой статье мы с Вами разобрали, как составляются права доступа, а также Вы теперь знаете, какие права надо ставить у себя на сайте. А в следующей статье я разберу, как можно работать с правами доступа к файлам через функции PHP.
Создано 25.06.2011 14:26:48
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 9 ):
Как дать права доступа файлу?
Либо через FTP-клиент (например, Filezilla), либо через PHP, о чём я напишу в следующей статье.
А что если файлзила пишет «644», а fileperms возвращает «33188»?
Функция fileperms() возвращает 10-е число. А права доступа записываются в 8-й системе. Если 33188 перевести из 10-й в 8-ю систему, то получится 100 644. Вот как раз последние цифры и свидетельствуют о правах доступа. Если надо, чтобы функция fileperms() сразу возвращала 8-е число (с ведущим нулём), то надо использовать такой код: echo substr(sprintf(‘%o’, fileperms(«myfile.txt»)), -4);
ну спасибо! О sprintf() раньше не знал. Тогда и задавать права функцией chmode() тоже придется с помощью восьмеричного числа. Не очень удобно как-то(
Получается ставить вот так: 0754? (владелец может читать, выполнять, записывать файл. Группа владельца может читать, выполнять файл. Пользователь может только читать файл)
Да всё так, даже ноль в начале можно опустить и будет просто 754
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
chmod
Осуществляет попытку изменения режима доступа указанного файла на режим, переданный в параметре mode .
Список параметров
Обратите внимание, что значение параметра mode не переводится автоматически в восьмеричную систему счисления, поэтому, чтобы удостовериться в том, что режим был установлен верно, предваряйте нулем (0) значение передаваемое в параметре mode . Строки, такие как «g+w», не будут работать должным образом.
chmod ( «/somedir/somefile» , 755 ); // десятичное, скорее всего, указано неверно
chmod ( «/somedir/somefile» , «u+rwx,go+rx» ); // строка, неверный способ
chmod ( «/somedir/somefile» , 0755 ); // восьмеричное, верный способ
?>?php
Значение параметра mode состоит из трех восьмеричных чисел, определяющих уровень доступа для владельца файла, для группы, в которую входит владелец, и для других пользователей, соответственно. Число, определяющее уровень пользователя, может быть вычислено путем суммирования значений, определяющих права: 1 — доступ на выполнение, 2 — доступ на запись, 4 — доступ на чтение. Сложите эти числа для указания нужного права доступа. Более подробно о системе прав в системах Unix вы можете узнать с помощью команд ‘man 1 chmod‘ и ‘man 2 chmod‘.
// Доступ на запись и чтение для владельца, нет доступа для других
chmod ( «/somedir/somefile» , 0600 );
?php
// Доступ на запись и чтение для владельца, доступ на чтение для других
chmod ( «/somedir/somefile» , 0644 );
// Полный доступ для владельца, доступ на чтение и выполнение для других
chmod ( «/somedir/somefile» , 0755 );
// Полный доступ для владельца, доступ на чтение и выполнение для группы владельца
chmod ( «/somedir/somefile» , 0750 );
?>
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Примечания
Замечание:
Текущим пользователем является пользователь, от имени которого выполняется PHP. Возможно, что это будет не тот пользователь, под именем которого вы получаете доступ к командной оболочке или учетной записи FTP. На большинстве систем режим доступа к файлу может быть изменен только его владельцем.
Замечание: Эта функция неприменима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.
Замечание:
При включенном безопасный режим PHP проверяет имеет ли файл или директория, с которой вы работаете, такой же UID (id владельца), как и выполняемый скрипт. Кроме того, вы не можете устанавливать SUID, SGID и «липкие» (sticky) биты.
Смотрите также
- chown() — Изменяет владельца файла
- chgrp() — Изменяет группу владельцев файла
- fileperms() — Возвращает информацию о правах на файл
- stat() — Возвращает информацию о файле