Un système d'exploitation GNU/Linux a trois types d'utilisateurs et trois type de droits distincts.
Cette page explique et présente les options les plus souvent utilisées pour des scripts et plus précisément la gestion de dossiers et fichiers de sites web sur un serveur Apache sous Linux.
Pour un complément d'information vous pouvez consulter les documentations d'ubuntu.fr.org :
- les permissions
- Les répertoires de travail d'un serveur lamp
I - La commande CHmod
Les types d'utilisateurs
- Le propriétaire du fichier (user)
- Le groupe du propriétaire du fichier (group)
- Les autres utilisateurs, ou encore le reste du monde (others)
Les types de droits
- r : droit de lecture (read)
- w : droit d'écriture (write)
- x : droit d'exécution (eXecute)
II - Correspondances des droits en binaire/octale et leurs significations
Position Binaire | Valeur octale | Droits | Signification |
---|---|---|---|
000 | 0 | - - - | Aucun droit |
001 | 1 | - -x | Exécutable |
010 | 2 | - w - | Ecriture |
011 | 3 | - w x | Ecrire et exécuter |
100 | 4 | r - - | Lire |
101 | 5 | r - x | Lire et exécuter |
110 | 6 | r w - | Lire et écrire |
111 | 7 | r w x | Lire écrire et exécuter |
Ainsi pour modifier les droits de façon octale, la meilleure façon pour être certain du résultat, est d'additionner ceux-ci.
Par exemple : changer les droits du fichier "monscript" pour que je sois (moi le propriétaire) le seul à pouvoir le modifier, que les personnes de mon groupe puissent le lire comme l'exécuter et que le reste du monde puisse uniquement l'exécuter :
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | r - x | - - x |
Position Binaire | 111 | 101 | 001 |
Valeur Octale | 7 | 5 | 1 |
Il faudra donc lancer dans la console pour modifier ces droits comme ci-dessus :
sudo chmod 751 monscript
III - Récapitulatif des différentes valeurs possibles fréquemment utilisées
644 - Lecture, écriture pour le propriétaire / Lecture pour les autres
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w - | r - - | r - - |
Position Binaire | 110 | 100 | 100 |
Valeur Octale | 6 | 4 | 4 |
666 - Lecture, écriture pour tout le monde
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w - | r w - | r w - |
Position Binaire | 110 | 110 | 110 |
Valeur Octale | 6 | 6 | 6 |
700 - Lecture, écriture, execution juste pour le propriétaire
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | - - - | - - - |
Position Binaire | 111 | 000 | 000 |
Valeur Octale | 7 | 0 | 0 |
705 - Le propriétaire à tous les droits / Le groupe aucun / Les autres lire et executer
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | - - - | r - x |
Position Binaire | 111 | 000 | 101 |
Valeur Octale | 7 | 0 | 5 |
La ligne de code à entrer en FTP (sur Filezilla) en cas de souci avec certains providers est : site chmod 705 / |
755 - Le propriétaire à tous les droits / Les autres lire et executer
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | r - x | r - x |
Position Binaire | 111 | 101 | 101 |
Valeur Octale | 7 | 5 | 5 |
764 - Tous droits pour le propriétaire / Lecture, écriture pour le groupe / Lecture seule pour les autres
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | r w - | r - - |
Position Binaire | 111 | 110 | 100 |
Valeur Octale | 7 | 6 | 4 |
774 - Tous les droits pour le propriétaire et le groupe / Lecture seule pour les autres
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | r w x | r - - |
Position Binaire | 111 | 111 | 100 |
Valeur Octale | 7 | 7 | 4 |
775 - Tous les droits pour le propriétaire et le groupe / Lecture et exécution pour les autres
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | r w x | r - x |
Position Binaire | 111 | 111 | 101 |
Valeur Octale | 7 | 7 | 5 |
777 - Tous les droits pour tous
Type d'utilisateurs | Propriétaire | Groupe | Les autres |
---|---|---|---|
Droits | r w x | r w x | r w x |
Position Binaire | 111 | 111 | 111 |
Valeur Octale | 7 | 7 | 7 |
Pour modifier les droits d'un répertoire et de ses sous répertoires, utilisez la fonction récursive -R
Exemple, pour modifier le répertoire /var/www/html/monsite avec les droits modifiés en 755, lancez :
sudo chmod -R 755 /var/www/html/monsite
IV - Afficher les droits d'un répertoire
Les droits des fichiers et des répertoires peuvent être affichés par la commande "ls -l"
Par exemple, afficher les droits des fichiers du répertoire /var/www/html/monsite :
ls -l /var/www/html/monsite
Le terminal nous retourne ainsi 9 colonnes, comme sur cet exemple en image :
Voici la signification de ces neuf colonnes :
- Colonne 1 : indique le type de fichier et les autorisations de l'utilisateur attribuées au fichier
- Colonne 2 : indique le nombre de blocs de mémoire occupés par le fichier
- Colonne 3 : représente le propriétaire ou l'utilisateur qui a créé le fichier (ici "don")
- Colonne 4 : représente le groupe auquel le propriétaire appartient (ici "don" encore)
- Colonne 5 : représente la taille du répertoire ou du fichier, calculée en octets
- Colonne 6 : indique le mois de création et de modification
- Colonne 7 : indique l'année de création et de modification
- Colonne 8 : indique l'heure de création et de modification
- Colonne 9 : représente le nom du fichier ou du répertoire donné par l'utilisateur
V - Format des droits
Le format des droits d'accès est une liste de 10 symboles.
- Le 1er symbole est soit un "-" soit un "l" soit un "d", ils indiquent s'il s'agit :
-
- d'un fichier (-)
- d'un lien (l)
- ou d'un dossier (d).
Ensuite suivent les trois groupes des trois symboles des permissions (rwx-). Par exemple :
-rw-r--r-- | signifie que c'est un fichier dont les droits sont définis 644. |
drwx------ | signifie que c'est un dossier dont les droits sont définis en 700 |
lrwxrwxrwx | signifie que c'est un lien dont les droits sont définis en 777 |
VI - L'avantage du CHown
Pour éviter des chmod 666 (ou pire encore des 777), CHown permet de modifier le propriétaire d'un fichier.
Par exemple, si vous souhaitez vous réapproprier les droits sur l'ensemble d'un dossier et que vous êtes l'utilisateur "martin", lancez dans la console :
sudo chown -R martin /chemin/vers/dossier
Puis pour récupérer les droits sur l'ensemble du dossier, lancez :
sudo chmod -R 755 /chemin/vers/dossier
En bonus : un calculateur de CHMOD en ligne.
VII - Les groupes d'utilisateurs
La notion de groupes d'utilisateurs est importante sous GNU/Linux.
Les groupes permettent d'attribuer des mêmes droits à plusieurs utilisateurs.
NB. Un utilisateur appartient à 1 ou plusieurs groupes.
Par exemple le serveur Apache est l'utilisateur www-data et il appartient au groupe du même nom www-data.
Si vous souhaitez savoir à quels groupes l'utilisateur actuel (généralement vous) appartient, la commande est :
groups
Si vous souhaitez savoir à quels groupes un utilisateur particulier appartient, ajoutez à cette commande le nom de l’utilisateur :
Par exemple pour l'utilisateur nommé bilout :
groups bilout
Pour ajouter un compte d'utilisateur existant à un groupe sans le supprimer des autres groupes auxquels il appartient, nous allons nous servir de la commande usermod (en « super-utilisateur » uniquement).
Disons que nous voulons ajouter l'utilisateur bilout au groupe www-data, la commande sera :
usermod -a -G www-data bilout
Comme vous le constatez, on utilise les options -a -G suivi du nom du groupe, puis l'utilisateur (respectez bien les espaces dans toutes les commandes que vous trouverez sur le Net).
Pour plus d'options sur la commande usermod, je vous renvoie à son manuel :
usermod -h
VIII - A propos de Joomla! et d'autres CMS sur un serveur local GNU/Linux
Une fois que vous avez créé un fichier contenant votre CMS Joomla (ici appelé : "site-joomla") vous devez modifier les permissions sur ce dossier (pour que l'installateur de Joomla! puisse y avoir accès) pour le groupe d'utilisateurs www-data.
sudo chown -Rv root:www-data /var/www/site-joomla
Puis rendre le répertoire accessible en écriture pour le groupe www-data
sudo chmod -R g+w /var/www/site-joomla
+w ajoute le droit en écriture (write), g spécifiant que ce droit doit être ajouté seulement au groupe.
Pour certaines extensions, "JCH Optimize" par exemple, il faudra également modifier certains droits, notamment :
- ceux des dossiers "image" et "cache" (en 777)
- celui du fichier /var/www/html/site-joomla/plugins/system/jch-optimize/cache/jscss.php (en 755)
pour ce faire, lancez la commande :
sudo chmod 777 /var/www/html/site-joomla/plugins/system/jch_optimize/cache
Ainsi que la commande :
sudo chmod 755 '/var/www/html/site-joomla/plugins/system/jch_optimize/cache/jscss.php'
Remplacez bien sûr dans ces 4 commandes "site-joomla" par le nom de votre dossier contenant votre Joomla!
Inspirez-vous également de ces lignes de commandes pour d'autres CMS, tels WordPress, Contao, Drupal, LifeRay, PrestaShop, Thelia, FreeGuppy, SPIP, etc...
IX - Syntaxe de CHown
chown nouveau_propriétaire:groupe mon_fichier
Exemple : "olivier" devient le nouveau propriétaire du groupe "partageur" du fichier "manuel.odt"
chown olivier:partageur manuel.odt
Modifier seulement le propriétaire sans toucher au groupe
chown nouveau_propriétaire nom_du_fichier
Exemple : "alain" devient le propriétaire du fichier "index.php"
chown alain index.php
X - Exemple de syntaxe de CHmod
Rendre le répertoire accessible en écriture du répertoire /var/www/html/monsite
sudo chmod -R g+w /var/www/html/monsite
- "-R" Applique les permissions de manière récursive (donc à tous les sous-dossiers aussi)
- "g" Affecte les permissions au groupe
- "+" Ajoute des autorisations
- "w" Donne les droits en écriture
XI - Cas pratique
Pour que l'utilisateur "olivier" reprenne ses droits sur le répertoire /media/www-dev/private/monsite (et ses sous-répertoires)
sudo chown -R olivier /media/www-dev/private/monsite
sudo chmod -R 755 /media/www-dev/private/monsite
Si vous avez activé l'affichage des messages d'erreurs PHP sur un site en développement et que les fichiers contenus dans le répertoire "/media/www-dev/private/mon-site/mon-dossier" vous en renvoient une ribambelle, ce qui est le cas lorsque les fichiers doivent avoir une autorisation en écriture (cache, compteurs de visite, etc.), voici la commande à utiliser pour les éviter :
sudo chmod -R 777 /media/www-dev/private/mon-site/mon-dossier
Ci-dessous la commande pour réattribuer les droits à toutes les images se trouvant dans un dossier :
find /chemin/vers/dossier -regex ".+\.\(jpe?g\|gif\|png\)" -exec chmod 644 {} \;
NB. En bash les parenthèses et les pipelines dans cette expression rationnelle (regex) doivent être échappées.
XII - Wordpress exemple
Prenons l'hypothèse que vous souhaitez rapatrier un site Wordpress en production sur votre serveur local Apache, sous Ubuntu par exemple, et que votre nom d'utilisateur Ubuntu soit « olivia ».
Si nous suivons toutes les explications de ce tutoriel et que vous souhaitez pouvoir éditer vos fichiers manuellement (style.css ou functions.php de votre thème enfant par exemple) sans passer en ROOT vous devrez donc :
Attention adaptez ces 4 lignes de commande avec votre nom d'utilisateur et votre chemin d'accès à votre Wordpress local.
-
Ajouter, si ce n'est déjà fait, votre nom d'utilisateur au groupe Apache (www-data) avec la commande :
usermod -a -G www-data olivia
-
Copier depuis votre FTP en production votre dossier Wordpress et en rétablir les droits au groupe « www-data » sur votre serveur local, ici copié dans le dossier /home/olivia/htdocs/mon-wordpress :
sudo chown -R www-data:www-data /home/olivia/htdocs/mon-wordpress
-
Enfin rendre ce dossier et ses sous-dossiers accessibles (avec des droits très permissifs) :
sudo chmod -R 775 /home/olivia/htdocs/mon-wordpress
775 vous permettra d’écrire et d’y accéder puisque à présent vous faîtes fait partie du groupe « www-data ».
-
Vous pouvez aussi vérifier si les droits sur le dossier « mon-wordpress » sont biens configurés, avec cette commande :
ls -l /home/olivia/htdocs/mon-wordpress
La réponse du terminal devrait afficher ceci pour les fichiers :
-rwxrwxr-x 1 www-data www-data
Et pour les dossiers :
drwxrwxr-x 2 www-data www-data ...
La 3° commande ci-dessus est exclusivement donnée pour un serveur de développement !
Pour un serveur Apache en production, préférez 755 pour les dossiers et 644 pour les fichiers.
Ainsi en production, pour attribuer des autorisations distinctes aux répertoires et aux fichiers, vous pouvez utiliser la commande "find" qui localise les fichiers ou répertoires, puis "chmod" pour définir la permission.
-type d pour les dossiers (directory) et -type f pour les fichiers (files)
Donc toujours dans notre exemple ci-dessus, les deux commandes seraient :
sudo find /home/olivia/htdocs/mon-wordpress -type d -exec chmod 755 {} \;
sudo find /home/olivia/htdocs/mon-wordpress -type f -exec chmod 644 {} \;
Et du coup, si on lance un "ls -l" pour vérifier les droits, nous aurions pour les fichiers :
-rw-r--r-- ...
Et pour les dossiers :
drwxr-xr-x ...
Si vous souhaitez de l'aide pour rapatrier (ou déplacer de serveur) un site Wordpress, tournez-vous par exemple vers le plugin "All-in-One WP Migration" ou d'autres disponibles sur le site officiel des plugins Wordpress qui vous éviteront le souci bien connu des URL's absolues de Wordpress.
XIII - Notes
Logs d'Apache
Pour accéder au logs de votre serveur Apache 2 et voir les erreurs PHP ou les accès aux fichiers, vous les trouverez sous GNU/Linux (Debian, Ubuntu, Mint...) ici :
/var/log/apache2
Commandes utiles
-
Lancer Mysql
sudo systemctl start mysql
-
Lancer le serveur Apache
sudo /etc/init.d/apache2 start
-
Arrêter Apache
sudo /etc/init.d/apache2 stop
-
Arrêter Mysql
sudo systemctl stop mysql
-
Recharger les config du serveur Apache
sudo /etc/init.d/apache2 reload
-
Forcer la prise en compte de la nouvelle configuration (Mysql doit être lancé avant)
sudo systemctl force-reload mysql
-
Relancer Apache (le service doit déjà être lancé)
sudo /etc/init.d/apache2 restart
-
Relancer Mysql (le service doit déjà être lancé)
sudo systemctl restart mysql
-
Savoir quelle version du serveur Apache est installée
apache2 -v
-
Savoir quelle version de Mysql est installée
mysql -V
-
Savoir quelle version de PHP est installée
php -v
Vérifier aussi avec "info.php" si c'est bien cette version que votre serveur utilise.
-
Le fichier « php.ini » sous Ubuntu est ici :
/etc/phpX/apache2/php.ini
Où X est le numéro de version de php.
Si vous souhaitez modifier Le fichier php.ini
gksudo gedit /etc/php5/apache2/php.ini
Par sécurité, avant vos modifications faîtes une copie "php_back.ini" de ce fichier (on ne sait jamais).
Bash / Terminal
Pour en savoir plus sur les commandes du terminal, reportez-vous au tutoriel sur Bash, le shell Unix du projet GNU.
Vous avez aimé cet article, partagez-le !
Vous devez marcher droit pour n'être pas berné