Installation de phpMyAdmin sur CentOS 6

Préambule

Il y a un peu plus de deux ans, j'écrivais ce qui reste (à l'écriture de ce billet) le contenu phare de ce blog : installation de phpMyAdmin sur CentOS 5. C'est bien simple, c'est la raison pour laquelle une grande majorité des visiteurs atterrit ici. Ca en devient presque frustrant, d'ailleurs ;-) Bref, toujours est-il que depuis juillet, CentOS 6 est (enfin) disponible , il est donc temps de remettre ce petit tutoriel au goût du jour !

Objectifs : installer et configurer un serveur de base de données MySQL avec une interface web d'administration pour pouvoir ensuite faire du développement ou installer facilement d'autres outils web utilisant ce type de base de données, comme un CMS ou un moteur de blog.

Outils à disposition : que du libre, bien entendu ! Le système d'exploitation est CentOS 6, le serveur de base de données MySQL est disponible dans les dépôts de cette distribution, ainsi que le serveur web, Apache HTTP Server. Le logiciel d'administration web est le très connu phpMyAdmin, qu'on installera (avec ses prérequis) depuis le dépôt EPEL. On supposera donc que la machine a accès à Internet (pour accéder aux dépôts).

Je ne vais pas décrire tout depuis l'installation de l'OS, mais pour s'assurer que les bases sont saines, j'ai effectué une installation ressemblant comme deux gouttes d'eau à mon billet précédent : installation minimaliste d'une CentOS 6 (et je vais peut-être me calmer un peu sur l’auto-promotion ;-) ). Parmi les paramètres importants, notons la désactivation de SELinux.

Une dernière chose avant de rentrer dans le vif du sujet : pour plus de transparence, et aussi parce que les plus intéressés par ce billet sont probablement des débutants dans le monde de GNU/Linux et des logiciels libres, j'ai choisi d'afficher autant que faire se peut les résultats des commandes. Le billet est donc assez long, mais pas complexe pour autant ! Je vous recommande cependant de lire ce billet en entier avant de taper la moindre commande sur votre machine. De toutes façons, vous utilisez une machine (virtuelle) de tests, hein ?

Installation d'Apache, PHP et de phpMyAdmin

Commençons par ajouter le dépôt EPEL à notre installation, de sorte à faciliter l'installation de toute la bande Apache, PHP, MySQL et phpMyAdmin :

