Настройка umask пользователя Apache

Я настраиваю сервер LAMP и хотел бы установить значение umask для Apache на 002, чтобы во всех созданных Apache файлах был установлен бит разрешения записи группы (чтобы члены одной группы могли перезаписывать файлы).

Кто-нибудь знает как это сделать? Я знаю, что в Ubuntu вы можете использовать файл /etc/apache2/envvars для настройки umask, но на сервере работает CentOS.

Обновление Этот вопрос связан с другим вопросом, который я задавал некоторое время назад ( пользователи и группы Linux для сервера LAMP). Если предпочтительнее, обновите этот другой вопрос, указав, что лучше всего использовать для того, чтобы пользователь-разработчик располагал на сервере, который может редактировать файлы, созданные пользователем apache.

11 ответов

Решение

Apache наследует его umask от его родительского процесса (то есть процесса, запускающего Apache); это обычно должно быть /etc/init.d/ скрипт. Так положить umask Команда в этом сценарии.

Для CentOS и других дистрибутивов Red Hat добавьте параметр umask в /etc/sysconfig/httpd и перезапустите apache.

[root ~] $ echo "umask 002" >> /etc/sysconfig/httpd
[root ~] $ service httpd restart

Больше информации: Apache2 umask | MDLog: / сисадмин

Для систем Debian и Ubuntu вы должны аналогичным образом отредактировать /etc/apache2/envvars,

Это был первый результат в результатах поиска Google для "CentOS 7 apache umask", поэтому я поделюсь тем, что мне нужно было сделать, чтобы получить эту работу с CentOS 7.

С CentOS 7 echo "umask 002" >> /etc/sysconfig/httpd -метод не работал для меня.

Я перезаписал файл запуска systemd, создав папку /etc/systemd/system/httpd.service.d и там я создал файл umask.conf со строками:

[Service]
UMask=0007

Загрузился и у меня это сработало.

Добавление umask командовать /etc/apache2/envvars не кажется мне хорошей идеей, не только из-за имени файла (с указанием только переменных), но и на основе этого комментария, найденного в этом файле:

# 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.

Это говорит о том, что /etc/apache2/envvars может быть получен из любого скрипта, выполняющего задачи, связанные с Apache, и изменение umask этих (заранее неизвестных) скриптов довольно опасно.

С другой стороны, если идея смены маски Apache нацелена на ослабление прав доступа к файлам, созданным mod_davВы должны учитывать, что хранилище DAV считается закрытым для Apache, и разрешение другим процессам доступа к этим файлам может привести к различным нарушениям (включая повреждение).

Добавление ответа от Luoti / Spider Man для CentOS7: вместо "загрузки" после изменения можно использовать следующие команды:

systemctl daemon-reload
service httpd restart

То, что вы можете сделать, это вместо этого установить бит закрепления группы (SetGID) немного в каталоге, с которым работает ваш CGI:

chgrp mygroup dir chmod g+s dir

Когда вы делаете это, убедитесь, что (пользователь) apache находится в mygroup группа (в /etc/group), поэтому у него будут разрешения.

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

Это более безопасный подход, чем установка глобального umask для КАЖДОГО сценария cgi, который может запустить apache.

(Это как git-http-backend обычно запускается из Apache).

В Debian другое место для установки маски для Apache - это /etc/default/apache2. Просто эта строка в конце этого файла: umask 0002

Здесь это может быть полезно.

Управление правами доступа к файлам для rhel / centos

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/file-permissions-rhel8_configuring-basic-system-settings#displaying-the-umask_file-permissions-rhel8

      # ls -lrt /etc/systemd/system/httpd.service.d/umask.conf
-rw-r--r-- 1 root root 21 Feb 25 10:19 /etc/systemd/system/httpd.service.d/umask.conf

# cat /etc/systemd/system/httpd.service.d/umask.conf
[Service]
UMask=0002

Для Ubuntu есть инструмент svnwrap

  1. устанавливать sudo apt-get install subversion-tools
  2. Оберните svn и svnserve с помощью svnwrap:
    sudo ln -s /usr/bin/svnwrap /usr/local/bin/svn
    sudo ln -s /usr/bin/svnwrap /usr/local/bin/svnserve

После этого все операции svn с использованием протоколов file://, svn+ssh:// и http: // будут выполнены с помощью umask 002

Ответ Луоти работает для меня на CentOS7.

Загрузка системы или перезагрузка не требуется.

Вы можете получить это предупреждение при перезапуске службы с помощью команды

      `Warning: httpd.service changed on disk. Run 'systemctl daemon-reload' to reload units`.

Так что сначала беги systemctl daemon-reload команда тогда systemctl restart httpd

Уклоняться от "проверенного и верного пути Apache" обычно не рекомендуется. Много времени и трудного опыта ушло на выбор таких вещей.

Другие вопросы по тегам