Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

XAMPP : un serveur LAMP (Apache + MariaDB + PHP + Perl)

Le paquet open source XAMPP est un serveur LAMP complet et préconfiguré. Il contient :

  • un serveur HTTP Apache
  • une base de données MariaDB
  • PHP
  • Perl
  • et un serveur FTP : ProFTPd.

XAMPP est très pratique pour créer un serveur local de développement : il fournit au néophyte un serveur de test en quelques clics, sans avoir à choisir ni à connaître les différents services à installer.

Il est multiplateforme : il existe pour Linux, Windows et OS X

Tout est installé de façon conjointe avec les emplacements et autorisations qui vont bien.

Remarque préliminaire importante : ne demandez pas à XAMPP ce pour quoi il n'est pas fait !

XAMPP n'est pas un serveur de production mais un petit serveur local perso. Pour cet usage, il est parfait.

Pour un serveur de production définitif, mieux vaut LAMP qui s'installe via les dépôts, plus riche de possibilités et de réglages, en particulier pour la sécurité.

Cependant, le serveur XAMPP installe des valeurs sûres :

Les sites qui fonctionnent sur XAMPP fonctionneront donc sur LAMPP : il suffit de copier le répertoire et éventuellement de déplacer la base de données. A partir de là, vous pourrez mettre en place les réglages.

Vous pouvez cependant modifier XAMPP moyennant quelques “bidouilles” et une bonne connaissance de sa structure.

Pré-requis

  • Une connexion internet

Installation

Tout XAMPP tient en un seul répertoire : /opt/lampp.

Son installation est donc d'une extrême simplicité (de même que sa désinstallation = supprimer le répertoire /opt/lampp).

Sur la page https://www.apachefriends.org/fr/index.html, choisissez la version 32 ou 64 bits selon votre système d'exploitation Linux.

Modifiez les autorisations du programme d'installation et lancez-le en mode super-utilisateur :

$ cd /répertoire/de/téléchargement/
$ sudo chmod +x xampp-linux-*-installer.run
$ sudo ./xampp-linux-*-installer.run

Acceptez toutes les étapes en cliquant sur Next.

Pour la dernière fenêtre, cliquez sur Finish → le panneau de contrôle de XAMPP démarre :

Ouvrez l'onglet Manage Servers et cliquez sur Start All pour démarrer les serveurs :

Pour que Xampp se lance au démarrage, lancez dans un terminal :

$ sudo ln -s /opt/lampp/lampp /etc/init.d/lampp
$ sudo update-rc.d lampp defaults

Au redémarrage, XAMPP sera démarré.

Aliases à créer

Créez les aliases en ajoutant au fichier ~/.bash_aliases les lignes :

~/.bash_aliases
...
# Alias pour permettre sudo [un_alias]
alias sudo='sudo '
 
# Aliases pour Xampp
alias lampp='/opt/lampp/lampp'
alias ctlampp='/opt/lampp/manager-linux-x64.run'
 
# Aliases pour proftp
alias ftpasswd='/opt/lampp/bin/ftpasswd'

L'alias sudo='sudo ' permet d'utiliser les autres aliases en sudo, comme avec

$ sudo lampp start

Activez les aliases par un

$ source ~/.bashrc

Arborescence créée par l'installation

L'installation a créé l'arborescence :

$ tree /opt/lampp/ -d -L 1
/opt/lampp/
├── apache2
├── bin
├── build
├── cgi-bin
├── docs
├── error
├── etc
├── htdocs
├── icons
├── img
├── include
├── info
├── lib
├── libexec
├── licenses
├── logs
├── man
├── manual
├── modules
├── mysql
├── pear
├── php
├── phpmyadmin
├── proftpd
├── sbin
├── share
├── temp
└── var

28 directories

Configuration

Une suggestion

Pour vous simplifier la vie, créez des aliases en éditant ou créant le fichier ~/.bash_aliases pour y écrire :

~/.bash_aliases
# Alias pour permettre sudo [un_alias]
alias sudo='sudo '
 
# Aliases pour Xampp
alias lampp='/opt/lampp/lampp'
alias ctlampp='/opt/lampp/manager-linux-x64.run'
 