[root@crashtest ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
Récupération de http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
attention: /var/tmp/rpm-tmp.c1BYty: Entête V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Préparation...                                                          (100%)
1:epel-release                                                         (100%)

Ensuite, c'est assez simple, grâce au jeu des dépendances, nous installons phpMyAdmin :

[root@crashtest ~]# yum install phpmyadmin
Loaded plugins: fastestmirror
Determining fastest mirrors

epel/metalink                                            |  12 kB     00:00     
 * epel: mirrors.ircam.fr

base                                                     | 3.7 kB     00:00     
base/primary_db                                          | 4.2 MB     00:00     

epel                                                     | 4.3 kB     00:00     
epel/primary_db                                          | 3.9 MB     00:15     

extras                                                   |  951 B     00:00     
extras/primary                                           |  203 B     00:00     

updates                                                  | 3.5 kB     00:00     
updates/primary_db                                       | 3.3 MB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package phpMyAdmin.noarch 0:3.4.3.1-1.el6 set to be updated
--> Processing Dependency: php-gd >= 5.2.0 for package: phpMyAdmin-3.4.3.1-1.el6.noarch
--> Processing Dependency: php-mbstring >= 5.2.0 for package: phpMyAdmin-3.4.3.1-1.el6.noarch
--> Processing Dependency: php-mysql >= 5.2.0 for package: phpMyAdmin-3.4.3.1-1.el6.noarch
--> Processing Dependency: php >= 5.2.0 for package: phpMyAdmin-3.4.3.1-1.el6.noarch
--> Processing Dependency: php-mcrypt >= 5.2.0 for package: phpMyAdmin-3.4.3.1-1.el6.noarch
--> Processing Dependency: httpd for package: phpMyAdmin-3.4.3.1-1.el6.noarch
--> Running transaction check
---> Package httpd.x86_64 0:2.2.15-5.el6.centos set to be updated
--> Processing Dependency: httpd-tools = 2.2.15-5.el6.centos for package: httpd-2.2.15-5.el6.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.2.15-5.el6.centos.x86_64
--> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-5.el6.centos.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.2.15-5.el6.centos.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.2.15-5.el6.centos.x86_64
---> Package php.x86_64 0:5.3.2-6.el6_0.1 set to be updated
--> Processing Dependency: php-cli = 5.3.2-6.el6_0.1 for package: php-5.3.2-6.el6_0.1.x86_64
--> Processing Dependency: php-common = 5.3.2-6.el6_0.1 for package: php-5.3.2-6.el6_0.1.x86_64
---> Package php-gd.x86_64 0:5.3.2-6.el6_0.1 set to be updated
--> Processing Dependency: libpng12.so.0(PNG12_0)(64bit) for package: php-gd-5.3.2-6.el6_0.1.x86_64
--> Processing Dependency: libpng12.so.0()(64bit) for package: php-gd-5.3.2-6.el6_0.1.x86_64
--> Processing Dependency: libjpeg.so.62()(64bit) for package: php-gd-5.3.2-6.el6_0.1.x86_64
--> Processing Dependency: libXpm.so.4()(64bit) for package: php-gd-5.3.2-6.el6_0.1.x86_64
--> Processing Dependency: libfreetype.so.6()(64bit) for package: php-gd-5.3.2-6.el6_0.1.x86_64
--> Processing Dependency: libX11.so.6()(64bit) for package: php-gd-5.3.2-6.el6_0.1.x86_64
---> Package php-mbstring.x86_64 0:5.3.2-6.el6_0.1 set to be updated
---> Package php-mcrypt.x86_64 0:5.3.2-3.el6 set to be updated
--> Processing Dependency: libmcrypt.so.4()(64bit) for package: php-mcrypt-5.3.2-3.el6.x86_64
---> Package php-mysql.x86_64 0:5.3.2-6.el6_0.1 set to be updated
--> Processing Dependency: php-pdo for package: php-mysql-5.3.2-6.el6_0.1.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.3.9-3.el6_0.1 set to be updated
---> Package apr-util.x86_64 0:1.3.9-3.el6_0.1 set to be updated
---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 set to be updated
---> Package freetype.x86_64 0:2.3.11-6.el6_0.2 set to be updated
---> Package httpd-tools.x86_64 0:2.2.15-5.el6.centos set to be updated
---> Package libX11.x86_64 0:1.3-2.el6 set to be updated
--> Processing Dependency: libX11-common = 1.3-2.el6 for package: libX11-1.3-2.el6.x86_64
--> Processing Dependency: libxcb.so.1()(64bit) for package: libX11-1.3-2.el6.x86_64
---> Package libXpm.x86_64 0:3.5.8-2.el6 set to be updated
---> Package libjpeg.x86_64 0:6b-46.el6 set to be updated
---> Package libmcrypt.x86_64 0:2.5.8-9.el6 set to be updated
---> Package libpng.x86_64 2:1.2.44-1.el6 set to be updated
---> Package mailcap.noarch 0:2.1.31-1.1.el6 set to be updated
---> Package php-cli.x86_64 0:5.3.2-6.el6_0.1 set to be updated
---> Package php-common.x86_64 0:5.3.2-6.el6_0.1 set to be updated
---> Package php-pdo.x86_64 0:5.3.2-6.el6_0.1 set to be updated
--> Running transaction check
---> Package libX11-common.noarch 0:1.3-2.el6 set to be updated
---> Package libxcb.x86_64 0:1.5-1.el6 set to be updated
--> Processing Dependency: libXau.so.6()(64bit) for package: libxcb-1.5-1.el6.x86_64
--> Running transaction check
---> Package libXau.x86_64 0:1.0.5-1.el6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch         Version                   Repository     Size
================================================================================
Installing:
 phpMyAdmin          noarch       3.4.3.1-1.el6             epel          4.4 M
Installing for dependencies:
 apr                 x86_64       1.3.9-3.el6_0.1           updates       124 k
 apr-util            x86_64       1.3.9-3.el6_0.1           updates        87 k
 apr-util-ldap       x86_64       1.3.9-3.el6_0.1           updates        15 k
 freetype            x86_64       2.3.11-6.el6_0.2          updates       359 k
 httpd               x86_64       2.2.15-5.el6.centos       base          811 k
 httpd-tools         x86_64       2.2.15-5.el6.centos       base           68 k
 libX11              x86_64       1.3-2.el6                 base          582 k
 libX11-common       noarch       1.3-2.el6                 base          188 k
 libXau              x86_64       1.0.5-1.el6               base           22 k
 libXpm              x86_64       3.5.8-2.el6               base           59 k
 libjpeg             x86_64       6b-46.el6                 base          134 k
 libmcrypt           x86_64       2.5.8-9.el6               epel           96 k
 libpng              x86_64       2:1.2.44-1.el6            base          180 k
 libxcb              x86_64       1.5-1.el6                 base          100 k
 mailcap             noarch       2.1.31-1.1.el6            base           27 k
 php                 x86_64       5.3.2-6.el6_0.1           updates       1.1 M
 php-cli             x86_64       5.3.2-6.el6_0.1           updates       2.2 M
 php-common          x86_64       5.3.2-6.el6_0.1           updates       516 k
 php-gd              x86_64       5.3.2-6.el6_0.1           updates       103 k
 php-mbstring        x86_64       5.3.2-6.el6_0.1           updates       504 k
 php-mcrypt          x86_64       5.3.2-3.el6               epel           16 k
 php-mysql           x86_64       5.3.2-6.el6_0.1           updates        75 k
 php-pdo             x86_64       5.3.2-6.el6_0.1           updates        72 k

Transaction Summary
================================================================================
Install      24 Package(s)
Upgrade       0 Package(s)

Total download size: 12 M
Installed size: 42 M
Is this ok [y/N]:

Comme on peut le voir, de nombreux autres logiciels viennent s'installer car phpMyAdmin en a besoin pour fonctionner, comme PHP et Apache HTTPD Server (paquets httpd et apr-*). Appuyons sur la touche y de notre clavier :

Is this ok [y/N]: y
Downloading Packages:

(1/24): apr-1.3.9-3.el6_0.1.x86_64.rpm                   | 124 kB     00:00     

(2/24): apr-util-1.3.9-3.el6_0.1.x86_64.rpm              |  87 kB     00:00     

(3/24): apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm         |  15 kB     00:00     

(4/24): freetype-2.3.11-6.el6_0.2.x86_64.rpm             | 359 kB     00:00     

(5/24): httpd-2.2.15-5.el6.centos.x86_64.rpm             | 811 kB     00:00     

(6/24): httpd-tools-2.2.15-5.el6.centos.x86_64.rpm       |  68 kB     00:00     

(7/24): libX11-1.3-2.el6.x86_64.rpm                      | 582 kB     00:00     

(8/24): libX11-common-1.3-2.el6.noarch.rpm               | 188 kB     00:00     

(9/24): libXau-1.0.5-1.el6.x86_64.rpm                    |  22 kB     00:00     

(10/24): libXpm-3.5.8-2.el6.x86_64.rpm                   |  59 kB     00:00     

(11/24): libjpeg-6b-46.el6.x86_64.rpm                    | 134 kB     00:00

(12/24): libmcrypt-2.5.8-9.el6.x86_64.rpm                |  96 kB     00:00     

(13/24): libpng-1.2.44-1.el6.x86_64.rpm                  | 180 kB     00:00     

(14/24): libxcb-1.5-1.el6.x86_64.rpm                     | 100 kB     00:00     

(15/24): mailcap-2.1.31-1.1.el6.noarch.rpm               |  27 kB     00:00     

(16/24): php-5.3.2-6.el6_0.1.x86_64.rpm                  | 1.1 MB     00:00     

(17/24): php-cli-5.3.2-6.el6_0.1.x86_64.rpm              | 2.2 MB     00:00     

(18/24): php-common-5.3.2-6.el6_0.1.x86_64.rpm           | 516 kB     00:00     

(19/24): php-gd-5.3.2-6.el6_0.1.x86_64.rpm               | 103 kB     00:00     

(20/24): php-mbstring-5.3.2-6.el6_0.1.x86_64.rpm         | 504 kB     00:00     

(21/24): php-mcrypt-5.3.2-3.el6.x86_64.rpm               |  16 kB     00:00     

(22/24): php-mysql-5.3.2-6.el6_0.1.x86_64.rpm            |  75 kB     00:00     

(23/24): php-pdo-5.3.2-6.el6_0.1.x86_64.rpm              |  72 kB     00:00     

(24/24): phpMyAdmin-3.4.3.1-1.el6.noarch.rpm             | 4.4 MB     00:18     
--------------------------------------------------------------------------------
Total                                           574 kB/s |  12 MB     00:20     
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY

epel/gpgkey                                              | 3.2 kB     00:00 ... 
Importing GPG key 0x0608B895 "EPEL (6) <epel@fedoraproject.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Is this ok [y/N]: 

Autre interrogation intéressante : vous aurez remarqué que tout se déroule grâce à yum, et que nous avons installé un dépôt supplémentaire. Ce dépôt s'identifie via une clé GPG qu'il nous faut importer lors de sa première utilisation. Appuyons-donc sur y et continuons :

Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction

  Installing     : php-common-5.3.2-6.el6_0.1.x86_64                       1/24 

  Installing     : apr-1.3.9-3.el6_0.1.x86_64                              2/24 

  Installing     : apr-util-1.3.9-3.el6_0.1.x86_64                         3/24 

  Installing     : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                    4/24 

  Installing     : httpd-tools-2.2.15-5.el6.centos.x86_64                  5/24 

  Installing     : php-pdo-5.3.2-6.el6_0.1.x86_64                          6/24 

  Installing     : php-mysql-5.3.2-6.el6_0.1.x86_64                        7/24 

  Installing     : php-cli-5.3.2-6.el6_0.1.x86_64                          8/24 

  Installing     : php-mbstring-5.3.2-6.el6_0.1.x86_64                     9/24 

  Installing     : 2:libpng-1.2.44-1.el6.x86_64                           10/24 

  Installing     : freetype-2.3.11-6.el6_0.2.x86_64                       11/24 

  Installing     : libjpeg-6b-46.el6.x86_64                               12/24 

  Installing     : libmcrypt-2.5.8-9.el6.x86_64                           13/24 

  Installing     : libXau-1.0.5-1.el6.x86_64                              14/24 

  Installing     : libxcb-1.5-1.el6.x86_64                                15/24 

  Installing     : mailcap-2.1.31-1.1.el6.noarch                          16/24 

  Installing     : httpd-2.2.15-5.el6.centos.x86_64                       17/24 

  Installing     : php-5.3.2-6.el6_0.1.x86_64                             18/24 

  Installing     : php-mcrypt-5.3.2-3.el6.x86_64                          19/24 

  Installing     : libX11-common-1.3-2.el6.noarch                         20/24 

  Installing     : libX11-1.3-2.el6.x86_64                                21/24 

  Installing     : libXpm-3.5.8-2.el6.x86_64                              22/24 

  Installing     : php-gd-5.3.2-6.el6_0.1.x86_64                          23/24 

  Installing     : phpMyAdmin-3.4.3.1-1.el6.noarch                        24/24 

Installed:
  phpMyAdmin.noarch 0:3.4.3.1-1.el6                                             

Dependency Installed:
  apr.x86_64 0:1.3.9-3.el6_0.1                                                  
  apr-util.x86_64 0:1.3.9-3.el6_0.1                                             
  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1                                        
  freetype.x86_64 0:2.3.11-6.el6_0.2                                            
  httpd.x86_64 0:2.2.15-5.el6.centos                                            
  httpd-tools.x86_64 0:2.2.15-5.el6.centos                                      
  libX11.x86_64 0:1.3-2.el6                                                     
  libX11-common.noarch 0:1.3-2.el6                                              
  libXau.x86_64 0:1.0.5-1.el6                                                   
  libXpm.x86_64 0:3.5.8-2.el6                                                   
  libjpeg.x86_64 0:6b-46.el6                                                    
  libmcrypt.x86_64 0:2.5.8-9.el6                                                
  libpng.x86_64 2:1.2.44-1.el6                                                  
  libxcb.x86_64 0:1.5-1.el6                                                     
  mailcap.noarch 0:2.1.31-1.1.el6                                               
  php.x86_64 0:5.3.2-6.el6_0.1                                                  
  php-cli.x86_64 0:5.3.2-6.el6_0.1                                              
  php-common.x86_64 0:5.3.2-6.el6_0.1                                           
  php-gd.x86_64 0:5.3.2-6.el6_0.1                                               
  php-mbstring.x86_64 0:5.3.2-6.el6_0.1                                         
  php-mcrypt.x86_64 0:5.3.2-3.el6                                               
  php-mysql.x86_64 0:5.3.2-6.el6_0.1                                            
  php-pdo.x86_64 0:5.3.2-6.el6_0.1                                              

Complete!

Pensons à activer Apache au démarrage de la machine :

[root@crashtest ~]# chkconfig --list httpd
httpd           0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt
[root@crashtest ~]# chkconfig httpd on
[root@crashtest ~]# chkconfig --list httpd
httpd           0:arrêt 1:arrêt 2:marche        3:marche        4:marche        5:marche        6:arrêt

Vous croyez que c'est fini ? Pourtant ce n'est que le début : nous n'avons toujours pas installé MySQL et il faut encore configurer le tout.

Installation et configuration de MySQL

Rien de très compliqué :

[root@crashtest ~]# yum install mysql-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirrors.ircam.fr
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mysql-server.x86_64 0:5.1.52-1.el6_0.1 set to be updated
--> Processing Dependency: mysql = 5.1.52-1.el6_0.1 for package: mysql-server-5.1.52-1.el6_0.1.x86_64
--> Processing Dependency: perl-DBI for package: mysql-server-5.1.52-1.el6_0.1.x86_64
--> Processing Dependency: perl-DBD-MySQL for package: mysql-server-5.1.52-1.el6_0.1.x86_64
--> Processing Dependency: perl(DBI) for package: mysql-server-5.1.52-1.el6_0.1.x86_64
--> Running transaction check
---> Package mysql.x86_64 0:5.1.52-1.el6_0.1 set to be updated
---> Package perl-DBD-MySQL.x86_64 0:4.013-3.el6 set to be updated
---> Package perl-DBI.x86_64 0:1.609-4.el6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package              Arch         Version                  Repository     Size
================================================================================
Installing:
 mysql-server         x86_64       5.1.52-1.el6_0.1         updates       8.1 M
Installing for dependencies:
 mysql                x86_64       5.1.52-1.el6_0.1         updates       889 k
 perl-DBD-MySQL       x86_64       4.013-3.el6              base          134 k
 perl-DBI             x86_64       1.609-4.el6              base          705 k

Transaction Summary
================================================================================
Install       4 Package(s)
Upgrade       0 Package(s)

Total download size: 9.8 M
Installed size: 28 M
Is this ok [y/N]:

Là encore, on nous demande une validation avant d'installer les logiciels.

Is this ok [y/N]: y
Downloading Packages:

(1/4): mysql-5.1.52-1.el6_0.1.x86_64.rpm                 | 889 kB     00:00     

(2/4): mysql-server-5.1.52-1.el6_0.1.x86_64.rpm          | 8.1 MB     00:00     

(3/4): perl-DBD-MySQL-4.013-3.el6.x86_64.rpm             | 134 kB     00:00     

(4/4): perl-DBI-1.609-4.el6.x86_64.rpm                   | 705 kB     00:00     
--------------------------------------------------------------------------------
Total                                           8.4 MB/s | 9.8 MB     00:01     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction

  Installing     : perl-DBI-1.609-4.el6.x86_64                              1/4 

  Installing     : perl-DBD-MySQL-4.013-3.el6.x86_64                        2/4 

  Installing     : mysql-5.1.52-1.el6_0.1.x86_64                            3/4 

  Installing     : mysql-server-5.1.52-1.el6_0.1.x86_64                     4/4 

Installed:
  mysql-server.x86_64 0:5.1.52-1.el6_0.1                                        

Dependency Installed:
  mysql.x86_64 0:5.1.52-1.el6_0.1      perl-DBD-MySQL.x86_64 0:4.013-3.el6     
  perl-DBI.x86_64 0:1.609-4.el6       

Complete!

Maintenant que MySQL est installé, démarrons-le :

[root@crashtest ~]# service mysqld start
Initialisation de la base de données MySQL :  Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h crashtest password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

[  OK  ]

Démarrage de mysqld :  [  OK  ]

MySQL nous informe donc que sans mot de passe administrateur, c'est un peu la fête du slip et qu'il faut absolument remédier à ça. Soyons donc civilisés, mais pas trop, car pour l'exemple, j'initialise le mot de passe root de MySQL à 'anotherhomepage' (le mot de passe en lui-même ne contient pas les guillemets simples) :

[root@crashtest ~]# /usr/bin/mysqladmin -u root password 'anotherhomepage'
[root@crashtest ~]# /usr/bin/mysqladmin -u root -h crashtest password 'anotherhomepage'

Activons MySQL au démarrage de la machine :

[root@crashtest ~]# chkconfig --list mysqld
mysqld          0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt
[root@crashtest ~]# chkconfig mysqld on
[root@crashtest ~]# chkconfig --list mysqld
mysqld          0:arrêt 1:arrêt 2:marche        3:marche        4:marche        5:marche        6:arrêt

Configurations supplémentaires

Si vous avez effectué une installation identique à celle de mon précédent billet, vous aurez remarqué que le firewall est toujours actif, et que celui-ci n'accepte que du SSH et du SMTP :

[root@crashtest ~]# /etc/init.d/iptables status
Table : filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:25 
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Désactivons-le :

[root@crashtest ~]# /etc/init.d/iptables stop
iptables : Suppression des règles du pare-feu : [  OK  ]

iptables : Configuration des chaînes sur la politique ACCEPT : filter [  OK  ]

iptables : Déchargement des modules : [  OK  ]
[root@crashtest ~]# chkconfig --list iptables
iptables       	0:arrêt	1:arrêt	2:marche	3:marche	4:marche	5:marche	6:arrêt
[root@crashtest ~]# chkconfig iptables off
[root@crashtest ~]# chkconfig --list iptables
iptables       	0:arrêt	1:arrêt	2:arrêt	3:arrêt	4:arrêt	5:arrêt	6:arrêt

Il nous faut aussi effectuer une autre modification : l'autorisation des machines du réseau à accéder à phpMyAdmin. Pour cela il nous faut éditer le fichier /etc/httpd/conf.d/phpMyAdmin.conf avec votre éditeur de texte préféré, ou celui installé par défaut, très probablement vi. Dans ce fichier, nous voyons ceci :

<Directory /usr/share/phpMyAdmin/>
   Order Deny,Allow
   Deny from All
   Allow from 127.0.0.1
   Allow from ::1
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   Order Deny,Allow
   Deny from All
   Allow from 127.0.0.1
   Allow from ::1
</Directory>

Deux possibilités : la première, ajoutez votre réseau ou vos machines dans les deux sections Directory après les directives Allow en ajoutant justement une directive de ce type. Par exemple, avec un réseau 10.1.1.0/24, ça donnerait :

Allow from 10.1.1.0/24

Une autre possibilité, bien moins sécurisée mais sans doute plus confortable est de tout autoriser. Dans ce cas, les sections deviennent :

<Directory /usr/share/phpMyAdmin/>
   Order Deny,Allow
   Allow from All
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   Order Deny,Allow
   Allow from All
</Directory>

Démarrons à présent le serveur web :

[root@crashtest ~]# service httpd start
Démarrage de httpd : [  OK  ]

Il est à présent possible d'accéder à phpMyAdmin, dans mon cas via l'adresse http://crashtest/phpmyadmin/. Bien entendu, un identifiant et un mot de passe seront demandés. Il s'agit de ceux de MySQL (donc 'root' et 'anotherhomepage' dans mon cas).

On pourrait s'arrêter là. Mais ça serait dommage, pour plusieurs raisons :

  • l'authentification se fait via HTTP, pas d'interface d'authentification un peu jolie qui utiliserait par exemple un cookie de session;
  • HTTPS n'est pas activé, et donc le mot de passe se retrouve en clair sur le réseau;
  • le pare-feu est désactivé, sans autre forme de procès (SELinux aussi, d'ailleurs);
  • phpMyAdmin dispose de fonctions supplémentaires qu'on peut activer en créant une base de données

Ces points seront abordés dans un prochain billet, bien entendu ;-)

Installation minimaliste d'une CentOS 6

Suite à un billet précédent sur l'installation d'un domU Enterprise Linux sur un dom0 NetBSD, et à la sortie de CentOS 6.0, j'ai fait quelques essais d'installations de cette distribution.

Il n'y a pas d'énormes différences entre le billet cité et CentOS 6.0, juste quelques surprises. La première est au niveau de l'installation en mode texte, qui perd en possibilités, il n'est par exemple plus possible de personnaliser son partitionnement ou la liste des packages. Il faudra préférer une installation via VNC, qui permet d'afficher l'interface graphique. Les limitations en mémoire de RHEL 6 sont d'ailleurs valable pour CentOS 6, attention donc à attribuer assez de mémoire vive, au moins lors de l'installation, pour obtenir l'interface graphique.

J'ai donc décidé de passer par Kickstart pour quelques installations, et là aussi, il y a quelques changements, comme par exemple certains champs optionnels devenus obligatoires. Voici donc un exemple de kickstart commenté pour une installation minimaliste (mais pas minimale) personnalisée :

# Langue et zone horaire
lang fr_FR
keyboard fr 
timezone --utc Europe/Paris
# J'utilise Xen, donc je shutdown pour modifier le noyau d'installation en pygrub
shutdown
text
# on peut chiffrer le mdp root
rootpw changemonmdprootsvp
# j'autorise quelques services du firewall, la configuration au premier boot mais pas de SELinux par contre 
firewall --service=ssh --service=smtp
firstboot --enable
selinux --disabled
# Configuration du réseau
network --device eth0 --bootproto dhcp
# Paramétrage du disque dur : bootloader et partitionnement. Attention, on efface tout !
bootloader --location=mbr --driveorder=xvda
authconfig --enableshadow --passalgo=sha512
clearpart --all --initlabel --drives=xvda
part /boot --fstype ext3 --size 500 
part swap --size 512 
part / --fstype ext3 --size 5000
part /home --fstype ext3 --size 1200
part /var --fstype ext3 --size 400 --grow
# On fait une installation par le réseau, pensez à modifier ces urls par celles qui vous correspondent
# De plus, les dépôts updates et extras sont ajoutés pour que le système soit à jour dès l'installation
url --url http://monmiroirlocal/pub/CentOS/6/os/x86_64/
repo --name=updates --baseurl=http://monmiroirlocal/pub/CentOS/6/updates/x86_64/
repo --name=extras --baseurl=http://monmiroirlocal/pub/CentOS/6/extras/x86_64/
# C'est là qu'on s'amuse avec la liste des paquets.
# --nobase permet une installation très légère, mais il faut au moins le groupe @Core
# A noter que je refuse l'installation de nombreux firmwares matériels car je suis en VM.
%packages --nobase
@Core
ntp
openssh-clients
wget
vim-enhanced
-b43-openfwwf
-kernel-firmware
-aic94xx-firmware
-atmel-firmware
-bfa-firmware
-ipw2100-firmware
-ipw2200-firmware
-ivtv-firmware
-iwl1000-firmware
-iwl3945-firmware
-iwl4965-firmware
-iwl5000-firmware
-iwl5150-firmware
-iwl6000-firmware
-iwl6050-firmware
-libertas-usb8388
-ql2100-firmware
-ql2200-firmware
-ql23xx-firmware
-ql2400-firmware
-ql2500-firmware
-rt61pci-firmware
-rt73usb-firmware
-xorg-x11-drv-ati-firmware
-zd1211-firmware

# La post-installation me permet de récupérer et d'appliquer des configurations spécifiques
# Très pratique pour déboguer, l'option --log :)
%post --log=/root/postinstall.log
wget http://monmiroirlocal/pub/cfg/c6postinstall/prompt.sh -O /etc/profile.d/prompt.sh
wget http://monmiroirlocal/pub/cfg/c6postinstall/CentOS-Base.repo -O /etc/yum.repos.d/CentOS-Base.repo
wget http://monmiroirlocal/pub/cfg/c6postinstall/ntp.conf -O /etc/ntp.conf
wget http://monmiroirlocal/pub/cfg/c6postinstall/main.cf -O /etc/postfix/main.cf
chkconfig ntpd on
chkconfig postfix on

Avec ce genre d'installation, on tombe à moins de 200 paquets installés :)

Utilisation de nombreux domU en backend fichiers sur un dom0 NetBSD

Oui, j'utilise des machines virtuelles Xen dans des fichiers. Pas de partition, pas de LVM, non. Un bon vieux fichier qu'on peut effacer sans regrets une fois son domU "jetable" inutile. Pour utiliser ces fichiers, et pour monter des fichiers en tant que disque de manière générale, NetBSD utilise le pilote vnd (4). Et par défaut, il y a 4 fichiers spéciaux vnd. Et lorsqu'on désire lancer 42 machines virtuelles en même temps, chacune ayant besoin d'un fichier vnd pour monter son disque dur, on obient une erreur du genre :

Error: Device 51712 (vbd) could not be connected. Hotplug scripts not working.

Alors on s'affole, on copie-colle le message dans un moteur de recherche bien connu, et on tombe sur ce genre de chose :

How much /dev/vnd*d device do you have ? Maube you need to create more ? e.g.: cd /dev ./MAKEDEV vnd4 vnd5 vnd6 vnd7 vnd8

Donc on applique :

root@arreat:/usr/pkg/etc/xen# cd /dev
root@arreat:/dev# ./MAKEDEV vnd4 vnd5 vnd6 vnd7 vnd8 vnd9 vnd10 vnd11 vnd12 vnd14 vnd15
root@arreat:/dev# cd /usr/pkg/etc/xen
root@arreat:/usr/pkg/etc/xen# xm create vmjetable1 && xm create vmkikoo2 \
&& xm create vmpipeau3 && xm create vmdelire4 && xm create encoreunevmjetable

Maintenant, c'est la RAM qui va commencer à manquer... mais c'est un autre problème ;-)

