SELinux

From mediawiki.org
This page is a translated version of the page SELinux and the translation is 100% complete.
Other languages:
Cette page explique comment configurer correctement les contextes SELinux[1] et les booléens de sorte à ce que votre serveur web (probablement Apache) puisse y accéder.

Par ailleurs, vous pouvez désactivez SELinux pour httpd seulement, en utilisant l'une des commandes suivantes, pour contourner les problèmes durant le développement :

  • setsebool -P httpd_disable_trans false
  • semodule -r httpd
  • semanage permissive -a httpd_t

Vous devez déterminer laquelle de ces lignes de commande est à utiliser en fonction de la configuration de votre système.

Dans tous les cas, vous devez exécuter les commandes en tant qu'utilisateur root.

Pour installer MediaWiki sur un système exécutant SELinux exécutez les étapes suivantes supplémentaires :

chcon -R -t httpd_user_content_t /path/to/mediawiki_install

Après avoir construit l'extension fileinfo PHP :

chcon -t httpd_sys_script_exec_t  /usr/lib/php/modules/fileinfo.so

Tout fichier supplémentaire exécuté par Apache avec 'exec()' doit être httpd_user_script_exec_t (fichiers PHP non compris). Les fichiers qui sont httpd_*_script_exec_t peuvent ne pas être accessibles en écriture par le processus Apache. Idéalement les fichiers (PHP) MediaWiki exécutables doivent tous être initialisés à httpd_user_script_exec_t, mais cela n'est pas obligatoire dans les règles actuelles de SELinux.

Répertoires de téléversement

Si les téléversements sont autorisés dans votre configuration, vous pouvez rencontrer un problème de contexte à cause du répertoire tmp utilisé pendant le processus de téléversement de fichiers. Vous pouvez contourner ce problème en créant un répertoire tmp dans /var/www/ au lieu d'utiliser /tmp ou le 'répertoire par défaut' pour upload_tmp_dir dans /etc/php.ini . Assurez-vous de bien passer les commandes chmod chgrp et chcon sur ce nouveau répertoire tmp.

Téléverser des images

Si les répertoires MediaWiki étaient copiés ou déplacés pour migrer d'un ancien système vers un autre qui a activé SELinux (forçage) alors les fichiers copiés/déplacés et les répertoires pourraient ne pas avoir les types corrects de contextes SELinux. Si c'est le cas, les téléversements d'images et la création de vignettes peuvent être empêchées par SELinux même si le propriétaire et les droits sont déja définis correctement. Le fichier script includes/GlobalFunctions.php (et éventuellement d'autres fichiers .php du répertoire d'installation de MediaWiki) doivent avoir le type de contexte SELinux httpd_sys_script_exec_t pour permettre l'utilisation de la commande PHP function.mkdir . Sans le type de contexte correct pour les scripts, les téléversements de fichiers ou la création de vignettes peuvent échouer en essayant de créer un répertoire sur le serveur via le hachage. A partir de la racine du répertoire d'installation du wiki, vérifiez le contexte SELinux correct en saisissant la commande :

ls -Z includes/GlobalFunctions.php

Si le type de contexte sécuritaire SELinux listé n'est pas httpd_sys_script_exec_t, modifiez le avec la commande :

chcon -t httpd_sys_script_exec_t includes/GlobalFunctions.php

En supposant que les autorisations (755) et que l'utilisateur (habituellement 'apache') du répertoire des images sont corrects, toute l'arborescence du répertoire des images doit avoir le type de contexte SELinux httpd_sys_script_rw_t afin que les scripts (fichiers .php) qui s'exécutent dans le processus du serveur web aient un accès autorisé en lecture/écriture. Vérifiez cela avec la commande :

ls -dZ images

Si le type de contexte sécuritaire SELinux listé n'est pas httpd_user_rw_content_t, modifiez le avec la commande :

chcon -R -t httpd_user_rw_content_t images

La génération des vignettes peut échouer avec des messages d'erreurs tels que ulimit: cpu time/virtual memory/file size: cannot modify limit: Permission denied. Pour autoriser cela vous devez activer httpd_setrlimit :

setsebool -P httpd_setrlimit 1

Deboguer les journaux de connexion

Si vous voulez enregistrer les traces wfDebug() de MediaWiki dans un fichier, et que vous avez suivi scrupuleusement la page How to debug mais que rien ne s'inscrit dans votre fichier journal, il est possible que vous deviez initialiser le contexte SELinux du fichier de trace à httpd_sys_script_rw_t en utilisant la commande suivante :

chcon -t httpd_sys_script_rw_t /path/to/your/debug/file

Activer InstantCommons

Si vous voulez activer la fonctionalité InstantCommons sur votre wiki, et que votre système implémente SElinux, vous devez d'abord dire à Selinux d'autoriser que les scripts HTTPD et que les modules puissent se connecter au réseau. Pour cela, saisissez la commande suivante :

getsebool -a

Regardez la valeur du booléen : httpd_can_network_connect. S'il vaut déjà on, il n'y a rien à faire, Selinux ne va pas empêcher les scripts HTTPD et les modules de se connecter au réseau. Néanmoins, s'il vaut off, saisissez la ligne de commande suivante pour l'activer de manière permanente :

setsebool -P httpd_can_network_connect on

L'option -P signifie de manière permanente. Si vous ne l'utilisez pas, la valeur du booléen sera réinitialisée lors du prochain redémarrage de votre système.

