Вход для клиентовВход для клиентов О компании

Помощь » База знаний » Общие вопросы » Полезная информация для владельцев скриптов »

Права доступа к файлам и директориям в UNIX-подобных системах

Для правильной работы PHP-скриптов и обеспечения безопасности данных необходимо установить определенные права доступа к файлам и директориям с помощью команды chmod или средствами FTP-клиента либо файлового менеджера контрольной панели хостинга. Как узнать, какое значение прав доступа нужно применить для достижения оптимального результата?

Владелец и группа

В файловых системах операционных систем типа UNIX (Linux, FreeBSD и т.п.) в свойствах каждого элемента файловой системы (файла или директории) содержится информация о его владельце и группе.

Владелец файла/директории — имя пользователя операционной системы, которому «принадлежит» файл или директория.
Группа — наименование группы пользователей операционной системы, членам которой предоставлен доступ к файлу или директории.

Запомните, что у каждого файла и директории владелец и имя группы могут быть различными. Например, если FTP-подключение и веб-сервер запускаются на хостинге различными пользователями (к примеру, ftp-user и Apache), то у файлов, загруженных по FTP, владельцем будет ftp-user, а у файлов, созданных с помощью PHP-скрипта (например, распакованные во время установки WebAsyst), владельцем будет Apache.

Права доступа

Каждому файлу и директории присваивается 3-значное число, определяющее, какой доступ разрешен владельцу, членам группы и всем остальным пользователям операционной системы:

  • первая цифра означает права доступа владельца;
  • вторая цифра означает права доступа членов группы;
  • третья цифра означает права доступа остальных пользователей системы.

Каждая цифра является суммой фиксированных значений доступа:

1 (обозначается также буквой x) — выполнение. Делает файл исполняемым (программой), а для директории позволяет изменять ее содержимое (например, создавать, удалять или переименовывать файлы внутри нее).
2 (обозначается также буквой w) — перезапись. Позволяет перезаписывать содержимое файла, а для директории позволяет выполнять ее переименование.
4 (обозначается также буквой r) — чтение. Позволяет считывать содержимое файла, а для директории — считывать список имен вложенных поддиректорий и файлов.

Пример

750 = (1+2+4)(1+4)()

В этом примере владельцу разрешены выполнение, перезапись и чтение (1, 2 и 4), членам группы — только выполнение и чтение (1 и 4), а остальным пользователям операционной системы доступ запрещен.

Директории и файлы WebAsyst

Функции каждого файла и директории в файловой структуре WebAsyst различны — доступ к некоторым достаточен в режиме чтения, другие необходимо иметь возможность перезаписывать с помощью PHP-скриптов либо по FTP. Перечень директорий и файлов и достаточные для них права доступа приведены в руководстве по установке скриптов WebAsyst в разделе «Защита WebAsyst после установки».

Несколько практических задач с решениями

  1. Какие права нужно установить для файла, чтобы редактировать его по FTP?

    Это зависит от имени владельца и группы файлов/директорий, а также того, какой из пользователей входит в какую группу. Рассмотрим все это на примере.

    Дано:
    На сервере есть пользователи ftp-user и Apache и группа group, в которую входит пользователь ftp-user.
    Владелец файла — Apache, имя группы — group.
    Необходимо обеспечить возможность редактирования файла и PHP-скриптам (пользователь Apache), и FTP-клиенту (пользователь ftp-user). При этом любой другой доступ в целях безопасности должен быть запрещен.

    Решение:
    Права доступа владельца: поскольку владелец — тот же пользователь, который исполняет PHP-скрипты (в этом примере Apache), то ему нужно предоставить права чтения (4) и перезаписи (2) — для исполнения PHP-кода и перезаписи файла (например, при обновлении скриптов). Следовательно, первая цифра 2+4=6.
    Права доступа группы: FTP-соединение работает от имени пользователя ftp-user, который входит в группу файла (group), значит, членам группы нужны права на чтение и перезапись, т.е. 2+4=6.
    Права доступа остальных пользователей: поскольку все нужные права доступа уже предоставлены, больше ничего назначать не нужно, значит, оставляем 0.

    Составляем окончательное число из отдельных значений и получаем 660 и выполняем команду chmod:

    chmod 660 index.php
  2. Какие права нужно установить для директории, чтобы редактировать по FTP файлы внутри нее?

    Дано:
    Владелец директории — Apache, имя группы — group.

    Решение:
    Права доступа владельца: допустим, что владельцу (в данном случае PHP-скриптам «в лице» веб-сервера) для нормальной работы программы необходим иметь полный доступ к файлам внутри директории, следовательно, значение 1+2+4=7.
    Права доступа группы: FTP-соединение работает от имени пользователя ftp-user, который входит в группу файла (group), значит, членам группы нужны права на чтение и  выполнение (изменение содержимого директории), т.е. 1+4=5.
    Права доступа остальных пользователей: поскольку все нужные права доступа уже предоставлены, больше ничего назначать не нужно, значит, оставляем 0.

    Составляем окончательное число из отдельных значений и получаем 750 и выполняем команду chmod:

    chmod 750 published
Замечание: при изменении имени владельца, имени группы либо при удалении пользователей из группы или добавлении новых пользователей в группу файла или директории может возникнуть необходимость в изменении прав доступа в соответствии с приведенным выше описанием.
Внимание: имена пользователей, групп и информация о членстве пользователей в группах в приведенных примерах могут отличаться от реальных настроек вашего сервера. За точной информацией обратитесь к своему системному администратору.

Виртуальный хостинг

Некоторые хостинг-провайдеры накладывают ограничения на права доступа, которые разрешено назначать файлам и директориям. Попытки установить права доступа, выходящие за рамки таких ограничений, могут стать причиной возникновения ошибки сервера с кодом 500 или 403. Ознакомьтесь с соответствующими правилами хостинг-провайдера, прежде чем приступать к разграничению прав доступа. Чтобы не зависеть от ограничений виртуального хостинга, воспользуйтесь выделенным или собственным сервером для установки скриптов WebAsyst.