Le blog perso de Sam

Parce-que je le vaux bien

Mercredi

22/11/2006

Mongrel et les droits des fichiers

Je souhaite mettre en place un hébergement d’applications basés sur Ruby On Rails en utilisant Mongrel. L’objectif n’est pas de faire un hébergement mutualisé, mais de m’en imposer certaines contraintes afin de séparer ce que fait l’administrateur et le développeur.

Or par défaut Mongrel Cluster utilise un fichier de paramètres présent dans le répertoire config de l’application. De même que le fichier pid (permettant d’arrêter les processus) est présent dans le répertoire log. En cas de fausses manipulations du développeur c’est fâcheux. En cas de mauvaises intentions c’est pire (possibilité d’avoir les droits root en se débrouillant bien). Non pas que je soit suspicieux, mais j’aime bien cloisonner les choses lorsque cela les rends soit plus claires, soit plus sures.

Je propose ici la mise en place d’un script qui permette de gérer les clusters de Mongrel en utilisant des fichiers de configurations stockés totalement indépendamment de l’application d’une part (protégé contre toute modification), et d’autre part qui n’exécute jamais les script directement avec les droits de root afin de palier à toute manipulation frauduleuse des fichiers pid (il y aurait moyen de tuer n’importe quel processus).

Je pars ici du principe que Mongrel et Mongrel Cluster sont installés sur le système. Pour l’occasion le système sera un Ubuntu 6.06, mais rien n’interdit de le faire sur une autre distribution (ou un autre *nix) en adaptant un poil.

Avant tout chose, créons le répertoire qui contiendra tout les fichiers de configuration (seul root aura les droit d’y écrire !) :

sudo mkdir /etc/mongrel_cluster

Ensuite placez dans le répertoire /etc/mongrel_cluster les fichiers de configuration des applications en utilisant les options requises. Par exemple pour une application gérée par l’utilisateur test (avec toutes les options indispensables) :

sudo mongrel_rails cluster::configure -e production
-p 8000 -N 3 -c /home/test/mon_appli
--user test --group test
--config /etc/mongrel_cluster/test_mon_appli.yml

Entrons dans le vif du sujet : le script de démarrage (et d’arrêt). Consultez le script suivant et faites un copier/coller dans un nouveau fichier mongrel_all_cluster.rb dans /etc/init.d . Reste à permettre son utilisation au démarrage et à l’arrêt de la machine :

sudo chmod +x /etc/init.d/mongrel_all_cluster.rb
sudo /usr/sbin/update-rc.d mongrel_all_cluster.rb defaults

Et voilà, c’est fini, il ne reste plus qu’à tester.

Pour ajouter une application il suffit d’utiliser la commande de création d’un fichier de configuration comme illustré ci-dessus. Pour neutraliser une application il suffit de déplacer le fichier de configuration (ou l’effacer), ou plus simplement de le renommer temporairement car seuls les fichier finissant par .yml sont pris en compte.

Comme indiqué en introduction, ce n’est pas suffisant pour prétendre faire une hébergement mutualisé. Mais cela permet déjà de mettre le paramétrage à l’abri et d’éviter des élévations de privilèges ou des morts violentes de processus. Il y aurait encore pas mal de chose à faire pour sécuriser le système et les applications elles-même.

Ce script et ce post sont le fruits d’une étude de ma part, ce n’est pas en production. N’hésitez pas à vous en inspirez, et si vous avez mieux à proposer (ou des remarques à apporter), la porte est grande ouverte ;)

Samedi

11/11/2006

Compatibilité de wp-phpmyvisites

Je viens de mettre à jour ce blog vers WordPress 2.0.5 ainsi que l’outil de statistiques phpMyVisites vers la version 2.2, ce qui m’a permis de vérifier la compatibilité de mon plugin wp-phpmyvisites avec ces versions. Et bien… c’est ok ;)

Pour le téléchargement et les explications, se rendre sur cette page.

Vendredi

10/11/2006

Compiler Ruby et RubyGems sur Ubuntu 6.06

Bien qu’il soit possible d’installer Ruby sur Ubuntu 6.06 avec le gestionnaire de paquets, j’ai souhaité voir comment le faire en partant des sources. Si compiler Ruby en soit n’est pas un problème, il y a un petit piège au moment de compiler RubyGems. Mais comme je suis bon et généreux (qui a rigolé ?), je publie la procédure complète.

Read the rest of this entry »