Automatisation de l'administration de serveur virtuel en utilisant le logiciel Puppet

Gazette Linux n°183 — février 2011

par Ikuya Yamada et Yoshiyasu Takefuji (Copyright © 2011) ikuya CHEZ ousia POINT jp

takefuji CHEZ sfc POINT keio POINT ac POINT jp

traduction par Robert De Sousa (tous droits réservés) dessroberto CHEZ gmail POINT com

relecture exemple email CHEZ exemple POINT com


Introduction

Quand un environnement de serveur est créé en utilisant le logiciel de virtualisation ou un service de cloud, le nombre de serveurs tend à augmenter rapidement. L'installation de logiciel et de configuration sont nécessaires à chaque nouveau serveur. En outre, la synchronisation des configurations de serveur exige un effort supplémentaire comme l'écriture de scripts shell.

Dans cet article, nous décrirons comment construire un environnement de serveur automatiquement en utilisant un logiciel appelé Puppet. Bien que cet outil soit généralement utilisé pour gérer l'infrastructure de serveurs à grande échelle (comme un centre de données ou un service Web avec un  grand nombre d'utilisateurs), il peut également être utilisé pour gérer un petit nombre de serveurs. Cependant, Puppet est un outil récemment mis au point, et la documentation existante et les articles sur Puppet sont encore un peu superficielle.

Ici, nous allons vous montrer des exemples simples que vous pouvez utiliser pour configurer les paramètres du serveur à l'aide de Puppet sans aucune difficulté. En l'utilisant, vous pouvez créer un nouveau serveur instantanément en entrant seulement quelques lignes de commandes. Puppet va aussi synchroniser périodiquement la configuration des serveurs créés.

Notez qu'il sera particulièrement utile pour configurer et maintenir les paramètres de sécurité communs, en incluant sudo, sshd, and iptables.  Dans cet article, nous avons également décrit quelques-un de nos simples mais puissant paramètres de sécurité qui ont été utilisés dans notre environnement de serveur.

Nous avons testé tous les exemples en utilisant le système d'exploitation CentOS5. Cependant, vous pouvez appliquer les techniques décrites si dessous pour Linux et les autres systèmes d'exploitation.

Instalation du logiciel Puppet

Le logiciel Puppet adopte une architecture client-serveur. Chaque client communique périodiquement avec un ou plusieurs serveurs principal et synchronise la configuration (chaque demi-heure par défaut). Donc vous devez d'abord préparer au moins deux instances de serveur, l'un serait le serveur principal de Puppet et les autres seraient les clients de Puppet.

Maintenant, nous allons procédé à l'installation de Puppet. Fedora EPEL fournit le paquet  Puppet Yum. Si vos serveurs n'ont pas EPEL, veuillez l'installer avant de continuer

$ sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

Ensuite, installez le paquet puppet-server sur le serveur principal qui gère les clients et instalez puppet sur ces derniers:

Sur le serveur:

$ sudo yum -y install puppet-server
$ sudo chkconfig puppetmaster on
$ sudo service puppetmaster start

Sur les machines clients:

$ sudo yum -y install puppet
$ sudo chkconfig puppet on
$ sudo service puppet start

En outre, si le serveur principal est placé derrière un pare-feu et que vous souhaitez utiliser Puppet sur les clients qui sont en dehors du pare-feu, vous devez ouvrir le port 8140 en TCP.

Une brève introduction à Puppet

Dans Puppet, toutes les configurations sont décrites comme des ressources.Les ressources peuvent être des fichiers, plusieurs logiciels, des services du serveur, etc... Par exemple, le fichier suivant représente un fichier très basique  /etc / passwd qui est détenue par la racine et a comme paramètres d'autorisation la valeur '644 ':

file { '/etc/passwd':
    owner   => root,
    mode    => 644,
}

La configuration en desous installe le paquet openssh-server, qui permet le service sshd par défaut, et veille à ce que sshd soit lancé:

package { 'openssh-server':
    ensure => installed,
}

service { 'sshd':
    enable  => true,
    ensure  => running,
    require => Package['openssh-server'],
}

Maintenant, nous allons appliquer ces configurations au  serveurs. Dans Puppet, site.pp est un fichier spécial qui est inclus par défaut.  Si la configuration du serveur n'est pas complexe, il pourrait être avantageux d'écrire tous les paramètres de configuration dans ce fichier. Pour ce faire, veuillez collez le code ci-dessus dans votre fichier /etc/puppet/manifests/site.pp.

file { '/etc/passwd':
    owner   => root,
    mode    => 644,
}

package { 'openssh-server':
    ensure => installed,
}

service { 'sshd':
    enable  => true,
    ensure  => running,
    require => Package['openssh-server'],
}

Ensuite, vous devez enregistrer les clients sur ​​le serveur principal.
Veuiller exécutez la commande suivante sur les serveurs des clients:

$ sudo puppetd --test --waitforcert 30 --server MASTER_SERVER_ADDRESS

et exécutez la commande suivante sur le serveur.

$ sudo puppetca --list
(YOUR CLIENT_SERVER_ADDRESS IS DISPLAYED HERE)
$ sudo puppetca --sign CLIENT_SERVER_ADDRESS

Puis, retournez sur la console du client, vous remarquerez que toutes les entrées de configuration ci-dessus ont été appliquées automatiquement par Puppet.
En outre, vous aurez besoin d'ajouter le paramètre suivant au fichier /etc/puppet/puppet.conf afin de donner l'adresse du serveur aux  clients.

[main]
    server = MASTER_SERVER_ADDRESS

Maintenant, le logiciel Puppet synchronisera automatiquement les configurations des serveurs toutes les 30 minutes. Vous pouvez confirmer cela dans /var/log/messages:

$ sudo tail /var/log/messages

Des exemples de configurations

Dans cette section, nous allons fournir plusieurs exemples de configurations basiques. Si vous voulez les utiliser, veuillez les coller dans votre  site.pp.

Ajouter un administrateur

Puppet propose un outil facile à utiliser qui permet de gérer les comptes utilisateurs. La configuration suivante ajoute l'utilisateur admin à votre serveur.

# Add "admin" account
user { 'admin':
    home       => '/home/admin',   # home directory is /home/admin
    managehome => true,            # manage the home directory by Puppet
    groups     => ['wheel'],       # the user belongs to wheel group
    password   => 'PASSWORD_HASH', # hashed password text
}

PASSWORD_HASH est un hachage de mot de passe basique, similaires à ceux utilisés dans /etc/shadow.  Vous pouvez les générer manuellement en utilisant les commandes suivantes:

$ sudo yum -y install ircd-ratbox-mkpasswd
$ /usr/bin/ircd-mkpasswd -m -s 'SALT' -p 'PASSWORD'