Installation d'un domU Xen Enterprise Linux sur un dom0 NetBSD

Ces derniers temps je m'amuse à faire des installations par le réseau d'un peu tout et n'importe quoi. J'utilise principalement l'outil de virtualisation Oracle VirtualBox, mais il m'arrive aussi de faire joujou avec Xen. Avec un hôte (dom0) CentOS 5 (et sans doute toutes les distribution de type "Enterprise Linux" telles que Red Hat Enterprise Linux ou Scientific Linux), il est très facile de créer d'autres machines virtuelles (domU) Xen de même type grâce à la commande "virt-install". Avec un dom0 NetBSD cependant, point de commande de ce type. Voyons donc comment faire.

Sur un système Enterprise Linux 5, il est possible de trouver une image de noyau d'installation (et l'initrd approprié) spécifique à Xen, comme par exemple sur ce miroir pour CentOS 5 64 bits.

Ce qui me paraît étrange, c'est avec Enterprise Linux 6, tout du moins avec Scientific Linux. Le noyau 2.6.32 dispose à priori des pv-ops, mais SL6 dispose d'un noyau et d'un initrd Xen. Peut-être est-ce par soucis de compatibilité de chemins, car les fichiers font la même taille que dans le répertoire pxeboot. D'ailleurs, lors de ma synchronisation rsync avec le miroir officiel Scientific Linux, le répertoire xen n'apparaît pas. Et je n'en ai pas eu besoin :)