# Aliases pour proftp
alias ftpasswd='/opt/lampp/bin/ftpasswd'

On obtient les raccourcis suivants :

Description Raccourci Effet
lampp sudo lampp … → sudo /opt/lampp/lampp …
panneau de contrôle sudo ctlampp → sudo /opt/lampp/manager-linux-x64.run
gérer les utilisateurs de proftpd sudo ftpasswd … → sudo /opt/lampp/bin/ftpasswd …

L'alias sudo='sudo ' permet d'utiliser les autres aliases en sudo, comme avec

$ sudo lampp start

Activez les aliases par :

$ source ~/.bashrc

Accès FTP : proFTPD

XAMPP inclut proFTPD, un serveur FTP open source pour faciliter le transfert de fichiers.

Voir :

Le fichier de configuration est /opt/lampp/etc/proftpd.conf.

Fichier de la distribution

Nous choisissons de ne pas toucher au fichier principal et d'utiliser des fichiers de configuration que nous stockerons dans un répertoire /opt/lampp/etc/conf.d/ qui n’est pas affecté par les mises à jour.

Mise en place du répertoire /etc/proftpd/conf.d/

Donc :

  1. Créez les répertoires /opt/lampp/etc/conf.d/ :

    $ sudo mkdir /opt/lampp/etc/conf.d/
    $ sudo mkdir /opt/lampp/etc/proftpd/

  2. ajoutez la ligne suivante à la fin du fichier principal :
    /opt/lampp/etc/proftpd.conf
    (...)
    # Inclure les fichiers de configuration personnalisés
    Include  /opt/lampp/etc/conf.d/

    Tous les fichiers contenus dans le répertoire /etc/proftpd/conf.d/ seront prises en compte.

  3. avec les droits d'administration, placez les fichiers de configuration dans le répertoire /opt/lampp/etc/conf.d/ (basic.conf, anonymous.conf, mysql.conf, virtual.conf, etc.) :

    $ sudo cp <fichier.conf> /opt/lampp/etc/conf.d

Présentation

Supposons que vous ayez dans votre répertoire de base un script PHP simple, exemple.php, contenant le code suivant, que vous souhaitez transférer sur le serveur XAMPP.

~/exemple.php
<!-- example.php -->
<html>
 <head></head>
 <body>
   <h2><?php echo "Bonjour. Nous sommes le " . date('l'); ?>.</h2>
 </body>
</html>

Pour transférer des fichiers via proFTPD, vous devez d’abord configurer les règles d’accès FTP. Suivez ces étapes.

  1. Ouvrez un terminal.
  2. Créez un groupe ftp qui contiendra les utilisateurs autorisés à télécharger des fichiers via FTP:

    $ sudo groupadd ftp

  3. Ajoutez votre compte (moi dans cet exemple) au nouveau groupe. Ajoutez d'autres utilisateurs si nécessaire.

    $ sudo usermod -a -G ftp moi

  4. Modifiez le propriétaire et les permissions du sous-répertoire htdocs/ du répertoire d’installation de XAMPP (généralement, /opt/lampp) pour le rendre accessible en écriture au groupe ftp.

    $ cd /opt/lampp
    $ sudo chown root:ftp htdocs
    $ sudo chmod 775 htdocs

    Si vous utilisez XAMPP avec un seul utilisateur qui est seul à transférer des fichiers via FTP, vous pouvez ignorer la création d’un nouveau groupe et simplement rendre cet utilisateur propriétaire du répertoire htdocs/. Pour cela, utilisez la commande

    $ sudo chown moi:moi htdocs.
  5. Vérifiez dans le panneau de configuration de XAMPP, onglet Manage servers, que proFTPD est en cours d’exécution.

