J'ai le script suivant pour définir les autorisations pour le répertoire Joomla CMS:
#!/bin/bash
if [ ! -d "$1" ]; then
echo "Error: Folder does not exist or no folder given."
echo ""
exit 1
fi
# XAMPP uses daemon as default www-group for Apache.
WWWGROUP="daemon"
THEUSER=`who | awk '{print $1}'`
JOOMLADIR="$1"
chown -R $THEUSER:$WWWGROUP "$JOOMLADIR"
chmod g+s "$JOOMLADIR"
find "$JOOMLADIR" -type d -exec chmod 0755 {} \;
find "$JOOMLADIR" -type f -exec chmod 0644 {} \;
setfacl -b -k "$JOOMLADIR"
setfacl -Rm u:$THEUSER:rwX "$JOOMLADIR"
setfacl -Rm g:$WWWGROUP:rX "$JOOMLADIR"
setfacl -Rm d:u:$THEUSER:rwX "$JOOMLADIR"
setfacl -Rm d:g:$WWWGROUP:rX "$JOOMLADIR"
setfacl -m m::rwx "$JOOMLADIR"
# Some folders need to be writable by the web server.
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/components"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/language"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/manifests"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/modules"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/templates"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/components"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/images"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/language"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/libraries"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/media"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/modules"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/plugins"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/templates"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/cache"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/cache"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/logs"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/tmp"
# Some extra security for configuration.php:
setfacl -m g:$WWWGROUP:r "$JOOMLADIR/configuration.php"
setfacl -m o:0000 "$JOOMLADIR/configuration.php"
Si j’utilise ensuite ce script pour définir les autorisations pour le dossier dont j’ai la liste ci-dessous, pourquoi chaque dossier obtient-il l’autorisation en écriture pour le daemon
groupe? Au moins, il est répertorié comme tel, bien que la commande getfacl
dresse la liste des autorisations correctement.
totaal 172
drwxrwxr-x+ 11 myuser daemon 4096 okt 4 07:52 administrator
drwxrwxr-x+ 2 myuser daemon 4096 okt 4 07:52 bin
drwxrwxr-x+ 2 myuser daemon 4096 okt 4 07:52 cache
drwxrwxr-x+ 2 myuser daemon 4096 okt 4 07:52 cli
drwxrwxr-x+ 19 myuser daemon 4096 okt 4 07:52 components
-rw-rw-r--+ 1 myuser daemon 3005 okt 4 07:52 htaccess.txt
drwxrwxr-x+ 5 myuser daemon 4096 okt 4 07:52 images
drwxrwxr-x+ 2 myuser daemon 4096 okt 4 07:52 includes
-rw-rw-r--+ 1 myuser daemon 1420 okt 4 07:52 index.php
drwxrwxr-x+ 14 myuser daemon 4096 okt 4 07:52 installation
drwxrwxr-x+ 4 myuser daemon 4096 okt 4 07:52 language
drwxrwxr-x+ 5 myuser daemon 4096 okt 4 07:52 layouts
drwxrwxr-x+ 12 myuser daemon 4096 okt 4 07:52 libraries
-rw-rw-r--+ 1 myuser daemon 18092 okt 4 07:52 LICENSE.txt
drwxrwxr-x+ 27 myuser daemon 4096 okt 4 07:52 media
drwxrwxr-x+ 27 myuser daemon 4096 okt 4 07:52 modules
drwxrwxr-x+ 17 myuser daemon 4096 okt 4 07:52 plugins
-rw-rw-r--+ 1 myuser daemon 4872 okt 4 07:52 README.txt
-rw-rw-r--+ 1 myuser daemon 836 okt 4 07:52 robots.txt.dist
drwxrwxr-x+ 5 myuser daemon 4096 okt 4 07:52 templates
drwxrwxr-x+ 2 myuser daemon 4096 okt 4 07:52 tmp
-rw-rw-r--+ 1 myuser daemon 1690 okt 4 07:52 web.config.txt
Ce que j'essaie de réaliser est le suivant:
J'essaie de configurer un environnement pour développer des extensions Joomla.
J'utilise Eclipse IDE avec deux projets ouverts dans mon espace de travail:
J'utilise également l'outil de compilation Phing pour copier les fichiers de l'extension dans le répertoire d'installation du Joomla CMS afin de tester les modifications de code.
J'utilise également XAMPP, qui regroupe le serveur Web Apache (qui s'exécute en tant qu'utilisateur daemon
et sous le groupe daemon
) et sert les fichiers de /opt/lampp/htdocs
.
Dans /opt/lampp/htdocs
réside le répertoire d'installation de Joomla à /opt/lampp/htdocs/joomla
.
Le problème est lors de la suppression et de la copie des fichiers et des répertoires de l'extension vers le répertoire d'installation de Joomla. J'obtiens des erreurs d'autorisation.
Pourquoi ai-je des erreurs d'autorisation? Eh bien, c’est parce que quand , j’installe pour la première fois mon Zip (extension/composant) via le site Web de Joomla (plus tard, je veux pouvoir voir instantanément le code change en le copiant directement du projet d’extension dans le répertoire d’installation de Joomla) le serveur Web (Apache) crée le composant en tant que propriétaire daemon
et groupe daemon
.
Toutefois, je souhaite accorder des autorisations de lecture, d'écriture et d'exécution à mon propre utilisateur (myuser
) au lieu de daemon
, car je souhaite pouvoir supprimer l'ancien ensemble de fichiers et de répertoires de administrator/components/com_mycomp
et components/com_mycomp
( juste un exemple).
J'essaie de suivre un article de Joomla ici qui tente de configurer un environnement de développement pour les extensions: https://docs.joomla.org/Extension_development_using_Eclipse_and_phing
En gros, je viens de télécharger le fichier Joomla Zip, de le décompresser et de le copier dans /opt/lampp/htdocs/joomla
.
Puis je cours:
Sudo securepermissions.sh /opt/lampp/htdocs/joomla
Ensuite, il ne génère aucune erreur, à l'exception du fichier de configuration Joomla non existant, pour lequel il tente de définir des autorisations (actuellement, tentative de réinstallation, raison pour laquelle il n'existe pas encore de configuration.php
).
Alors, je lance ls -l
dans le dossier joomla
et récupère ma liste qui montre bien le masque, comme l'explique l'utilisateur @dessert (et que je ne connaissais pas auparavant).
Mais quand même, lorsque j'utilise find . -ls
sur le dossier joomla
, il affiche toujours les autorisations du groupe daemon
étant rw-
pour les fichiers et rwx
pour les répertoires, même si elles n'ont pas été définies de cette façon. en utilisant le script, autant que je sache.
Si ACL est présent, ls -l
le signale avec un +
à la fin de la colonne des permissions. De plus, il n'affiche pas les autorisations de groupe mais le masque à la place , voir cet exemple:
$ getfacl file
user::rw-
user:user:---
group::---
group:group:---
mask::rwx
other::---
$ ls -l file
-rw-rwx---+ 1 user group 0 2010-01-01 00:00 file
Source: https://wiki.ubuntuusers.de/ACL/
Outre que votre script peut être grandement simplifié, voir this pastie , testé avec shellcheck.net .