Une fois nos images de noyau et d'initrd en main, il nous reste à créer notre fichier de configuration de domU, mon exemple prend comme exemple de disque dur un fichier et une connexion réseau par bridge :

name = "centosexample"
uuid = ""
maxmem = 512
memory = 512
kernel  = "/srv/www/pub/CentOS/5/os/x86_64/images/xen/vmlinuz"
ramdisk = "/srv/www/pub/CentOS/5/os/x86_64/images/xen/initrd.img"
extra = "vnc"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [  ]
disk = [ "file:/srv/xen/images/disk/centosexample.img,xvda,w" ]
vif = [ "mac=00:16:3a:e2:12:34,bridge=bridge0" ]

Il est possible de faire l'installation en mode texte en supprimant la ligne "extra", et d'ajouter l'url d'un fichier kickstart dans la directive extra, qui devient donc :

extra = "text ks=http://monserveur/pub/cfg/centos5_x86_64.cfg"

La commande "xm create -c centosexample" vous permet de lancer votre domU et de débuter l'installation. Une fois celle-ci faite et votre domU de nouveau éteint, il suffit de commenter les lignes "kernel" et "ramdisk" et de décommenter la ligne "bootloader". Vous pouvez alors démarrer votre domU sans que le noyau de celui-ci soit sur le disque dur du dom0 :)