Vous pouvez maintenant transférer des fichiers sur le serveur XAMPP en procédant comme suit :

  1. Démarrez un client FTP et entrez les détails de la connexion comme ci-dessous.
    • adresse de l'hôte :
      • 127.0.0.1 si vous vous connectez au serveur à partir du même système
      • le nom d’hôte ou l’adresse IP du serveur XAMPP si vous vous connectez depuis un autre système.
    • port : 21
    • votre nom d'utilisateur et votre mot de passe Linux comme informations d'identification FTP.
      Votre client FTP se connecte maintenant au serveur dans le répertoire /opt/lampp/htdocs/, qui est la racine par défaut du serveur Web.
  2. Transférez les fichiers depuis votre ordinateur vers le serveur comme d'habitude. Si vous utilisez un client FTP graphique, vous pouvez généralement faire glisser le fichier d’un répertoire à l’autre. Si vous utilisez un client FTP de ligne de commande, vous pouvez utiliser la commande FTP PUT.
  3. Une fois le fichier transféré, il apparaît en naviguant sur http://localhost/example.php, comme indiqué ci-dessous :

Utilisateurs virtuels

Créez le répertoire :

$ sudo mkdir /opt/lampp/etc/proftpd/

éditez avec les droits d'administration le fichier /opt/lampp/etc/conf.d/global.conf pour y ajouter les directives :

/opt/lampp/etc/conf.d/global.conf
DefaultRoot ~

AuthUserFile /opt/lampp/etc/proftpd/ftpd.passwd
AuthGroupFile /opt/lampp/etc/proftpd/ftpd.group

Vérifiez l'existence de l'utilisateur www-data et de son groupe :

$ id www-data 
uid=33(www-data) gid=33(www-data) groupes=33(www-data)

Sinon, créez-le

On constate que l’identifiant du groupe www-data est 33.

Créons l'utilisateur virtuel admiweb, de home /var/www/html, avec les uid et gid de www-data en lançant les commandes (le mot de passe du compte vous sera demandé) :

$ cd /opt/lampp/etc/proftpd
$ sudo ftpasswd --passwd --name=admiweb --uid=33 --gid=33 --home=/var/www/html --shell=/bin/false
ftpasswd: creating passwd entry for user admiweb

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.

Password: 
Re-type password: 

ftpasswd: entry created

Vérifiez que l'utilisateur courant peut se connecter :

$ ftp localhost
Connected to localhost.localdomain.
220 ProFTPD 1.3.4c Server (ProFTPD) [::ffff:127.0.0.1]
Name (localhost:xxxxxxx): 
331 Password required for xxxxxxx
Password:
230 User xxxxxxx logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 root     root         3607 Feb 27  2017 applications.html
-rw-r--r--   1 root     root          177 Feb 27  2017 bitnami.css
drwxr-xr-x  21 root     root         4096 Apr  4 11:48 dashboard
-rw-r--r--   1 root     root        30894 May 11  2007 favicon.ico
drwxr-xr-x   2 root     root         4096 Apr  4 11:48 img
-rw-r--r--   1 root     root          260 Jul  9  2015 index.php
drwxr-xr-x   2 daemon   daemon       4096 Apr  4 11:48 webalizer
226 Transfer complete
ftp> bye
221 Goodbye.

De même pour admiweb :

$ ftp localhost
Connected to localhost.localdomain.
220 ProFTPD 1.3.4c Server (ProFTPD) [::ffff:127.0.0.1]
Name (localhost:xxxxxxx): admiweb
331 Password required for admiweb
Password:
230 User admiweb logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 root     root         3607 Feb 27  2017 applications.html
-rw-r--r--   1 root     root          177 Feb 27  2017 bitnami.css
drwxr-xr-x  21 root     root         4096 Apr  4 11:48 dashboard
-rw-r--r--   1 root     root        30894 May 11  2007 favicon.ico
drwxr-xr-x   2 root     root         4096 Apr  4 11:48 img
-rw-r--r--   1 root     root          260 Jul  9  2015 index.php
drwxr-xr-x   2 daemon   daemon       4096 Apr  4 11:48 webalizer
226 Transfer complete
ftp> bye
221 Goodbye.

Vous pouvez maintenant créer tous les utilisateurs nécessaires en répétant cette commande.

Configuration

La configuration de proftpd se fait dans /opt/lampp/etc/ 1).

