Как переопределить разрешения по умолчанию для файлов, хранящихся в Apache / PHP в / tmp? - PullRequest
4 голосов
/ 18 февраля 2010

Я нахожусь на Linux, очевидно.Похоже, что PHP-скрипты работают от имени пользователя «www-data».Я также вижу, что загруженные файлы попадают в каталог по умолчанию / tmp, каждый с именем, начинающимся с «php».Все стандартно, наверное.Права доступа ко всем этим файлам: -rw ------- т.е. 600, пользователь 'www-data', группа 'www-data'.Проблема в том, что у меня есть сервер базы данных PostgresQL, работающий под пользователем 'postgres', который должен иметь возможность читать эти файлы, потому что он вставляет их содержимое в базу данных.В настоящее время это не может, очевидно.Конечно, как правило, запросы и функции базы данных работают под любым пользователем, подключающимся к базе данных (я также подключаюсь как «www-данные»), но здесь мы говорим о серверных функциях, которые должны вызываться как «postgres».,Это ограничение PostgresQL, к лучшему или к худшему.

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

Как управлять разрешениями, с которыми создаются эти файлы?Очевидно, PHP создает их сам, например, при загрузке POST-файла, но я не могу найти какие-либо параметры конфигурации.Кроме того, мой / tmp имеет права доступа «drwxrwxrwt» (777) и принадлежит пользователю «root», группа «root».

Я пытался изменить каталог загрузки с помощью «php_value upload_tmp_dir», но он не имел никакого эффектакажется - PHP все еще хранит временные файлы в /tmp.

Я НЕ хочу использовать с 'move_uploaded_file' или 'chmod', так как они пишут в файловую систему, и я хочу избежать этогокроме записи базы данных сервера базы данных.

Ответы [ 2 ]

6 голосов
/ 18 февраля 2010

Вы можете попробовать изменить настройки umask для Apache в / etc / apache2 / envvars

Я не пробовал это, но с добавлением его в мой файл envvars, это выглядело бы так:

# envvars - default environment variables for apache2ctl

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

umask 022

Насколько я знаю, это заставит Apache создавать файлы с разрешением 644. rw-r - r -

1 голос
/ 18 февраля 2010

Измените ваш скрипт на chmod() файлы после загрузки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...