Lors de mes tests, je me suis limité au partitionnement par défaut (qui utilise LVM), à un détail près : avec Scientific Linux 6, j'ai imposé ext3 à l'installeur. Une fois l'installation terminée, éteindre son domU (proprement de préférence) et modifier la configuration qui devient :

name = "centosexample"
uuid = ""
maxmem = 512
memory = 512
bootloader = "/usr/pkg/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [  ]
disk = [ "file:/srv/xen/images/disk/centosexample.img,xvda,w" ]
vif = [ "mac=00:16:3a:e2:12:34,bridge=bridge0" ]

J'ai donc remplacé le noyau et l'initrd d'installation par pygrub, qui me permet de démarrer mon domU sur le noyau et l'initrd installés. De plus, les mises à jour ne nécessitent pas de copier de nouveau le noyau et l'initrd sur le dom0.

Pour finir, si vous souhaitez installer un dom0 NetBSD, je ne peux que vous recommander l'excellent billet de Bsdsx !

Configuration d'une redondance DNS

Je suis dans la situation suivante : j'ai une machine exécutant entre autres un serveur DHCP et un serveur DNS, et je souhaite réinstaller cette machine. Problème, si je la réinstalle, le DHCP et le DNS seront indisponibles. Il me faut donc redonder ces deux services pour ne pas perturber les autres machines. Après la redondance DHCP, ce billet aborde la redondance DNS. Ce billet, comme le précédent, n'aborde pas la configuration complète d'un serveur DNS mais détaille les options de configurations liées à la redondance

