Ticket #207 (closed: fixed)
safe_mode_gid pris en défaut
| Reported by: | jerome | Owned by: | anarcat |
|---|---|---|---|
| Priority: | immediate | Milestone: | alternc-0.9.3.1 |
| Component: | PHP | Version: | |
| Severity: | block | Keywords: | |
| Cc: |
Description
Il est possible, pour n'importe quel compte alternc, d'aller modifier tous les fichiers du système appartenants à www-data. Cela se fait au moyen de la fonction opendir() de php, et du bug dans le fonctionnement de la directive safe_mode_gid, qui ne fonctionne pas.
Il était prévu que cette sécurité serait effective grace à safe_mode_gid, car cela est supposé interdire l'accès à un fichier ou répertoire n'ayant pas le même groupe. Mais non.
It is possible, for any alternc account, to modify any file on the system that belongs to www-data. This is possible because of the php opendir() function and because of a bug in the safe_mode_gid php directive, that does not work properly.
We thought this woul not be possible because of the safe_mode_gid directive that, in theory, does not allow to open a file or directory that does not belong to the same group id. But that does not work.
ADDITIONAL INFORMATION: Pour appliquer ce changement, il est nécessaire de changer le programme de gestion des domaines, do_domaines.sh (en copie à ce bug), et d'appliquer un script pour intégrer l'existant (en copie également).
Voici les explications détaillées pour appliquer ce patch :
- Se logguer root
- installer le fichier do_domaines dans /usr/lib/alternc/system
- installer le fichier basedir_prot.sh dans /usr/lib/alternc
- Exécuter le script 0.9.1.sh qui va patcher les domaines déjà existants. Le script peut être interrompu et ré-exécuté sans problème, alors ne vous inquiétez pas.
The solution we choose now is to position the php open_basedir directive for each of the domains on the server.
To apply this patch, it is necessary to replace the program that manage domains, do_domaines.sh (take it from this bugtrack), and to apply a script to create these directives for existing domains.
Here are the detailled explanation to apply:
- Get a root shell
- install the file do_domaines in /usr/lib/alternc/system
- install the file basedir_prot.sh in /usr/lib/alternc
- Execute the 0.9.1.sh script which will patch existing domains. It can be interrupted, re-executed without harm, so don't worry.
Change History
comment:1 Changed 9 years ago by jerome
- Owner changed from anonymous to jerome
- Status changed from new to assigned
comment:2 Changed 9 years ago by jerome
NOTE
Ceci sont les anciennes procédures et ne sont plus valable. Voir les "informations complémentaires" pour la source véritable.
--
The information here is deprecated in favor of the directives in the "supplemental information" section.
The Anarcat
--
[ english follows ]
La solution adoptée pour résoudre ce problème est de positionner la directive php open_basedir pour chacun des domaines hébergés.
Pour appliquer ce changement, il est nécessaire de changer le programme de gestion des domaines, do_domaines.sh (en copie à ce bug), et d'appliquer un script pour intégrer l'existant (en copie également).
Voici les explications détaillées pour appliquer ce patch :
- Se logguer root
- Arrêter apache : # /etc/init.d/apache stop
- Arrêter crond : # /etc/init.d/cron stop
- Installer le paquet alternc-admintools : # apt-get update # apt-get install alternc-admintools
- Exécuter le script create_open_basedir.sh qui va intégrer l'existant
- Sauvegarder l'ancienne version de do_domaines.sh : # mv /usr/lib/alternc/system/do_domaines.sh /usr/lib/alternc/system/do_domaines.sh.old
- installer la nouvelle version de do_domaines.sh dans /usr/lib/alternc/system
- Ajouter la ligne suivante à la fin de /etc/apache/httpd.conf : Include /etc/apache/override_php.conf
- Dans le fichier /etc/apache/override_php.conf, supprimez la ligne concernant votre serveur. Si, par exemple, votre serveur se nomme domaine33.altern.org, supprimez la ligne Include /etc/apache/override_php/a/domaine33.altern.org
Sans cela, le bureau ne fonctionnerais plus correctement.
- Démarrer apache : # /etc/init.d/apache start
- Démarrer crond : # /etc/init.d/cron start
The solution we choose now is to position the php open_basedir directive for each of the domains on the server.
To apply this patch, it is necessary to replace the program that manage domains, do_domaines.sh (take it from this bugtrack), and to apply a script to create these directives for existing domains.
Here are the detailled explanation to apply:
- Get a root shell
- stop apache: # /etc/init.d/apache stop
- stop crond: # /etc/init.d/cron stop
- Install the alternc-admintools package: # apt-get update # apt-get install alternc-admintools
- Execute the create_open_basedir.sh script
- save old do_domaines.sh script: # mv /usr/lib/alternc/system/do_domaines.sh /usr/lib/alternc/system/do_domaines.sh.old
- install the new do_domaines.sh script in /usr/lib/alternc/system
- add this line at the end of /etc/apache/httpd.conf: Include /etc/apache/override_php.conf
- in the /etc/apache/override_php.conf file, delete the line concerning your server name. For exemple, if your server is domaine33.altern.org, simply delete this line: Include /etc/apache/override_php/a/domaine33.altern.org
If not, the alternc desktop won't work properly anymore
- start apache: # /etc/init.d/apache start
- start crond: # /etc/init.d/cron start
modifié le : 20/05 22:29
modifié le : 21/05 16:40
comment:5 Changed 9 years ago by jerome
- Status changed from closed to assigned
- Resolution fixed deleted
ajout traduction en anglais
comment:7 Changed 9 years ago by jerome
- Status changed from assigned to closed
- Resolution set to fixed
comment:8 Changed 9 years ago by anarcat
- Status changed from closed to assigned
- Resolution fixed deleted
Les scripts fournis pour la mise à jour ne sont pas les plus récents.
comment:9 Changed 9 years ago by anarcat
- Status changed from assigned to closed
- Resolution set to fixed
J'ai mis à jour les attachements du bug pour que les scripts d'upgrades les plus récents soit utilisés. Le script 0.9.1.sh sera intégré au prochain release et roulé automatiquement lors de la mise à jour. Mais n'attendez pas le 0.9.1! Vous pouvez dès maintenant appliquer la patch avec les directives émises dans un autre commentaire, en remplacant simplement l'appel à create_open_basedir.sh par 0.9.1.sh. Ne vous inquiétez pas, le script peut être appelé à plusieurs reprises sans problèmes.
Aussi, les dernières versions de ces deux scripts seront toujours disponibles via le CVS:
http://cvs.alternc.org/cgi-bin/viewcvs.cgi/alternc/install/scripts/upgrades/0.9.1.sh?rev=1.22&content-type=text/vnd.viewcvs-markup http://cvs.alternc.org/cgi-bin/viewcvs.cgi/alternc/dns/do_domaines.sh?rev=1.13&content-type=text/vnd.viewcvs-markup
comment:10 Changed 9 years ago by anarcat
- Status changed from closed to assigned
- Resolution fixed deleted
Argh.. il faut ré-écrire la doc d'installation maintenant.
comment:11 Changed 9 years ago by anarcat
J'ai mis les directives originales de jérome privées, puisqu'elles ne sont plus tout à fait à jour, et j'ai ajouté les directives d'applications dans les informations complémentaires.
comment:12 Changed 9 years ago by Meleis
"* Dans le fichier /etc/alternc/override_php.conf, supprimez la ligne concernant votre serveur. Si, par exemple, votre serveur se nomme domaine33.altern.org, supprimez la ligne
Include /etc/alternc/override_php/a/domaine33.altern.org "
Il faut penser aussi à virer tous les mail.* si non le webmail ne fonctionnera plus.
comment:13 Changed 9 years ago by anarcat
Je crois pour ma part qu'il serait plus simple d'arranger le webmail à la place.
En fait, je ne comprends même pas pourquoi il faut enlever la ligne en question.
modifié le : 21/05 19:39
comment:15 Changed 9 years ago by anarcat
Il y a encore quelques problemes avec le script 0.9.1.sh, c'est pourquoi je ne ferme pas le bug tout de suite.
- le bureau ne doit pas etre restreint
- le webmail non plus, car squirrelmail va fouiller un peu partout pour ses configs.
- peut etre que c'est pareil pour phpMyAdmin.
Pour ceci, on a qu'a verifier le target du symlink dans 0.9.1.sh pour voir s'il pointe vers /var/alternc/bureau/admin/webmail ou /var/alternc/bureau, par exemple.
modifié le : 21/05 20:27
comment:16 Changed 9 years ago by anarcat
mettre à jour la patch à la version la plus récente. Cette version prend en compte les symlinks vers le webmail (en les ignorant).
Il est fortement conseiller de mettre à jour à cette patch.
modifié le : 02/06 18:57
comment:17 Changed 8 years ago by arnaud_lb
Les fichiers apacheconf/x/* ne sont pas générés pour les sous domaines. En fait do_domaine.sh n'envoi pas le sous domaine dans l'argument lors de l'appel à basedir_prot.sh. Il faudrais remplacer la ligne ~520: echo "${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
par quelque chose comme ça: OVERRIDE_PHP_SUB="" ! [ "$SUB" = "" ] && OVERRIDE_PHP_SUB=${SUB}. echo "${OVERRIDE_PHP_SUB}${DOMAINE}@${USER}" >> $FIC_TMP_OVERRIDE_PHP
pour que le "/usr/lib/alternc/basedir_prot.sh $domain" quelques lignes plus bas ajoute bien la protection sur le sous domaine.
La fonction detruire_sous_domaine ne prend pas en compte le sous domaine non plus:
$rm -f "/var/alternc/apacheconf/$initial_domain/$DOM" sed -e "$DOM$/d" < /var/alternc/apacheconf/override_php.conf > /var/alternc/apacheconf/override_php.conf.$$ mv -f /var/alternc/apacheconf/override_php.conf.$$ /var/alternc/apacheconf/override_php.conf
Avec ce code ça fonctionne:
SB_DOM="" ! [ "$SB" = "" ] && SB_DOM=${SB}. SB_DOM=${SB_DOM}${DOM} $rm -f "/var/alternc/apacheconf/$initial_domain/${SB_DOM}" sed -i -e "${SB_DOM}$/d" /var/alternc/apacheconf/override_php.conf
comment:18 Changed 8 years ago by anarcat
- Status changed from assigned to closed
- Resolution set to fixed
- Milestone set to 0.9.3.1
basedir_prot.sh fonctionne maintenant, meme pour les sous-domaines.
