SYSTEME * Tous les utilisateurs sont dans le même répertoire, ex: /home/alternz/users/#/toto ou # est le dernier chiffre de l'id user (répartition homogène) * Chaque user a un UID >= 2000, et un GID = az-users Ses fichiers sont settés avec les bonnes permissions * AlternZ c'est surtout: une api, un desktop web gérant les comptes, un set de scripts shell automatisant les tâches etc. Pas de modification arbitraire des fichiers de conf des softs installés * Quotas diques : ils sont déjà gérés pour le FTP et le mail par les serveurs en eux-mêmes Les quotas pourraient donc être dépassés soit par les bases mysql, soit par les fichiers créés par les scripts utilisateurs. Il faut donc tout de même un quota en dur dans le FS, le mieux est de prendre quotatool, par contre pour la gestion des quotas par user faut faire un cron ou un truc comme ça qui update les changements de quotas... Un peu relou. Ptet par défaut une gestion des quotas 'lazy' avec limite par ftp+mail + cron qui prévient des dépassements et éventuellement bloque le compte, en laissant une possibilité de gérer les quotas stricts (mais à configurer par l'utilisateur lui-même). HTTP * Le bureau alternz est configuré par un virtualhost en dur * NON: Les users sont configuré via mod_vhs et donc une base mysql Ca permet des vhosts dynamiques et une config de sécu php par vhost NON NON NON: mod_vhs est super relou à utiliser, il utilise une lib pourrie (libhome) et pas packageable debian. * suPHP c'est sympa mais ça utilise PHP en CGI et niveau perfs c'est pas ça C'est mieux de privilégier mod_php * Apache2 MPM ITK permet de lancer apache avec uid spécifique selon le vhost (bien pratique donc), mais ça tourne en suid donc risques potentiels (par exemple une faille dans mod_ssl et boum...) Mais on peux penser que c'est globalement secure car packagé dans debian depuis etch (paquet apache2-mpm-itk). cf. http://wiki.boum.org/Frangipane/WebSiteDiscussion * Modification de fichiers de conf apache à la volée pour chaque user. Permet une sécurisation PHP, mais aussi et surtout de laisser plein d'options possibles. Et aussi niveau perfs c'est parfait. Seul inconvénient il faut reload apache régulièrement. Exemple: /etc/apache2/sites-enabled/900-bohwaz > contient les vhost de l'user bohwaz Ca permet aussi de configurer les options php en dur (open_basedir, etc), mais surtout de laisser des choix de config à l'utilisateur (désactiver les .htaccess par exemple), et aussi on peux imaginer une option permettant d'utiliser vhost_alias On peux utiliser le package Config de pear pour parser les fichiers de conf des users directement en php, ça a l'air sympa :) cf. http://pear.php.net/manual/en/package.configuration.config.php DNS * Utilisation de mydns tout se fait en mysql * Tout est immédiat donc * Ca c'est pour l'hébergement de dns, pour la résolution libre à tout un chacun de mettre un bind dans un coin FTP * On utilise pureftpd et donc via mysql * Quotas gérés par pureftpd, aucun problème de noyau spécifique DOMAINES * Tout est géré via la base de données standard de mydns (ou pas) MYSQL * Chaque user peut avoir son serveur mysql, grâce à mysql instance manager * Cf. http://gentoo-wiki.com/HOWTO_Setup_mysql_virtual_hosting * Stockage des données mysql dans le répertoire de l'user directement * Ports des serveurs mysql utilisateurs de 33000 à 33999 (max. 1000 users ?) * Serveur mysql système sur 3306 MAILS * Postfix / SSL / POP3 / IMAP / SSL * Cf. http://gentoo-wiki.com/HOWTO_Email_Virtual_Hosting_with_Courier_and_MySQL ? PHP/SCRIPTS * Tout un set de scripts est utilisable par les scripts des hébergés permettant la gestion des données de leur comptes et automatiser les tâches Les hébergés sont de toutes façons restreints à ces scripts Exemple: exec("az_ftp_accounts --create --login test@bohwaz --password abcd --path /wiki/ --quota 10"); * Dans /home/alternz/userscripts/ API CORE * Dans /home/alternz/api/ * Classes réutilisables facilement quel que soit le contexte BUREAU * Dans /home/alternz/desktop/ * Utilisation de Template_Lite pour les templates du bureau. * Utilisation de gettext et smarty-gettext adapté à Template_Lite.