Configurer un serveur dédié OVH/Kimsufi/Debian 5 pour LAMP
Je retranscris ici un petit memento que je me suis fait pour “remonter” rapidement une configuration opérationnelle sous Debian 5 / Apache2 / PHP5 / Mysql pour héberger des sites sur un serveur dédié GNU/Linux type OVH ou Kimsufi. Cette configuration, qui inclut également eAccelerator et des outils de supervision et d’administration de base (Munin, phpsysinfo, mtop, PhpmyAdmin, AWStats) est opérationnelle et suffisamment sécurisée pour une installation standard (à condition de faire régulièrement toutes les mises à jour des packages). En tout cas pour moi c’est bon©®™.
Le memento ci-dessous est une compilation des meilleures recommandations trouvées ailleurs sur le net, remises à jour pour une installation Debian Lenny de Septembre 2009. Il a été mis à jour en mai 2011 pour s’adapter à la nouvelle version Debian 6 Squeeze, et vous pouvez donc lire la nouvelle version ici. La présente page est devenue obsolète, et ne sert que de référence pour les systèmes qui demeurent sous Debian 5. Je ne la tiens plus à jour.
Commencer par se connecter au serveur en ssh avec le compte root avec mot de passe fourni dans l’e-mail envoyé par OVH, sur le port 22 (normal quoi…) (depuis un autre GNU/linux ce serait simplement : ssh -l root suivi du nom ou de l’ip de votre serveur)
1. Re-partitionner ou pas ?
Les serveurs dédiés livrés par OVH ne sont pas partitionnés de façon optimale pour une utilisation comme serveurs web. Suivez ce guide pas à pas pour repartitionner et réinstaller automatiquement votre serveur web OVH. C’est une étape préalable que je vous conseille, même si elle n’est pas indispensable pour des projets modestes ou si vous bénéficiez d’un serveur récent avec une très grande capacité de disques durs. Si vous n’avez pas repartitionné votre serveur vous pourrez toujours vous en sortir en “relocalisant” de nombreux fichiers dans l’arborescence du répertoire /home de votre serveur, mais cela revient à s’éloigner de l’architecture par défaut d’un serveur Debian, et risque de compliquer la maintenance de votre serveur web à long terme.
2. Changement du mot de passe root et création d’un utilisateur
Travailler en root c’est mal, encore plus quand ce root utilise un mot de passe qui a circulé par e-mail. On commence donc par créer un compte d’utilisateur non privilégié (auquel on donnera les privilèges nécessaires pour faire de l’administration à distance tout de même !), et par changer le mot de passe root.
passwd
-> changer pass root
adduser <votre login>
adduser <votre login> root
adduser <votre login> adm
Vérifiez que vous arrivez à vous connecter avec ce nouvel utilisateur, puis quittez la session root :
exit
(la procédure pour créer les autres comptes d’administration du contenu web est décrite ici)
3. Configuration de la connexion via une clé ssh
J’explique ici dans le détail (dans un autrez article) comment créer une paire de clés ssh sous GNU/Linux. Il existe d’autres excellents tutoriaux à ce sujet ailleurs sur le web (Google est ton ami). On peut également le faire très simplement sous Windows avec Putty par exemple.
Une fois la clé générée et stockée dans un fichier texte localement, se reconnecter en ssh avec l’utilisateur non privilégié créé ci-dessus :
ssh -l <votre login> <hôte>
(toujours par défaut sur le port 22 avec mot de passe choisi pour le nouveau compte ci-dessus)
mkdir .ssh
cd .ssh
vi authorized_keys
-> coller la clé ssh (longue chaine de texte)
exit
On peut maintenant se connecter sans taper de mot de passe grâce à la clé ssh :
ssh -l <votre login> <hôte>
(toujours sur port 22, mais avec clé ssh, donc sans taper de mot de passe)
4. Sécurisation minimum du serveur
su root
rm /root/.ssh/authorized_keys2
rm /root/.p
rm /root/.email
vi /etc/hostname -> changer nom de machine (genre ksXXXXXX.<votre-domaine>.com)
invoke-rc.d hostname.sh stop
invoke-rc.d hostname.sh start
vi /etc/hosts
-> ajouter nom de machine
aptitude update aptitude safe-upgrade
(je laisse “all” pour les histoires d’initialisation de disques RAID au démarrage)
aptitude full-upgrade aptitude install debian-goodies
aptitude install libpam-cracklib wfrench
(utilitaire qui vérifie automatiquement la qualité des mots de passe, avec un dictionnaire de mots français)
vi /etc/pam.d/su
-> On dé-commente la ligne : auth required pam_wheel.so
vi /etc/pam.d/common-password
-> On rajoute à la fin la ligne : password required pam_cracklib.so retry=3 minlen=8
aptitude install sudo
visudo
-> Ajout de la ligne : %root ALL=(ALL) PASSWD: ALL
apt-get install fail2ban
vi /etc/fail2ban/jail.conf
->
[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6 # durée du banissement bantime = 900
/etc/init.d/fail2ban restart vi /etc/ssh/sshd_config
-> Port 22000 (pour déplacer l’écoute du daemon ssh sur un port “non standard”)
/etc/init.d/ssh restart
reboot
5. Désinstallation de trucs inutiles / installation de trucs utiles
Cette fois on se reconnecte en ssh sur le port 22000, toujours avec la clé ssh. Vous pouvez d’ailleurs sauvegarder ces paramètres de connexion qui seront définitifs.
ssh -l <votre login> -p 22000 <hôte> su
aptitude purge bind9 bind9-doc \ dhcp3-client dhcp3-common gcc \ gcc-4.2-base libdns43 libisc44 \ libncurses5-dev manpages-cs \ manpages-de manpages-de-dev \ manpages-es manpages-es-extra \ manpages-it manpages-pl \ manpages-pl-dev manpages-pt manpages-pt-dev \ manpages-ru reiserfsprogs
aptitude install openntpd
aptitude install mailx
La suite (installation d’Apache,…) en page 2…





le 8 October 2009 à 16:33 h
Excellent tuto ! Tout a marché très bien pour moi. Il faut également ajouter que sur un serveur Kimsufi, le répertoire /var/www est sur une “petite” partition de 5Go. Mieux vaut créer un répertoire dans /home (partition de 500Go) et faire un lien symbolique de /var/www vers ce répertoire.
J’ai également un problème qui commence à m’énerver sérieusement : apache2 tourne avec le user www-data et j’upload les fichiers de mon site sous mon user (créé selon le tuto en faisant adduser ). J’ai donc des problèmes de droits en permanence : je suis obligé de faire des sudo chown www-data et des chown monuser sans arrêt. N’y a-t-il pas une meilleure solution ? Merci.
le 8 October 2009 à 17:00 h
@Steph
Tout à fait exact en ce qui concerne l’emplacement de /var/www sur la petite partition -> on peut au choix partitioner le serveur autrement avec l’outil OVH avant de procéder à l’installation ou réinstallation automatique du système. J’ai testé et cela fonctionne très bien; ou bien comme tu le suggères avoir recours à un lien symbolique (attention toutefois certaines configurations de sécurité “poussée” d’Apache n’acceptent pas les liens symboliques).
Pour les droits : dans les liens en bas de l’article, on trouve des tutos d’autres admin système qui installent apache en mode “suexec” pour le faire tourner sous un autre utilisateur. C’est une option. Personnellement, je règle le problème en utilisant les groupes : je place mon user perso ainsi que les autres webmasters éventuels dans le groupe www-data et j’autorise les modifs de fichier par les membres du groupe (chmod g+w). Apache quant à lui accède à tous les fichiers en lecture sans se poser de questions.
le 8 October 2009 à 21:17 h
@Yann
Je vois 1 problème à cette solution (chmod g+w) :
Certaines “appli” web (wordpress, drupal par exemple) ont besoin des droits d’écriture sur quelques répertoires : c’est à dire que le user www-data devra être capable d’écrire dans ces répertoires. Et malheureusement, les fichiers créés par ton user perso ne seront pas accessibles par le user www-data.
On peut toujours mettre le user www-data dans le groupe de ton user perso et faire un chmod g+w sur ces fichiers nouvellement créés, mais ça devient un peu tordu quand même… Je me demandais s’il n’y avait pas plus simple.
Quant à suexec, il me semble que les performances sont moins bonnes.
Je ne suis pas un pro en sécurité, mais est-ce qu’une solution qui consisterait à mettre un mot de passe au user www-data ne serait pas plus simple. Je pourrais me loguer sous ce user en utilisant le mot de passe (ou même avec une clé).
le 25 November 2009 à 1:38 h
Impressionnant ! je crois que c’est le premier tuto qui fonctionne du premier coup, je suis bluffé !
Félicitation pour ce tuto qui fonctionne a merveille, c’est du beau boulot. Il permet de partir sur des bases solides et à le merite d’être clair en plus.
Pour mon cas, j’ai adapté la sécurisation des dossiers munin et phpsysinfo à partir du tuto concernant le RPS d’OVH.
Un grand merci en tout cas…
le 3 April 2010 à 18:54 h
Bravo !!!
Je crois que c’est le premier tuto complet sur le sujet.
Franchement je suis bluffé !!
le 20 August 2010 à 17:29 h
Pas mal,
mais il manque sans doute la config iptables et l’install d’exim4
le 20 August 2010 à 17:41 h
@Teenage:
Concernant iptables, c’est un choix : il y a tellement peu de ports ouverts sur cette machine qui est un serveur web isolé (en fait seuls les ports http, le ssh étant déplacé à une adresse non triviale), et tellement peu de services actifs à l’écoute, qu’on peut se demander si c’est utile. Personnellement, je considère que non. Il y a beaucoup plus de chances d’être attaqué en http sur les applications php, et c’est donc plutôt l’installation de mod-secure pour Apache qui manque.
Bien entendu si on veut ajouter des services sur son Kimsufi, faire du routage, ou faire communiquer des serveurs entre eux par des services privilégiés, iptables peut devenir intéressant. Ce n’est pas l’objet de cette config.
Concernant Exim4, son installation est mentionnée dans le tuto, et la configuration est triviale et se fait en mode interactif pour l’usage qu’on en fait (uniquement relayer en smtp des mails envoyés par les applis web).
Mais n’hésites pas à compléter si tu as des suggestions, ou des liens intéressants pour ces deux aspects : je ne prétends pas être exhaustif, car à la base c’est juste un aide-mémoire à usage personnel
le 20 August 2010 à 18:49 h
Oui, mais ca peut pas faire de mal surtout si l’on ne maitrise pas tout les services (inetd).
Pour exim il n’était pas installé sur ma machine, donc :
sudo /etc/init.d/sendmail stop
sudo apt-get purge sendmail
sudo aptitude install exim4
dpkg-reconfigure exim4-config
Pour ma part je rajouterais bien quel info sur la sécurisation d’apache : droits, mod_secure, analyse de log,…
Apparemment chrooter semble contre-productif, surtout pour un serveur qui ne fait que du http.
Coté performance et sécurité le mod FastCGI PHP parait pas mal…
Sinon je proposerais bien de faire tourner les page web non public : awstats, phpsysinfo, munin, phpmyadmin sur une ip non routable et de n’y accéder que via un tunnel ssh ?
Sinon dans l’ensemble il manque quelque commentaire supplémentaire pour indiquer plus précisément à quoi sert tel package ou tel réglage.
Comme je vais écrire une doc détaillé sur la config de mon serveur, je te l’enevrais, cela te permettra d’enrichir ce post
le 20 August 2010 à 20:32 h
@Teenage :
Avec grand plaisir, et je prendrais le temps de mettre à jour cette page ou d’ajouter des pages complémentaires (et de te créditer pour tes infos). En effet, cette page est pas mal consultée (une dizaine de fois par jour en moyenne), donc j’en conclus qu’elle est utile à beaucoup de monde !
le 25 August 2010 à 14:56 h
[...] Cet article est donc un bon complément de mon autre article sur la configuration de base d’un environnement LAMP sur un serveur Debian du type de …. [...]
le 29 September 2010 à 18:43 h
[...] La version française de cet article est disponible ici. addthis_url = 'http%3A%2F%2Fwww.yann.com%2Fen%2Fhow-to-configure-a-dedicated-debian-server-for-lamp-29%2F09%2F2010.html'; addthis_title = 'How+to+configure+a+dedicated+Debian+server+for+LAMP'; addthis_pub = ''; [...]
le 28 November 2010 à 16:43 h
Juste sublime !
c’est la première fois que j’arrive autant à suive un tuto sur un sujet qui m’est COMPLETEMENT étanger ! je suis en joie c’est merveilleux ! J’ai reçu mes deux mails à la fin du tuto j’étais toute émue
il me reste justes quelques questions (spoiler : qd je disais que je ne connais pas le sujet c’est un euphémisme)
- pour la modification du numéro de port j’ai mis 22000 comme une buse – évidemment il a pas voulu – j’ai compris à ce moment là que j’étais une buse
– ceci dit je ne sais pas quelles sont les valeurs des autres ports possibles à mettre à la place de 22…
- l’install de apache2-dev a été refusée j’ai du remplacer par apache2-threaded-dev
- l’install de phpsysinfo : les consignes de sécurisation sont un peu elliptiques j’ai rien compris à ce qu’il fallait faire donc par précaution j’ai préféré ne pas l’installer …
- adresse accelerator à ce jour : wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2 – je sais pas à quoi ça sert mais le nom est cool ça a l’air bien
- Paramétrer /etc/awstats/. – aucune idée de ce que ça veut dire ni comment on fait …
- -> ajouter : 15,45 * * * * /usr/share/doc/awstats/examples/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl >> /var/log/awstats.log
rien compris non plus
Encore merci et gigantesque bravo !
le 9 December 2010 à 18:53 h
@Liaz:
- Merci pour le compliment.
- Il n’y a ps de raison que ssh ne marche pas sur le port 22000. Mais certains firewalls bloquent ce port en sortie par défaut, donc il faut regarder de ce côté pour autoriser le flux.
- PHPSysinfo n’a rien d’indispensable, je m’en sers peu voire jamais.
- Eaccelerator est un cache d’opcode, c’est expliqué ici : http://www.yann.com/fr/accelerer-wordpress-partie-4-installer-des-caches-26/05/2009.html
- Awstats compile des statistiques de fréquentation à partir des logs Apache.
Bon courage pour la suite de votre découverte des joies de l’administration système.
le 9 December 2010 à 18:57 h
ah j’ai cru que c’était une blague le 22000 et que c’était une valeur beaucoup trop grande
j’avais rien compris alors
je peux essayer un nombre au pif alors ? genre 3450 ?
pour les joies de l’administration pour l’instant ça va c’est cool

J’aime beaucoup recevoir mon petit logwatch tous les matins. C’est très rigolo tous ces 404
//mysqladmin/: 1 Time(s)
//phpMyAdmin/: 1 Time(s)
//phpmyadmin/: 1 Time(s)
//pma/: 1 Time(s)
Encore merci !
Liaz
le 9 December 2010 à 19:04 h
@Liaz :
- Il ne faut pas utiliser un numéro de port “usuel” d’Un*x. Donc en général on choisit des numéros supérieurs à 10000. Même au-dessus de 10000 il existe quelques numéros réservés (mais rarement utilisés). Voir ici : http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
En principe 22000 ou 22001 ou 22xxx… sont dispos et fonctionnent.
- tous ces 404 sont les villains robots hackeurs qui cherchent phpMyAdmin mais le trouveront jamais là où vous l’avez mis si vous avez suivi mes conseils… on est trop forts !
le 9 December 2010 à 20:10 h
> En principe 22000 ou 22001 ou 22xxx… sont dispos et fonctionnent.
ok merci beaucoup ! j’essaie ça dès demain
> tous ces 404 sont les villains robots hackeurs qui cherchent phpMyAdmin mais le trouveront jamais là où vous l’avez mis si vous avez suivi mes conseils… on est trop forts !
gniarc gniarc gniarc

on les a bien eu
merci !
le 17 December 2010 à 20:28 h
Youpi !
)
bon j’ai mis un peu plus longtemps que prévu avant de tester mais c’est bon !
J’ai changé le port d’écoute de ssh, si je ne mets pas -p 22030 ça ne marche pas
(évidemment c’est pas 22030
C’est trop cool !
Merci pour tout yann !
et à bientôt sur d’autres articles
le 6 May 2011 à 17:05 h
[...] Tous les serveurs dédiés OVH et Kimsufi sont fournis avec une espace d’hébergement sur FTP gratuit. L’espace est limité mais il permet tout de même de sauvegarder l’essentiel des données systèmes d’un serveur web sous GNU/Linux, et en général également les sauvegardes de base de données et les fichiers de contenus de vos sites. Voici un mémo qui explique pas à pas comment activer votre espace de sauvegarde gratuit, puis comment mettre en place une politique de sauvegarde automatisée de vos fichiers les plus précieux. Pour rappel, mon guide de configuration rapide d’un serveur web LAMP sous Debian Linux chez OVH se trouve ici. [...]
le 9 May 2011 à 23:00 h
[...] (rappel : mon guide de configuration d’un environnement web LAMP complet sous Debian, par exemple sur un ser…) [...]
le 19 May 2011 à 17:43 h
[...] plus appropriée pour héberger des sites web dynamiques ! Vous pouvez maintenant suivre mon guide d’installation pas à pas pour configurer entièrement votre serveur web dédié chez O…. addthis_url = [...]
le 19 May 2011 à 23:22 h
[...] septembre 2009, j’avais écrit un tutoriel détaillé sur la configuration d’un serveur dédié OVH qui a remporté un grand succès. Aujourd’hui, il est temps de remettre à jour ce guide [...]
le 13 November 2011 à 9:00 h
Bonjour
Merci pour cette config !!
Par contre, eAccelerator n’est plus maintenue ? Il n’y a plus rien sur leur site.
Est ce passager ou faut il aller vers autre chose comme xcache?
le 14 November 2011 à 11:06 h
Le site eaccelerator.net semble effectivement inactif depuis quelques jours, ce n’est pas la première fois que eAccelerator “disparaît” des écrans suite à un déménagement un peu brusque. On trouve toujours les sources ici sur SourceForge : http://sourceforge.net/projects/eaccelerator/files/eaccelerator/