Як встановити umask за замовчуванням у Apache на Debian?


14

Мені потрібні файли, створені apache2, щоб мати 002default 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 перезавантаження" або "служби apache2 перезапуск"
Jens Bradler

так, не працювали.
artfulrobot

Як створювати нові файли (WebDAV, PHP)?
Йенс Бредлер

У своєму тесті я використовую file_put_contents (). але код, який я намагаюся «виправити» за допомогою цього модуля «Менше Drupal» (який створює кешовані версії оброблених менших файлів CSS). Моя конкретна проблема полягає в тому, що я не можу запуститися drush cc allяк мій користувач, оскільки він помиляється на всіх цих файлах кешу, створених www-даними.
artfulrobot

Відповіді:


11

Щоб переконатися, що налаштування umask набуває чинності, скористайтеся простим тестом і не використовуйте для цього будь-який інший веб-додаток. Можливо, ці програми змінюють права незалежно від налаштування umask Apache.

Простий тестовий 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

Дякую! Навіть якщо це змусило мене відчути ідіот, щоб прочитати його (у мене неправильний восьмерик для групи rw) * червоніти *
artfulrobot

Ваш маленький фрагмент 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 - Дякую всьому!)

Помістіть UMask=0002у файл системного сервісного блоку Apache2, перезавантажте сервісний блок і перезапустіть 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 перезавантаження демонів
$ sudo systemctl перезапустити apache2

Debian Squeeze не використовував systemd.
живіт

Ага так, наприкінці основного питання вони кажуть Debian Squeeze. Оскільки питання було від ~ 8 років тому на сьогоднішній день, і коли я намагався вирішити проблему, поставлену в заголовку, з останньою Debian наприкінці 2019 року, це я написав. Я думаю, що більшість людей, які сьогодні шукають рішення, на відміну від восьми років тому, можуть отримати користь від мого рішення, тому я просто залишу те, що я вклав. Дякую, що вказав на це.
duplexddaann
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.