Hostathome : script d'installation de serveur

Bonjour,

souhaitant permettre au maximum de monde d’avoir un serveur chez soi, sans pour autant être rempli de connaissances, j’ai commencé à écrire un script dans ce sens (voir la capture d’écran qui va bien)
Les services qui peuvent actuellement être installés sont :

  • Un serveur http pour votre site web. https et php disponibles
  • Un serveur sftp pour partager les fichiers
  • Un serveur de courriel (bye bye gmail)
  • Installation de squirrelmail

Cependant, j’aurais besoin de vos conseils, vous qui êtes bien plus avertis que moi dans ce domaine. Je vous invite donc à tester ce script, à vérifier les fichiers de configuration utilisés…

Tous les conseils, rapports de bogues et suggestions pour améliorer la sécurité du serveur sont les bienvenus.

Le script est ici : hg.tuxfamily.org/mercurialroot/h … hostathome

Vous pouvez cloner le projet et tous les dossiers avec cette commande (il faut le paquet mercurial)hg clone http://hg.yeuxdelibad.net/hostathome

N’hésitez pas à contribuer. Plus d’infos ici : yeuxdelibad.net/Programmation/Hostathome.html

Intéressant 8)

Après un très rapide coup d’oeil, je dirais déjà :

[ul]
[mono]#!/bin/bash[/mono] serait mieux
Attention à bien protéger toutes les variables shell avec des “” (cf lignes 10, 57, 58 par exemple)
[/ul]

Sur ce je me prépare une petite VM pour tester plus en avant :stuck_out_tongue:

Pour bash je ne suis pas sûr, je croyais qu’il fallait au contraire laisser /bin/sh pour plus de portabilité?

Pour les variables non protégées, tu as sans doute raison. Cela dit, ce sont des variables qui normalement ne doivent pas contenir d’espace (nom de domaine)

J’ai commencé à tester dans ma VM.

  • fail2ban : il vaut mieux copier le fichier /etc/fail2ban/jail.conf vers /etc/fail2ban/jail.local, et faire les modifs dans ce dernier.
  • si on relance la sécurisation une deuxième fois : erreur de portsentry : “Starting anti portscan daemon: aatcp is not a valid mode.”

Je pense aussi que [mono].sh[/mono] est plus “portable”, bien que pour mes scripts perso, j’utilise [mono].bash[/mono], mais je suis seul à m’en servir.

“portable”? C’est un script pour Debian, donc ça n’a pas de sens :stuck_out_tongue:

(Et puis bash existe sur tous les systèmes)

+1

Par contre je ne suis pas fan de l’idée (désolé).

Pour moi soit il faudrait créer une distribution de Debian (avec les outils de Debian live par exemple), soit créer un paquet.

L’un est vraiment simple pour l’utilisateur (pratique pour les tests).
L’autre est vraiment génial d’un point de vu pérennité et souplesse (découverte d’une faille dans la configuration d’un logiciel ? Mise à jour du paquet => tout le monde en profite rapidement; finalement pas envie de continuer l’aventure ? apt-get purge du paquet tous les paquets qui ont étaient installé par le jeu des dépendances partent avec (pratique pour les tests); finalement je me suis trompé dans mes réponses à certaines question ? dpkg-reconfigure et c’est partie (pratique pour les tests); packaging simple => tu as un seul fichier qui contient tous les fichiers de configuration séparés).

Mais ce n’est que mon humble point de vu. Je suis vraiment désolé de casser un peu le truc, je ne voudrais pas casser ta dynamique.

Note : que je dis tout ça sans avoir lu ton script encore.

Salut,

Dommage de devoir rectifier pour soi les défauts utf8, sans en faire profiter les copains pour rester en dehors du wiki :blush:

Moi je trouve que c’est pas mal comme script. Quand on voit le nombre de personnes qui ont des difficultés pour configurer un serveur de mail par exemple, dans la section “support” du forum.

Une première petite relecture du script.
improvements.patch.txt (153 Bytes)

@agentsteel : merci, c’est corrigé. Voilà pourquoi il faut toujours quelqu’un pour tester.

@Misterfreez :

  • L’idée de créer une distribution existe déjà, c’est YUnohost si je ne me trompe pas. C’est en effet une excellent idée, mais 2 points me dérangent dans cette démarche :
    - Cela oblige à créer une image par architecture (armhf, i386…). Un script n’est pas aussi restrictif.
    - La distribution est livrée en bloc. J’étais un peu gêné d’imposer les programmes. Par exemple, squirrelmail demande beaucoup moins de ressources que roundcube. J’aimerais pouvoir proposer les 2, chacun choisit celui qu’il préfère ou peut faire tourner
  • L’idée du paquet requiert tout simplement des compétences que je n’ai pas actuellement.
    - De plus, pour le peu que j’en sais, cela demanderait aussi de créer des scripts de configuration et d’installation pour chacun des services proposés. De ce côté là, cela reviendrait un peu au même.
    - Pour reconfigurer si on s’est trompé, tel qu’est le script actuellement, il suffit de le relancer, on repart d’une configuration vierge par défaut.
    - Il n’est pas exclu que certains service qui seront disponibles à l’installation ne sont pas forcément empaquetés (owncloud par exemple)