[ Standard crypt (3) la création de mot de passe est également disponible sans avoir à installer aucun logiciel supplémentaire; par exemple. perl -wle 'print crypt "PASSWORD", "SALT"' or python -c 'import crypt; print(crypt.crypt("PASSWORD", "SALT"))' permet d'en générer  un. -- Ben ]

sudo

La configuration suivante installe le paquet sudo et  modifie sudoers en utilisant augeas pour permettre aux utilisateurs appartenant au groupe d'utiliser sudo:

# Install sudo package
package { 'sudo':
    ensure => installed, # ensure sudo package installed
}

# Allow users belonging wheel group to use sudo
augeas { 'sudowheel':
    context => '/files/etc/sudoers', # target file is /etc/sudoers
    changes => [
        # allow wheel users to use sudo
        'set spec[user = "%wheel"]/user %wheel',
        'set spec[user = "%wheel"]/host_group/host ALL',
        'set spec[user = "%wheel"]/host_group/command ALL',
        'set spec[user = "%wheel"]/host_group/command/runas_user ALL',
    ]
}

SSH

Cette configuration permet d'installer et d'utiliser ssh sur votre serveur. Il modifie également sshd_config pour refuser les connexions root et les connexions sans mots de passe.

# Install openssh-server package
package { 'openssh-server':
    ensure => installed,
}

# Enable sshd service
service { 'sshd':
    enable  => true,                      # execute sshd on startup
    ensure  => running,                   # ensure sshd running
    require => Package['openssh-server'], # require openssh-server before applying this config
}

# Change sshd configuration
augeas { 'sshd_config':
    context => '/files/etc/ssh/sshd_config', # target file is /etc/ssh/sshd_config
    notify  => Service['sshd'],              # restart sshd after applying this config
    changes => [
        # deny root logins and logins with empty passwords
        'set PermitRootLogin no',
        'set PermitEmptyPasswords no',
    ],
}

iptables

Pour configurer iptables à l'aide de Puppet, vous aurez besoin d'installer un module externe appelé  puppet-iptables. Vous devez le télécharger et l'installer à partir de GitHub.

$ cd /tmp
$ wget --no-check-certificate "https://github.com/kbarber/puppet-iptables/tarball/master"
$ tar xvzf kbarber-puppet-iptables-1.2.0-2-g9deddbb.tar.gz
$ sudo mkdir -p /etc/puppet/modules
$ sudo mv kbarber-puppet-iptables-9deddbb /etc/puppet/modules/

En outre, vous devez ajouter les paramètres suivants à votre fichier /etc/puppet/puppet.conf" à la fois dans le serveur et dans les clients:

[main]
    libdir = /var/lib/puppet/lib

[puppetd]
    pluginsync=true
    plugindest=/var/lib/puppet/lib

Maintenant, vous pouvez utiliser les ressources iptables. Ce qui suit est une configuration du pare-feu de base qui accepte uniquement les paquets sur les connexions existantes, celles de l'hôte local et le réseau local, et celles qui se connecte via SSH.

# Allow packets that belong to or related to an existing connection
iptables { 'allow established, related':
    state => ['ESTABLISHED', 'RELATED'],
    proto => 'all',
    jump  => 'ACCEPT',
}

# Allow all packets from localhost
iptables { 'allow localhost':
    source => '127.0.0.1',
    proto  => 'all',
    jump   => 'ACCEPT',
}

# Allow all packets from LAN
iptables { 'allow LAN':
    source => '192.168.0.0/16',
    proto  => 'all',
    jump   => 'ACCEPT',
}

# Allow all packets to SSH
iptables { 'allow ssh':
    proto => 'tcp',
    dport => 22,
    jump  => 'ACCEPT',
}

# Drop all incoming packets by default
iptables { 'drop incoming packets':
    chain => 'INPUT',
    proto => 'all',
    jump  => 'DROP',
}

Pour plus d'informations

Si vous êtes intéressé par Puppet et que vous voulez en apprendre d'avantage à ce sujet, veuillez vous référer à la documentation officielle; official documentation et introduction to Puppet.


Ikuya Yamada

Ikuya Yamada est un entrepreneur et un ingénieur en logiciel expérimenté. Actuellement, il est le fondateur et le directeur technique des Studio Ousia Inc, une entreprise de logiciel R&D fondée en 2007 à Tokyo. Il est également chercheur à l'Institut de Recherche de Keio à SFC depuis 2010. Avant les studio Ousia, il était le directeur de Fractalist Inc., entreprise de logiciels japonaise, et auparavant le fondateur et le PDG de Newrong Inc., entreprise de logiciel de R&D, qui a été acheté par Fractalist Inc. en 2005. Il a obtenu son BS en 2006 et le MS en 2010 à l'Université de Keio.


Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site http://www.traduc.org/Gazette_Linux

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.