J'ai voulu "protéger" un fichier.php en le donnant à mon utilisateur sudoer, que j'utilise pour administrer la machine.
Sans élévation de droit, il s'agit d'un simple utilisateur lambda.

Je suis étonné de voir que le fichier.php est tout de même interprété.
Est-ce normal ?


Je conclu avec un chmod 000.


         Utiliser CHMOD pour refuser au serveur Apache le droit de lire
         un fichier PHP

######################################################################################################################
# Comment interdire à Apache 2.4 d'interpréter un fichier ip.php ?              
                                     #
# Interdire l'interprétation du fichier ip.php par l'utilisateur www-data 
configuré pour apache2.                    #
# Interdire l'interprétation du fichier ip.php par l'utilisateur 
UTILISATEUR-DU-POOL-PHP-FPM configuré pour apache2. #
######################################################################################################################

# Les permissions sur les fichiers et les dossiers se définissent avec CHMOD.
# La commande chmod permet de modifier les permissions du propriétaire d'un 
fichier.
# La commande setfacl pour gérer les ACL ne permet en aucun cas de modifier les 
permissions propriétaires pour un fichier ou un dossier !

# Sachant que les ACL ne peuvent pas modifier les droits du propriétaire.
# Sachant que www-data est propriétaire des fichiers apache en temps normal.
# Sachant que www-data-fpm est le propriétaire des fichiers configuré dans la 
configuration de php-fpm du répertoire pool.d.

# Si www-data ou www-data-fpm sont propriétaires des fichiers, les ACL ne 
pourront pas leur retirer les permissions de lecture, écriture ou exécution.
# Utiliser la commande setfacl pour interdire l'interprétation du fichier 
ip.php ne fonctionnera pas sur les droits du propriétaire des fichiers.
# Les permissions du propriétaire restent prioritaires, même si les ACL sont 
configurées pour restreindre d'autres utilisateurs ou groupes.

# Les droits CHMOD 644 sont appliqués sur le fichier "ip.php" qui est donc 
lisible de tout le monde depuis le navigateur :
chmod 644 ip.php
ls -la ip.php
-rw-r--r-- 1 www-data www-data ip.php

# On vérifier si des droits ACL existent sur le fichier "ip.php" avec la 
commande getfacl.
# Aucune ACL n'est présente par défaut sur le fichier "ip.php" :
getfacl ip.php
# file: ip.php
# owner: www-data
# group: www-data
user::rw-
group::r--
other::r--

# Pour empêcher l'interprétation du fichier ip.php il faut enlever la 
permission de lecture au propriétaire du fichier avec CHMOD.
# Utiliser la commande chmod sur le fichier ip.php pour enlever la permission 
de lecture au propriétaire :
# (user::r--)(www-data) :
chmod u-r ip.php

# Attention !
# Il faut toujours redémarrer le service apache2 et php8.2-fpm après avoir 
utilisé CHMOD pour appliquer le changement de droits CHMOD :
sudo systemctl restart apache2
sudo systemctl restart php8.2-fpm

# Sans le droit propriétaire de lecture sur le fichier ip.php, le fichier 
ip.php n'est pas interprété par Apache2 depuis le navigateur !
# Le navigateur affiche le message suivant :
Access denied.

# Attention :
# Les autres droits CHMOD sont toujours présents :
ls -la ip.php
--w-r--r--

# Un simple utilisateur Linux pourra toujours afficher le résultat du fichier 
ip.php depuis le terminal :
# Le fichier ip.php est interprété et affiché par apache 2.4 :
php ip.php

# Utiliser la commande CHMOD sur le fichier ip.php pour enlever toutes les 
permissions ce qui va empêcher Apache 2.4 de lire le fichier et donc de 
l'interpréter :
chmod 000 ip.php

# Attention :
# Il faut toujours redémarrer le service apache2 et php8.2-fpm après avoir 
utilisé CHMOD pour appliquer le changement de droits CHMOD :
sudo systemctl restart apache2
sudo systemctl restart php8.2-fpm

# Avec un CHMOD 000 il n'y a aucun droit sur le fichier ip.php, le fichier 
ip.php n'est pas interprété par Apache2 depuis le navigateur !
# Le navigateur affiche le message suivant :
Access denied.

# Le message affiché dans le error.log de Apache2 confirme que le CHMOD 000 a 
permis d'interdire l'interprétation du fichier ip.php depuis le navigateur :
AH01071: Got error 'PHP message: PHP Warning:  PHP Request Startup: Failed to 
open stream: Permission denied in Unknown on line 0;
Unable to open primary script: //var/www/joomla/ip.php (Permission denied)'

# Sans aucun droit d'accès sur le fichier ip.php, le fichier ip.php ne peut 
plus être interprété par Apache2 depuis le terminal !
# Aucun message n'apparait dans les logs de PHP cli puisque les droits CHMOD 
000 refuse la lecture du fichier, il n'est donc pas possible de l'interpréter !
# Aucun utilisateur Linux ne pourra plus afficher le fichier depuis le terminal.
php ip.php
Could not open input file: ip.php

# Les deux messages sont équivalents et indiquent le même problème de 
permissions :
# Apache réussit à capturer l'erreur de permissions grâce à ses mécanismes 
intégrés :
AH01071: Got error 'PHP message: PHP Warning:  PHP Request Startup: Failed to 
open stream: Permission denied in Unknown on line 0;
Unable to open primary script: //var/www/joomla/ip.php (Permission denied)'

# PHP cli retourne le message que le fichier ne peut pas être ouvert :
Could not open input file: ip.php

# Que ce soit depuis Apache ou PHP CLI, les permissions chmod 000 bloquent tout 
accès et interprétation du fichier ip.php.
# Utiliser la commande php cli en tant que root sur le fichier ip.php permet 
toujours de l'interpréter.

#####################################################################################################
# Interdire à Apache 2.4 d'interpréter un fichier ip.php avec un CHMOD 000 sur le fichier 
"ip.php". #
# Redémarrer apache2 et php8.2-fpm pour appliquer le changement de CHMOD.       
                    #
#####################################################################################################

Répondre à