Как мне установить 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).

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


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

Debian Squeeze не использовал systemd.
— Уомбл

Ах, да, в конце основной части вопроса они говорят: «Сжатие Debian». Поскольку этот вопрос возник примерно 8 лет назад, и когда я пытался решить проблему, поставленную в заголовке последнего выпуска Debian, выпущенного в конце 2019 года, я опубликовал это. Я думаю, что большинство людей, которые ищут решение сегодня, а не восемь лет назад, могут извлечь выгоду из моего решения, поэтому я просто оставлю то, что я вставил. Спасибо за указание на это.
— duplexddaann
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.