Ticket #207 (closed: fixed)

Opened 9 years ago

Last modified 7 years ago

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:3 Changed 9 years ago by jerome

  • Resolution set to fixed

comment:4 Changed 9 years ago by jerome

  • Status changed from assigned to closed

comment:5 Changed 9 years ago by jerome

  • Status changed from closed to assigned
  • Resolution fixed deleted

ajout traduction en anglais

comment:6 Changed 9 years ago by jerome

do_domaines.sh commité dans le cvs.

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:14 Changed 9 years ago by anarcat

  • Owner changed from jerome to anarcat

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.

Note: See TracTickets for help on using tickets.