Unix разрешения, чтение против выполнения (контекст PHP) - PullRequest
15 голосов
/ 06 января 2010

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

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

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

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

Ответы [ 2 ]

13 голосов
/ 06 января 2010

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

10 голосов
/ 06 января 2010

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

Если вы пытаетесь сделать ваши сценарии доступными для чтения веб-сервером (допустим, вы используете учетную запись «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

Если вы хотите запретить миру читать любой файл в каталоге «секретов», просто отключите бит выполнения:

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

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

...