Une redondance basique dans un LAN est très facile à mettre en œuvre car il n'y a pas besoin de modifier quoi que ce soit chez un registrar. Il faudra cependant ajouter l'adresse IP du second serveur DNS dans la configuration de toutes les machines ayant une adresse IP statique, car celles-ci ne récupèrent pas la liste des serveurs DNS via DHCP. Une redondance DNS se compose généralement d'au moins deux serveurs : un serveur maître et un ou plusieurs serveurs esclaves. Toutes nos futures modifications dans le DNS s'effectueront sur le serveur maître et seront répliquées automatiquement vers le serveur esclave. Dans notre cas, le serveur maître utilise NetBSD 4.0 et le serveur esclave utilise NetBSD 5.1; dans les deux cas, ISC Bind est utilisé dans sa version embarquée avec l'OS, et configuré dans un chroot.

Sur notre serveur maître, configurons nos zones dans le fichier /var/chroot/named/etc/named.conf :

zone "anotherhomepage.loc" IN {
        type master;
        file "anotherhomepage.loc";
        allow-update { none; };
        allow-query { any; };
        allow-transfer { 10.13.37.11; };
};

zone "37.13.10.in-addr.arpa" IN {
        type master;
        file "anotherhomepage.loc.reverse";
        allow-update { none; };
        allow-query { any; };
        allow-transfer { 10.13.37.11; };
};

