web-dev-qa-db-fra.com

Définir le umask de l'utilisateur Apache

Je suis en train de configurer un serveur LAMP et j'aimerais définir le paramètre umask d’Apache sur 002 afin que tous les fichiers créés par Apache aient le bit d’autorisation d’écriture de groupe (afin que les membres du même groupe puissent écraser les fichiers).

Est-ce que quelqu'un sait comment faire ça? Je sais que sur Ubuntu, vous pouvez utiliser le fichier/etc/Apache2/envvars pour configurer l’umask, mais le serveur exécute CentOS.

Update Cette question est liée à une autre question que j’avais posée il ya quelque temps ( Utilisateurs et groupes de Linux pour un serveur LAMP ). Si vous préférez, mettez à jour cette autre question avec la meilleure configuration à utiliser pour avoir un utilisateur développeur sur un serveur capable de modifier les fichiers créés par l'utilisateur Apache.

53
DavidWinterbottom

Apache hérite de sa umask de son processus parent (c’est-à-dire le processus qui démarre Apache) Cela devrait typiquement être le script /etc/init.d/. Mettez donc une commande umask dans ce script.

9
Martin v. Löwis

Pour CentOS et les autres distributions Red Hat, ajoutez le paramètre umask à/etc/sysconfig/httpd et redémarrez Apache.

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

Plus d'infos: Apache2 umask | MDLog:/sysadmin

Pour les systèmes Debian et Ubuntu, vous devriez également éditer /etc/Apache2/envvars.

111
Patrick Fisher

Comme il s'agissait du premier résultat dans les résultats de recherche Google pour "CentOS 7 Apache umask", je vais donc vous expliquer ce que je devais faire pour obtenir ce travail avec CentOS 7.

Avec CentOS 7, la méthode echo "umask 002" >> /etc/sysconfig/httpd ne fonctionnait pas pour moi.

J'ai écrasé le fichier de démarrage de systemd en créant un dossier /etc/systemd/system/httpd.service.d et là j'ai créé un fichier umask.conf avec des lignes:

[Service]
UMask=0007

Booted et cela a fonctionné pour moi.

20
Luoti

Ajouter une umaskcommand à /etc/Apache2/envvars ne me semble pas une bonne idée, pas seulement à cause du nom du fichier (ne mentionnant que des variables), mais aussi à partir de ce commentaire trouvé dans ce fichier:

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

Cela suggère que /etc/Apache2/envvars pourrait être obtenu par n'importe quel script effectuant des tâches liées à Apache, et modifier le umask de ces scripts (inconnu au préalable) est plutôt dangereux.

D'autre part, si vous envisagez de modifier le umask des cibles Apache en assouplissant les autorisations des fichiers créés par mod_dav, vous devez considérer que le référentiel DAV est considéré comme privé d'Apache et que d'autres processus accèdent à ces fichiers à divers problèmes (y compris la corruption) .

3
Ferenc Wágner

Ajout à la réponse de Luoti/Spider Man pour CentOS7: au lieu de "démarrer" après la modification, ces commandes peuvent être utilisées:

systemctl daemon-reload
service httpd restart
1
Erik Liljencrantz

Dans Debian, un autre emplacement pour configurer umask pour Apache est/etc/default/Apache2. Juste cette ligne à la fin de ce fichier: Umask 0002

1
Francis

Ce que vous voulez {peut} _ faire, c'est définir à la place le bit sticky du groupe (SetGID) sur le répertoire avec lequel votre CGI travaille:

chgrp mygroup dir chmod g+s dir

Marque(bien sûr lorsque vous faites cela, (utilisateur) Apache est dans le groupe mygroup (en /etc/group), de sorte qu'il aura des autorisations.

Cela fera en sorte que tout fichier créé dans ce répertoire appartiendra au même groupe que le répertoire. 

Cette approche est plus sûre que de définir un umask global pour TOUS les scripts cgi exécutés par Apache.

(C’est ainsi que git-http-backend est généralement exécuté à partir d’Apache).

1
Brad

Pour Ubuntu, il existe un outil svnwrap

  1. Installez Sudo apt-get install Subversion-tools
  2. Enveloppez svn et svnserve avec svnwrap:
    Sudo ln -s /usr/bin/svnwrap /usr/local/bin/svn
    Sudo ln -s /usr/bin/svnwrap /usr/local/bin/svnserve

Après cela, toutes les opérations svn utilisant les protocoles file: //, svn + ssh: // et http: // seront effectuées avec umask 002

0
AndreyP