[quote=“Misterfreez”]Je suis vraiment désolé de casser un peu le truc, je ne voudrais pas casser ta dynamique.[/quote]Aucun souci. Le projet n’est pas figé, c’est intéressant à tout point de vue.

EDIT : je vais lire le patch, merci
@ggoodluck47 : Ce n’est pas la première fois que l’on me parle de défauts utf-8, et à chaque fois c’est lorsque j’édite les fichiers avec vim. Il me manquerait quelque chose dans mon [mono]~/.vimrc[/mono]? Pour contribuer, ne te gêne pas, le dépot mercurial est en accès public (et c’est tout aussi pratique qu’un wiki pour développer)

Allez un 1er commit de ma part, c’est ma première fois avec Mercurial en plus :stuck_out_tongue:

Chouette! :023
J’avais ajouté un test, mais ta méthode est en fait bien plus simple :slightly_smiling:
Du coup on peut retirer ce test inutile :wink:

hg push me renvoie une erreur “abandon : HTTP Error 400: Bad Request”?

EDIT : j’ai re-cloné le dépôt, ça marche (désolé, je suis grand débutant avec les logiciels de gestion de versions)

Partie nginx à re-tester pour être sûr, merci!

Merci! :041
Tu as essayé plusieurs fois? Mon serveur n’est pas non plus une flèche hein, il a pu mal répondre la première fois :slightly_smiling:

J’ai vu que tu as retiré l’écoute sur le 80 lorsque je propose http et https. Une raison particulière? Car là tu forces l’utilisation de https en fait, cela revient à https seul. EDIT Je n’ai rien dit, c’est très bien comme ça. Il faut juste que je change la description.

@@ -109,19 +109,19 @@ 1.67 ssl_certificate_key /etc/ssl/private/$HOSTNAME.pem;"\ 1.68 /etc/nginx/sites-available/"$HOSTNAME".conf 1.69 ;; 1.70 - "Oui avec http") 1.71 - dosslcert "$HOSTNAME" 1.72 - sed -i "s/listen 80;/listen 80 443 ssl;/g" /etc/nginx/sites-available/"$HOSTNAME".conf 1.73 + "Oui avec http") 1.74 + dosslcert "$HOSTNAME" 1.75 + sed -i "s/listen 80;/listen 443 ssl;/g" /etc/nginx/sites-available/"$HOSTNAME".conf

Ne pas oublier de faire [mono]hg pull && hg update[/mono] pour éviter d’écraser les modifications faites entre temps :slightly_smiling:

[quote=“thuban”]Merci! :041
Tu as essayé plusieurs fois? Mon serveur n’est pas non plus une flèche hein, il a pu mal répondre la première fois :slightly_smiling:

Ne pas oublier de faire [mono]hg pull && hg update[/mono] pour éviter d’écraser les modifications faites entre temps :slightly_smiling:[/quote]

c’est sans doute pour ça que ça ne marchait pas :stuck_out_tongue:

il y aura qques petites optimisations à faire (mais ce n’est pas le plus important dans l’immédiat)

par exemple, la forme [mono]HOSTNAME="$(<$tmpfile)"[/mono] remplace avantageusement celle-ci [mono]HOSTNAME="$(cat $tmpfile)"[/mono]
(attention à ne pas se tromper de sens pour le < )

Aussi, doubler les [[ ]] pour les tests.

Plus d’infos là
wiki.bash-hackers.org/scripting/obsolete

EDIT: je crois que la config de nginx pour le php ne fonctionne pas

Je ne connaissais pas ces raccourcis. C’est chouette j’en apprend du coup!
Mais on ne risque pas de faire trop de “bashisme”?

Au risque de me répéter, il y a beaucoup plus compétent que moi pour faire ce genre de chose : vous.

Ne pas oublier de rajouter votre petit nom à la liste des b personnes ayant participé au script[/b] (voir le fichier AUTHORS lorsque vous réalisez un “commit”)

Quand tu fait du C, tu as peur de faire trop de C-isme ?

Voila un patch : paste.isalo.org/151 (c’est quoi cette histoire d’interdire certaines extensions dans les fichiers join ? comme si ça changeait quelque chose)

Ce que je veux dire, c’est qu’il faut garder le script lisible par tous.
Certes, il est optimisé en utilisant certaines syntaxes propres à bash, mais il ne faut pas perdre de vue qu’un maximum de monde devrait pouvoir comprendre le script.

Merci pour ton patch, il y a vraiment des idées très chouettes :slightly_smiling: c’est super. Je le rajoute ce soir ou demain selon le temps dont je dispose après le boulot (à moins que tu fasses le commit toi même entre temps :wink: )

Ça marchait pas hier soir (ni aujourd’hui) éventuellement je répliquerais le projet sur bitbucket.