Remarquons que nous autorisons le transfert vers 10.13.37.11 qui est le serveur esclave. Continuons dans le fichier de zone anotherhomepage.loc dont voici quelques extraits :

$TTL 86400
@       IN      SOA     ns0.anotherhomepage.loc. nils.anotherhomepage.loc. (
               2011042601 ; Serial
               8H   ; Refresh
               2H   ; Retry
               4W  ; Expire
               1D  ; Minimum TTL
)

; Name servers
anotherhomepage.loc.    IN      NS     ns0
anotherhomepage.loc.    IN      NS     ns1
; Mail servers
anotherhomepage.loc.    IN      MX      10      mail
; "A" entries
ns0                  IN      A       10.13.37.10
ns1                  IN      A       10.13.37.11
mail                 IN      A       10.13.37.12

Notre serveur esclave est donc renseigné pour le DNS, voyons voir dans le DNS inverse, fichier de zone anotherhomepage.loc.reverse :

$TTL 86400
@       IN      SOA     ns0.anotherhomepage.loc. nils.anotherhomepage.loc. (
               2011042601  ; Serial
               8H   ; Refresh
               2H   ; Retry
               4W  ; Expire
               1D  ; Minimum TTL
)
        IN      NS      ns0.anotherhomepage.loc.
        IN      NS      ns1.anotherhomepage.loc.
        IN      MX      10      mail.anotherhomepage.loc.
