Как в PHP реализуется управление правами доступа к файлам в UNIX-системах?

1. Какие функции выполняют режимы доступа 644 и 755 для файлов и папок в контексте PHP, а не операционной системы? Какие права используются по умолчанию для сайтов и PHP: администратора, группы или общие права?

2. К какой категории прав по умолчанию относится файловый менеджер в web интерфейсе?

3. Как интерпретируется атрибут "Исполнение" в контексте PHP: как запускаемое приложение Linux или как PHP-скрипт?

4. Может ли PHP считывать и выполнять файл только с атрибутом чтения, или требуется также атрибут исполнения для интерпретации?
  • 11 февраля 2024 г. 2:08
Ответы на вопрос 2
1. Режимы доступа в Unix-системах задаются с помощью трех основных типов разрешений: чтение (r), запись (w) и выполнение (x). В контексте PHP значение 644 для файла означает, что владелец файла имеет права на чтение и запись (rw-), группа и остальные пользователи имеют только права на чтение (r--). Число 755 для каталога означает, что владелец имеет все права (rwx), а группа и остальные пользователи могут читать и выполнять, но не могут записывать в директорию (r-x).

По умолчанию, когда PHP-скрипт создает файл, его права обычно определяются настройками umask на сервере, которая задает базовые права для новых файлов и каталогов. По умолчанию веб-сервер работает от имени специального пользователя (например, `www-data` в случае Apache на Debian/Ubuntu системах), и соответственно файлы и папки, которые создаются через PHP, обычно принадлежат этому пользователю.

2. Файловый менеджер в веб-интерфейсе обычно работает от имени сервера, на котором он запущен, и это указывает на то, что файлы и папки, созданные через такой интерфейс, принадлежат пользователю веб-сервера (например, `www-data`). Права по умолчанию также могут зависеть от настроек umask.

3. Атрибут "Исполнение" (x) в контексте файловой системы UNIX/Linux позволяет запустить файл как программу. В контексте PHP, если речь идет о PHP-скрипте, этот атрибут обычно не требуется, так как скрипт исполняется интерпретатором PHP, а не запускается напрямую как выполнимый файл.

4. PHP может считывать и выполнять файлы только с атрибутом чтения, т.е. PHP-скрипту не требуется атрибут исполнения, чтобы быть обработанным интерпретатором PHP. Единственное требование - интерпретатор должен иметь права на чтение этого файла. Атрибут исполнения требуется для запуска файлов как программ на уровне операционной системы (например, для shell скриптов или скомпилированных программ).
1. Все права на файлы всегда контролируются ОС, поскольку доступ к файлам происходит через вызовы системных функций. Каждый экземпляр PHP запускается от конкретного пользователя, с правами этого пользователя он и работает. Например, из cron запуск может быть от пользователя root, а через Apache от www-data. 
2. В web-интефейсе, как правило, всё доступно от имени пользователя, под которым запущен web-сервер (Nginx, Apache и т.п.).
3. Атрибут "исполняемый" означает, что данный файл можно запускать как приложение. Модуль запуска приложений проверяет тип файла и, если это не самостоятельное ELF-приложение, то ищет в начале файла строку с указанием интерпретатора (для PHP - #!/usr/bin/php ) и запускает интерпретатор, передавая ему путь к скрипту.
4. Достаточно, если запускать именно интерпретатор с указанием пути к скрипту или подгружать скрипт через include/require.
Похожие вопросы