C'est cela. Assurez-vous que la modification a bien été mise en œuvre en exécutant getsebool -a une fois de plus, et en vérifiant que la valeur a été mise à jour correctement. Si c'est le cas, vous pouvez maintenant activer InstantCommons avec succès.

Envoyer des courriels

Les courriels de MediaWiki peuvent ne pas fonctionner du tout, ou vous pouvez obtenir Unknown error sur des actions concernant le courriel. Vous devez autoriser l'envoi des courriels par le serveur web. La commande suivante peut activer cela :

setsebool -P httpd_can_sendmail on

Pygments pour SyntaxHighlight

Une discussion concernant cette section se trouve sur la Page de discussion.

Extension:SyntaxHighlight utilise une bibliothèque appelée pygments qui fournit la coloration syntaxique. Si la coloration syntaxique ne fonctionne pas, vérifiez les droits d'exécution sur le répertoire pygments :

semanage fcontext -a -t httpd_sys_script_exec_t '/<path_to_mediawiki>/extensions/SyntaxHighlight_GeSHi/pygments(/.*)?'
restorecon -R -v /<path_to_mediawiki>/extensions/SyntaxHighlight_GeSHi/pygments/

Autres trucs pratiques de SELinux

Pour découvrir si SELinux est activé sur votre système :

getenforce

audit2allow est un script Perl qui interprète les erreurs SELinux et construit les bonnes règles pour résoudre différents problèmes.

/usr/bin/audit2allow -i /var/log/messages

Il fournit les lignes à ajouter à vos règles pour autoriser les actions qui ont échoué.

Dans /var/log/messages vous devriez trouver un ID correspondant à l'erreur SELinux qui est apparue.

sealert -l <id>

donnera davantage d'informations. Une source possible d'erreur est que vous avez copié les fichiers d'installation décompressés d'un répertoire racine (home) vers une zone système, invalidant par là leur contexte de sécurité. Ceci peut être résolu par une commande telle que...

restorecon -R -v /var/www/html/mediawiki

Lorsque rien d'autre ne fonctionne, essayez ceci

man setenforce

Mise à jour des contextes de politique locale

Les changements effectués en utilisant chcon ne sont que temporaires, dans la mesure où ils seront écrasés par toute action ultérieure qui renomme les fichiers (par exemple restorecon, semanage, make relabel, etc). Pour éviter cela, vous pouvez ajouter des entrées de contexte personnalisées à votre politique locale à l'aide de l'utilitaire semanage. Ces entrées sont enregistrées dans un fichier séparé, file_contexts.local, qui ne fait pas partie des règles SELinux de base. Les entrées de ce fichier réécrasent toujours les entrées des règles de base. Because the final argument for semanage is a regular expression, make sure to enclose it in double-quotes (or single quotes) to prevent the shell attempting to interpret the pattern as a globmatch and mangling the entry.

On most systems where SELinux is being used there are two different sets of types that need to be applied depending on where MediaWiki is installed and how it will be invoked. If you are installing MediaWiki to a location like /var/www/html where it will not be accounted to any particular real user, then you should use the system ('sys') types. If you are installing MediaWiki to be used by a single user from their public_html directory or similar mechanism, you should use the user types. Il existe actuellement trois (pour un total de six) types SELinux qui sont pertinents pour les installations MediaWiki.

  1. httpd_(sys|user)_content_t - pour les fichiers que le serveur web est autorisé à lire et à envoyer aux navigateurs web sur le réseau.
  2. httpd_(sys|user)_rw_content_t - pour les fichiers et les répertoires dans lesquels le serveur web est autorisé à lire et à écrire librement.
  3. httpd_(sys|user)_script_exec_t - pour les fichiers qui sont des scripts que le serveur web doit être autorisé à exécuter.

For example, the following would be appropriate for most people installing MediaWiki to a dedicated web server, using /var/www/html for the root of the MediaWiki installation:

MEDIAWIKIROOT=/var/www/html
semanage fcontext -a -t httpd_sys_content_t "^${MEDIAWIKIROOT}(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "^${MEDIAWIKIROOT}/images(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "^${MEDIAWIKIROOT}/cache(/.*)?"
semanage fcontext -a -t httpd_sys_script_exec_t "^${MEDIAWIKIROOT}/.*\.php5?"

This stanza would be appropriate for most people installing MediaWiki to a normal user's public_html directory for their personal use.

MEDIAWIKIROOT=/home/someuser/public_html
semanage fcontext -a -t httpd_user_content_t "^${MEDIAWIKIROOT}(/.*)?"
semanage fcontext -a -t httpd_user_rw_content_t "^${MEDIAWIKIROOT}/images(/.*)?"
semanage fcontext -a -t httpd_user_rw_content_t "^${MEDIAWIKIROOT}/cache(/.*)?"
semanage fcontext -a -t httpd_user_script_exec_t "^${MEDIAWIKIROOT}/.*\.php5?"

The semanage utility only changes the database used to declare and assign SELinux contexts. It does not apply these rules to any files already present in the filesystem. Once you have declared the new context rules you must apply them to the filesystem using the restorecon command as shown below. The -R argument makes restorecon work recursively, the -F argument forces the replacement of any contexts applied to files which do not match what is in the database, and the -v argument makes restorecon show you which files it altered the contexts for so that you can verify your newly declared rules are being applied.

restorecon -RFv /path/to/mediawiki/install

Références