Ответ 1
Apache наследует свой umask
от своего родительского процесса (т.е. процесс, начинающийся с Apache); это обычно должно быть /etc/init.d/
script. Поэтому поставьте команду umask
в script.
Я настраиваю LAMP-сервер и хотел бы установить параметр Apache umask на 002, чтобы все файлы, созданные Apache, установили бит разрешения для записи группы (поэтому члены одной группы могут перезаписывать файлы).
Кто-нибудь знает, как это сделать? Я знаю, что на Ubuntu вы можете использовать файл /etc/apache 2/envvars для настройки umask, но на сервере работает CentOS.
Обновление Этот вопрос связан с другим вопросом, который я задал некоторое время назад (пользователям и группам Linux для сервера LAMP). Если вы предпочитаете, пожалуйста, обновите этот другой вопрос с помощью того, что лучше всего настроить для использования пользователем разработчика на сервере, который может редактировать файлы, созданные пользователем Apache.
Apache наследует свой umask
от своего родительского процесса (т.е. процесс, начинающийся с Apache); это обычно должно быть /etc/init.d/
script. Поэтому поставьте команду umask
в script.
Для 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
может быть получен любым script, выполняющим связанные с Apache задачи, и изменение umask этих (неизвестных заранее) скриптов весьма опасно.
С другой стороны, если идея изменения umask для Apache нацелена на разрешение разрешений файлов, созданных с помощью mod_dav
, вы должны учитывать, что Репозиторий DAV считается приватным для Apache и позволяет другим процессам обращаться к этим файлам, может привести к различным проблемам (включая повреждение).
В Debian другое место для установки umask для Apache - это /etc/default/apache 2. Только эта строка в конце этого файла: umask 0002
Для Ubuntu есть инструмент svnwrap
sudo apt-get install subversion-tools
sudo ln -s /usr/bin/svnwrap /usr/local/bin/svn
sudo ln -s /usr/bin/svnwrap /usr/local/bin/svnserve
После этого все операции svn с использованием файлов://, svn + ssh://и http://протоколы будут выполняться с помощью umask 002
Добавление к ответу Luoti/Spider Man для CentOS7: вместо "загрузки" после изменения эти команды можно использовать:
systemctl daemon-reload
service httpd restart
Что вы можете сделать, так это установить бит группы липких бит (SetGID
) в каталоге, с которым работает CGI:
chgrp mygroup dir
chmod g+s dir
Убедитесь, что при выполнении этого (apache) пользователя (apache) находится в группе mygroup
(в /etc/group
), поэтому он будет иметь разрешения.
Это сделает так, чтобы любой файл, созданный в этом каталоге, принадлежал той же группе, что и каталог.
Это более безопасный подход, чем установка глобальной umask для КАЖДОГО cgi script, который может выполняться apache.
(Вот как обычно git-http-backend
запускается из Apache).
Отклонение от "проверенного и правильного пути Apache" обычно не рекомендуется. Много времени и жесткий выигравшего опыт пошел в отбор таких вещей.