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.
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.
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
.
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.
Ajouter une umask
command à /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) .
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
Dans Debian, un autre emplacement pour configurer umask pour Apache est/etc/default/Apache2. Juste cette ligne à la fin de ce fichier: Umask 0002
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).
Pour Ubuntu, il existe un outil 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
Après cela, toutes les opérations svn utilisant les protocoles file: //, svn + ssh: // et http: // seront effectuées avec umask 002