Pour faciliter la configuration, ajouter la répertoire /opt/lampp/etc/conf.d :

$ sudo mkdir /opt/lampp/etc/conf.d

Nous y placerons nos fichiers de configuration en les appelant par des Include. Ainsi, ils ne seront pas affectés par les mises à jour.

Liste des directives : Voir http://www.proftpd.org/docs/directives/linked/by-name.html

Contextes

Contextes :

  • configuration du serveur

<Global>

<VirtualHost>

<Anonymous>

<Directory>

<Limit>

.ftpaccess

Directives utiles

Quelques directives utiles :

UseIPv6

User

Group

UseFtpUsers

RequireValidShell

DefaultRoot

umask

AuthOrder

Serveurs virtuels

Les serveurs virtuels, 2), servent plusieurs adresses ou sites sur un même ordinateur hôte. Ils sont basés sur des IP et des noms.

Les mots “démon” et “serveur” ne sont pas identiques.

  • Un “démon” est un processus de longue durée sur une machine hôte
  • Un “serveur” est un processus qui fournit un service

Un processus proftpd autonome, peut être considéré à la fois comme un “démon” et un “serveur”. Un “serveur virtuel” n'est pas un processus séparé qui semble unique aux clients distants.

Le fichier de configuration proftpd.conf comporte trois contextes serveur (ou sections) :

  • <VirtualHost>
  • <Global>,
  • et configuration du serveur.

Le contexte <VirtualHost> définit un hôte virtuel lié à une adresse IP ou un nom DNS.

  • Par exemple :
      <VirtualHost 1.2.3.4>
        ...
      </VirtualHost>

    définit un serveur virtuel à utiliser quand un client distant se connecte à l'adresse IP 1.2.3.4.

  • ou avec un nom DNS :
      <VirtualHost ftp.mydomain.com>
        ...
      </VirtualHost>

Au démarrage, proftpd résout le nom DNS fourni en son adresse IP et utilise cette adresse IP. ProFTPD crée automatiquement une directive ServerAlias pour ce nom DNS, ce qui permet de définir plusieurs sections <VirtualHost> avec le même nom DNS.

Pour utiliser le même vhost pour plusieurs noms, répertoriez ces noms avec la directive ServerAlias comme suit :

  <VirtualHost ftp.mydomain.com>
    # Utilisez cet hôte aussi pour d'autres noms
    ServerAlias ftp.mydomain.org ftp2.mydomain.com ftp.otherdomain.org
    ...
  </VirtualHost>

Exemple de Virtualhost fourni par proftpd à placer dans conf.d

section <Global>

Supposons de nombreuses sections <VirtualHost> avec la même configuration pour chaque hôte virtuel (sections <Directory> communes, les paramètres DefaultRoot, etc.) Au lieu d'inclure la même configuration plusieurs fois, on peut utiliser la section <Global> :

  <Global>
    ...
  </Global>

Le contenu d'une section <Global> s'applique à chaque configuration de serveur et à chaque <VirtualHost>.

Configuration du serveur

Le contexte “configuration serveur” s'applique à tout ce qui n'est pas dans une section <VirtualHost> ou <Global>.

Proftpd démarre même avec un fichier proftpd.conf complètement vide : essayez ! Le démon utilisera tous les paramètres par défaut, ce qui n’est généralement pas souhaitable, mais possible. Le contexte de serveur par défaut est appelé “configuration de serveur”.

Les directives de configuration de la section “configuration du serveur” ne s'appliquent pas en dehors du contexte. C’est ce à quoi sert la section <Global>.

La directive DefaultAddress spécifie l'adresse IP que l’hôte de la “configuration serveur” doit écouter.

Par défaut, chaque serveur écoute le port 21, le port standard IANA pour FTP. Pour changer le port, utilisez la directive Port. Comme mentionné ailleurs, si vous avez plusieurs sections <VirtualHost> différentes utilisant la même adresse mais des ports différents, vous devez vous assurer de laisser vide chaque numéro de Port-1. La RFC 959 spécifie que le port source pour un transfert de données actif (à lire ici) doit être L-1, L étant le port sur lequel votre serveur écoute. En outre, comme indiqué dans la documentation du port, Dans n'importe quel contexte de serveur,

  Port 0