10      IN      PTR     ns0.anotherhomepage.loc.
11      IN      PTR     ns1.anotherhomepage.loc.
12      IN      PTR     mail.anotherhomepage.loc.

Occupons-nous à présent de notre serveur esclave. De ce côté, un seul fichier à modifier, /var/chroot/named/etc/named.conf, car les autres seront transférés par les mises à jour de zone :

zone "anotherhomepage.loc" IN {
        type slave;
        masters { 10.13.37.5; };
        file "anotherhomepage.loc";
        allow-update { 10.13.37.5; };
        allow-query { any; };
        allow-notify { 10.13.37.5; };
};

zone "37.13.10.in-addr.arpa" IN {
        type slave;
        masters { 10.13.37.10; };
        file "anotherhomepage.loc.reverse";
        allow-update { 10.13.37.10; };
        allow-query { any; };
        allow-notify { 10.13.37.10; };
};

Il ne reste maintenant qu'à vérifier notre configuration. Par défaut, les logs vont dans /var/log/messages. Vous pouvez définir un autre emplacement pour les logs, comme par exemple :

logging {
        channel simple_log {
                file "/var/log/named/bind.log" ;
                severity info;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        category default{
                simple_log;
        };
        category queries{
                simple_log;
        };
};

Cet exemple est à insérer dans votre named.conf. Incrémentons les numéros de série, effectuons une relance de bind sur le serveur esclave puis le serveur maître :

root@ns0:/var/chroot/named/var# /etc/rc.d/named reload
Reloading named config files.

Regardons le résultat sur le serveur esclave pour la relance du serveur maître :

root@ns1:/var/chroot/named/etc# tail -f /var/chroot/named/var/log/named/bind.log
26-Apr-2011 19:14:10.864 notify: info: client 10.13.37.5#64893: received notify for zone '37.13.10.in-addr.arpa'
26-Apr-2011 19:14:10.923 general: info: zone 37.13.10.in-addr.arpa/IN: Transfer started.
26-Apr-2011 19:14:10.924 xfer-in: info: transfer of '37.13.10.in-addr.arpa/IN' from 10.13.37.5#53: connected using 10.13.37.60#65525
26-Apr-2011 19:14:11.335 general: info: zone 37.13.10.in-addr.arpa/IN: transferred serial 2011042601
26-Apr-2011 19:14:11.336 xfer-in: info: transfer of '37.13.10.in-addr.arpa/IN' from 10.13.37.5#53: Transfer completed: 1 messages, 258 records, 8672 bytes, 0.411 secs (21099 bytes/sec)
27-Apr-2011 19:14:11.337 notify: info: zone 37.13.10.in-addr.arpa/IN: sending notifies (serial 2011042601)
26-Apr-2011 19:14:11.383 notify: info: client 10.13.37.5#64893: received notify for zone 'anotherhomepage.loc'
26-Apr-2011 19:14:11.388 general: info: zone anotherhomepage.loc/IN: Transfer started.
26-Apr-2011 19:14:11.390 xfer-in: info: transfer of 'anotherhomepage.loc/IN' from 10.13.37.5#53: connected using 10.13.37.60#65524
26-Apr-2011 19:14:11.654 general: info: zone anotherhomepage.loc/IN: transferred serial 2011042601
26-Apr-2011 19:14:11.654 xfer-in: info: transfer of 'anotherhomepage.loc/IN' from 10.13.37.5#53: Transfer completed: 1 messages, 268 records, 8464 bytes, 0.263 secs (32182 bytes/sec)
26-Apr-2011 19:14:11.657 notify: info: zone anotherhomepage.loc/IN: sending notifies (serial 2011042601)

Houra ! Les transferts ont eu lieu ! Maintenant, il reste à modifier dans notre serveur DHCP les adresses IP des serveurs DNS. Dans le cas d'ISC DHCP :

option domain-name-servers 10.13.37.10, 10.13.37.11;

Notez que ce billet permet une redondance assez basique, et loin d'être totalement sécurisée : quelqu'un d'assez malin peut, en utilisant une attaque de type Man-in-the-middle peut appliquer des modifications au serveur esclave. Pour les personnes qui aimeraient corriger ce défaut, il faut se tourner vers DNSSEC.

Propulsé par Dotclear