Как правильно настроить права доступа в Apache2?

Здравствуйте! <br/> <br/> У меня установлен apache2, который работает от пользователя www-data и группы www-data. Также есть пользователь www-root, которому необходимо редактировать файлы без постоянного изменения прав доступа с помощью chmod -R 777... Я рассмотрел несколько вариантов, и наиболее предпочтительный - это: <br/> <br/> - Изменить группу, под которой работает apache2, на www-root, оставив пользователя www-data. Изменение пользователя может вызвать проблемы с правами на директории, такие как /var/log/apache2, а также затруднения с работой php-fpm. В таком случае, мне придется изменять пользователя для php-fpm, менять права на сокеты и так далее, чего мне бы хотелось избежать. <br/> <br/> - После изменения группы, apache2 начинает создавать все файлы и папки с владельцем www-data и группой www-root, но устанавливает права 755. Чтобы www-root мог без проблем работать с файлами, необходимо, чтобы права по умолчанию были 775. <b>Как можно настроить apache2 так, чтобы он по умолчанию устанавливал права 775 вместо 755?</b> <br/> <br/> Все рекомендации, которые я нашел в интернете, связаны с выполнением команды chmod -R 775 ..., что совершенно не подходит. Неужели нет удобного способа, чтобы apache автоматически устанавливал нужные права? <br/> <br/> Настройки через ACL не работают, поскольку права все равно устанавливаются на 755. <br/> <br/> Чат ЖПТ предложил добавить в envvars следующий код: <br/> <pre><code>&lt;IfModule mpm_prefork_module&gt;
   Umask 002
&lt;/IfModule&gt;</code></pre> <br/> Однако после этого apache не запускается, хотя он работает в режиме prefork. <br/> <br/> Как видно, после длительных попыток у меня уже начинают заканчиваться нервы. Подскажите, пожалуйста, надежное решение. Я хочу один раз настроить это на dev сервере и больше не задумываться о chown`ах и chmod`ах.
  • 24 января 2025 г. 15:14
Ответы на вопрос 2
Для того чтобы Apache устанавливал права на создаваемые файлы и директории по умолчанию как 775 вместо 755, действительно, можно изменить умаску (umask) процесса Apache. Однако, как вы уже заметили, изменения в конфигурационных файлах могут не срабатывать или приводить к ошибкам.

Вот несколько альтернативных подходов, которые могут помочь вам:

### 1. Изменение переменной umask в скриптах запуска Apache

Вы можете попробовать изменить umask в файле, который запускает Apache. Для этого нужно найти файл, который запускает ваши службы. Это может быть файл `/etc/init.d/apache2` или systemd-юнит файл `/lib/systemd/system/apache2.service`. Добавьте следующую строку:

```
UMASK=002
```

Если вы используете systemd, вам нужно будет создать или изменить конфигурационный файл `/etc/systemd/system/apache2.service.d/override.conf`, добавив следующий блок:

```ini
[Service]
UMask=002
```

После внесения изменений не забудьте перезапустить systemd:

```bash
sudo systemctl daemon-reload
sudo systemctl restart apache2
```

### 2. Использование umask в `envvars`

Если вы ранее пробовали добавлять `Umask 002` в `envvars`, убедитесь, что вы делаете это корректно. Например:

```bash
# /etc/apache2/envvars
umask 002
```

Некоторые версии Apache могут не поддерживать этот способ, но стоит проверить.

### 3. Использование ACL (Access Control Lists)

Если у вас есть возможность использовать ACL в вашей файловой системе, вы можете установить ACL для ваших директорий, чтобы новые файлы наследовали права. Например:

```bash
sudo setfacl -R -m g:www-root:rwx /путь/к/вашей/директории
sudo chmod g+s /путь/к/вашей/директории
```

Опция `g+s` для директории устанавливает бит setgid, что заставляет новые файлы и папки унаследовать группу директории.

### 4. Настройка `Directory` в конфигурации Apache

Вы можете установить права на директории в конфигурации Apache, если это не вызовет конфликтов с другими настройками. Например:

```apache
<Directory /путь/к/вашей/директории>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    <IfModule mod_unixd.c>
        Umask 002
    </IfModule>
</Directory>
```

Этот метод может не сработать в некоторых конфигурациях Apache, но стоит проверить.

### 5. Использование cron для изменения прав

Это не самый элегантный метод, но можно написать скрипт, который периодически будет изменять права на нужные файлы и запустить его через cron. Например:

```bash
*/10 * * * * chmod -R 775 /путь/к/вашей/директории
```

### Заключение

Есть несколько методов для установки нужных прав по умолчанию. Какой из них лучше всего подойдет конкретно для вашего случая, зависит от вашей конфигурации и требований. Исключение возможных конфликтов и тестирование каждого метода отдельно — хорошая практика, чтобы найти надежное решение для своих нужд.
MPM-ITK решает проблему. Спасибо Refguser , ты изменил мою жизнь :D
Похожие вопросы