Как мне установить umask по умолчанию в Apache на Debian?

14

Мне нужны файлы, созданные apache2, чтобы 002по умолчанию иметь umask , т.е. группу rw.

Я попытался поместить umask 002в / etc / apache2 / envvars, и хотя этот скрипт выполняется как часть запуска apache ( apache2ctl graceful), umask не имеет никакого эффекта. Предположительно где-то дальше в процессе запуска (например, когда пользователь понижен с rootдо www-data), есть где-то лучше поставить это.

Я читал посты о Fedora, и один предлагал добавить umask, /etc/init.d/apache2но ни один из них не применяется / не работает в Debian (Squeeze).

Вы можете помочь?

artfulrobot
источник
1
Вы должны попытаться перезапустить Apache с помощью «/etc/init.d/apache2 restart» или «service apache2 restart»
Jens Bradler
да, ни сработало.
artfulrobot
Как вы создаете новые файлы (WebDAV, PHP)?
Дженс Брэдлер
В моем тесте я использую file_put_contents (). но код, который я пытаюсь «исправить» с помощью этого модуля Drupal Less (который создает кэшированные версии обработанных файлов Less CSS). Моя конкретная проблема заключается в том, что я не могу работать drush cc allкак мой пользователь, потому что он выдает ошибки во всех этих файлах кэша, созданных www-данными.
artfulrobot

Ответы:

11

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

Простой тестовый скрипт PHP:

<?php
if ($fp = fopen(time() . '.txt', 'w')) {
  fwrite($fp, 'This is a simple test.');
  fclose($fp);
  echo "done";
} else {
  echo "error - cannot create file";
}
?>

Позаботьтесь о том, чтобы у пользователя www-data был доступ на запись в папку, в которую вы установили этот простой тестовый файл.

Чтобы запустить новый umask, проверьте, будет ли файл / etc / apache2 / envvars использоваться в вашем стартовом файле Apache /etc/init.d/apache2:

...
PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)
...

Установите ваш umask в / etc / apache2 / envvars:

...
# umask 002 to create files with 0664 and folders with 0775
umask 002

Перезагрузите ваш Apache:

service apache2 restart

Проверьте разницу:

#> ls -l *.txt
-rw-rw-r-- 1 www-data www-data  14 2012-05-01 15:56 1335880583.txt
-rw-r--r-- 1 www-data www-data  14 2012-05-01 15:55 1335880540.txt
Йенс Брэдлер
источник
Спасибо! Даже если это заставило меня почувствовать себя идиотом при чтении (у меня был неправильный восьмеричный
символ
Ваш маленький фрагмент PHP сохранил мое здравомыслие, PDO Sqlite3 Плагин Wordpress всегда будет устанавливать группу только для чтения для своего файла базы данных.
Даниэль Соколовский
2

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

Установите setidфлаг, чтобы заставить все новые файлы наследовать группу из каталога:

# chmod g+s wordpress

Сделать новые файлы rwдля группы прав доступа, напр. так что www-dataможете записывать в файлы SFTPed пользователем загрузки:

# setfacl --default --modify group::rwx wordpress 

Убедитесь, что ACL выглядит так:

# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Создайте файл, чтобы подтвердить, что он работал:

# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test
Даниэль Соколовский
источник
Не будет ли это проблематично, если приложение пытается записывать файлы с ограниченным разрешением специально?
berbt
Вовсе нет, приложение просто напишет с ограниченными разрешениями, что поначалу меня немного смутило - stackoverflow.com/questions/28454551/…
Даниэль Соколовский,
1
Я думаю, что в этой команде setfacl --default --modify group:rwx wordpressотсутствует двоеточие. Так и должно бытьsetfacl --default --modify group::rwx wordpress
Маркос
2

(Для Debian Stretch, которая использует systemd - Спасибо, womble!)

Поместите UMask=0002в файл системного модуля Apache2 systemd, перезагрузите сервисный модуль и перезапустите Apache2.

$ pwd
/etc/systemd/system/multi-user.target.wants

$ cat apache2.service
[Единица измерения]
Описание = HTTP-сервер Apache
После = network.target remote-fs.target nss-lookup.target

[Обслуживание].
,
,
,
UMASK = 0002

$ sudo systemctl daemon-reload
$ sudo systemctl перезапустить apache2
duplexddaann
источник
Debian Squeeze не использовал systemd.
Уомбл
Ах, да, в конце основной части вопроса они говорят: «Сжатие Debian». Поскольку этот вопрос возник примерно 8 лет назад, и когда я пытался решить проблему, поставленную в заголовке последнего выпуска Debian, выпущенного в конце 2019 года, я опубликовал это. Я думаю, что большинство людей, которые ищут решение сегодня, а не восемь лет назад, могут извлечь выгоду из моего решения, поэтому я просто оставлю то, что я вставил. Спасибо за указание на это.
duplexddaann