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

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

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

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

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

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

Если вы пытаетесь сделать ваши скрипты доступными для чтения веб-сервером (скажем, вы работаете как учетная запись «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 rx, world has --- chmod 750 secrets 

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

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