Разрешения Unix, чтение и выполнение (контекст PHP)

У меня есть php script, которому необходимо подключиться к базе данных. Учетные данные для базы данных хранятся в другом PHP скрипт.

Если я устанавливаю разрешения для файла учетных данных на 661, чтобы Public имел разрешение на выполнение, но не разрешал читать, разрешает ли этот основной script доступ к учетным данным и подключаться к БД, в то время как кто-то, у кого есть учетная запись пользователя, сервер от просмотра содержимого файла учетных данных?

Наверное, я смущен различием между чтением и исполнением. Есть ли у php script (работающий как www или что-то подобное) разрешение на чтение, чтобы включить другой PHP скрипт и использовать любой контент внутри? Или просто нужно выполнить? Разрешает ли разрешение на чтение неявное разрешение на выполнение?

Sub-Question: Если я установил все мои скрипты только для разрешения на выполнение и не прочитал, есть ли какие-то подводные камни, которые я должен ожидать? Это предполагает, что я оставлю все файлы, в которых мне нужно, чтобы явное разрешение на чтение (файлы данных) было установлено для чтения.

Ответы

Ответ 1

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

Если вы пытаетесь сделать ваши скрипты доступными для чтения на веб-сервере (скажем, вы работаете как учетная запись "www", которая принадлежит группе "www" ), а не другими пользователями в системе, вот что я (предполагается, что ваша учетная запись "myuser" ):

# Change owner to "myuser" and group to "www" for file(s) in question
chown myuser:www config.php

# 640: myuser has rw-, www has r--, world has ---
chmod 640 config.php

Если вы хотите, чтобы мир не читал какой-либо файл в каталоге "secrets", просто отключите бит выполнения:

# 750: myuser has rwx, www has r-x, world has ---
chmod 750 secrets

Если вы установите для всех своих скриптов разрешение на выполнение, но не разрешение на чтение, никто не сможет с ними ничего поделать (включая веб-сервер); -)

Ответ 2

Сценарии читаются, а не выполняются. Выполнение разрешения для скриптов сообщает загрузчику или ядру прочитать строку shebang и передать script указанному интерпретатору.