désactive ce serveur. C'est parfois utilisé pour désactiver la “configuration serveur”.

Lorsqu'un client contacte proftpd, le serveur cherche quelle configuration utiliser dans la liste des vhosts configurés, en recherchant un vhost dont l'adresse IP correspond. Si un vhost correspond, on utilise cette configuration. Sinon, proftpd utilise la configuration qui porte la directive DefaultServer. En l'absence de directive DefaultServer et si aucune configuration correspondante ne peut être trouvée, le client reçoit un message “Aucun serveur disponible pour traiter votre demande”. DefaultServer peut indiquer qu'un <VirtualHost> est le contexte par défaut, au lieu du contexte “configuration serveur” habituel.

Il y a une dernière directive de configuration qu'un administrateur devrait connaître : SocketBindTight. Par défaut, le démon proftpd écoutera toutes les adresses sur le port 21, pour les demandes de connexion des clients distants. Parfois, l'administrateur peut souhaiter que le démon proftpd écoute uniquement les adresses IP pour lesquelles il a été configuré, et non toutes les adresses. Pour ce faire, utilisez simplement la directive de configuration SocketBindTight :

  SocketBindTight on

Ceci configure le démon pour qu'il “lie étroitement” aux adresses IP pour lesquelles il a été configuré pour écouter, plutôt qu'à toutes les adresses. Par défaut, le démon proftpd écoute toutes les adresses de la machine hôte.

Utilisation

Commandes

Avec ces aliases, voici les commandes :

  • Démarrer le serveur :

    $ sudo lampp start
    Starting XAMPP for Linux 7.3.10-0...
    XAMPP: Starting Apache...ok.
    XAMPP: Starting MySQL...ok.
    XAMPP: Starting ProFTPD...ok.

  • Redémarrer le serveur :

    $ sudo lampp restart
    Restarting XAMPP for Linux 7.3.10-0...
    XAMPP: Stopping Apache...ok.
    XAMPP: Stopping MySQL...ok.
    XAMPP: Stopping ProFTPD...ok.
    XAMPP: Starting Apache...ok.
    XAMPP: Starting MySQL...ok.
    XAMPP: Starting ProFTPD...ok.

  • Sécuriser le serveur :

    $ sudo lampp security

  • Arrêter le serveur :

    $ sudo lampp stop
    Stopping XAMPP for Linux 7.3.10-0...
    XAMPP: Stopping Apache...ok.
    XAMPP: Stopping MySQL...ok.
    XAMPP: Stopping ProFTPD...ok.

  • Liste des options possibles :

    $ sudo lampp

  • Lancer le panneau de contrôle :

    $ sudo ctlampp

Bien sur, vous pourrez toujours utiliser ces commandes avec /opt/lampp/lampp.

Test

Pour tester en ligne de commande :

$ ftp localhost
Connected to localhost.localdomain.
220 ProFTPD 1.3.4c Server (ProFTPD) [::ffff:127.0.0.1]
Name (localhost:xxxxxxx): 
331 Password required for xxxxxxx
Password:
230 User xxxxxxx logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 root     root         3607 Feb 27  2017 applications.html
-rw-r--r--   1 root     root          177 Feb 27  2017 bitnami.css
drwxr-xr-x  21 root     root         4096 Mar 21 11:19 dashboard
-rw-r--r--   1 root     root        30894 May 11  2007 favicon.ico
drwxr-xr-x   2 root     root         4096 Mar 21 11:19 img
-rw-r--r--   1 root     root          260 Jul  9  2015 index.php
drwxr-xr-x   2 daemon   daemon       4096 Mar 21 11:19 webalizer
226 Transfer complete
ftp> bye
221 Goodbye.
$ 

Désinstallation

Lancez en ligne de commande :

$ sudo rm -rf /opt/lampp

Voir aussi


Basé sur « Article » par Apachefriends.

1)
au lieu de /etc/proftpd/ pour proftpd installé isolément
2)
ou hôte virtuel, en abrégé vhost