Настройка 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
# 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
- устанавливать
sudo apt-get install subversion-tools
- Оберните 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" обычно не рекомендуется. Много времени и трудного опыта ушло на выбор таких вещей.