Le but de cet exercice est de mettre en place un serveur Web.
Créez un utilisateur et un groupe.
Sous Redhat, ce n'est pas le groupe www-data qui est utilisé mais tout simplement le groupe apache. Je vais donc utiliser celui-ci.
Maintenant, je vais créer un utilisateur qui sera membre du groupe apache.
[adminbdd ~]$ useradd -s /sbin/nologin -d /var/www/html/monsiteweb -g apache monsiteweb [adminbdd ~]$ groups monsiteweb
monsiteweb : apache
[adminbdd ~]$ grep monsiteweb /etc/passwd
monsiteweb:x:9002:48::/var/www/html/monsiteweb:/sbin/nologin
Créez la hiérarchie de répertoires pour accueillir votre site, en la justifiant. Quel est l’intérêt d’une telle séparation ?
Ma hiérarchie est assez simple : un répertoire (et un utilisateur) par site web pour la racine du site. Il peut être également intéressant de prévoir un accès ftp pour l'utilisateur du site web.
[adminbdd html]$ tree
. `-- monsiteweb |-- log `-- www 3 directories, 0 files
Modifiez le fichier de configuration fourni dans la distribution d’Apache pour l’adapter à votre installation
Dans le fichier d'origine, /etc/httpd/conf/httpd.conf, il il y une directive intéressante qui permet d'éclater son fichier de configuration en plusieurs autres.
[adminbdd conf]$ grep conf.d httpd.conf
# Load config files from the config directory "/etc/httpd/conf.d". Include conf.d/*.conf
On va donc créer notre virtual host dans le répertoire conf.d.
[adminbdd conf.d]$ cat monsiteweb.conf
<VirtualHost *:80> ServerAdmin admin@monsiteweb.com DocumentRoot /var/www/html/monsiteweb/www ServerName monsiteweb.com ServerAlias monsiteweb.fr Header add X-Robots-Tag noindex,follow ErrorLog /var/www/html/monsiteweb/log/error_monsiteweb_com.log CustomLog /var/www/html/monsiteweb/log/access_monsiteweb_com.log combined <Directory "/var/www/html/monsiteweb/www"> Options +Indexes AllowOverride All </Directory> </VirtualHost>
Vérifions notre nouvelle configuration :
[adminbdd conf.d]$ apachectl -t
Syntax OK
Il faut maintenant procéder au redémarrage du service (ou un reload pour les sites en production !).
[adminbdd conf.d]$ /etc/init.d/httpd restart
Arrêt de httpd : [ OK ] Démarrage de httpd : [ OK ]
Créez quelques fichiers et répertoires à la racine de votre site et essayez d’y accéder depuis votre navigateur Web.
Avant de continuer, nous allons ajouter une entrée dans le fichier /etc/hosts pour faciliter les tests. Créons maintenant un index à la racine du site :
[adminbdd www]$ cat > index.html << EOF
> <html> > <head><title>www.monsiteweb.com</title></head> > <body> > <h2>It works !</h2> > </body> > </html> > EOF
Modification de quelques droits :
[adminbdd www]$ chown monsiteweb:apache index.html [adminbdd www]$ chmod 744 index.html [adminbdd www]$ ls -l
total 4 -rwxr--r-- 1 monsiteweb apache 97 juin 8 17:23 index.html
Test d'accès à notre super site web (via le navigateur Iron) :
Vérification des logs d'accès :
[adminbdd log]$ tail access_monsiteweb_com.log
192.168.10.204 - - [08/Jun/2012:17:05:04 +0200] "GET / HTTP/1.1" 403 312 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5" 192.168.10.204 - - [08/Jun/2012:17:05:04 +0200] "GET /favicon.ico HTTP/1.1" 403 323 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5" 192.168.10.204 - - [08/Jun/2012:17:13:00 +0200] "GET / HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5" 192.168.10.204 - - [08/Jun/2012:17:13:00 +0200] "GET /favicon.ico HTTP/1.1" 404 319 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5" 192.168.5.53 - - [08/Jun/2012:17:15:19 +0200] "GET / HTTP/1.0" 200 - "-" "Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8e-fips-rhel5" 192.168.10.204 - - [08/Jun/2012:17:27:17 +0200] "GET / HTTP/1.1" 200 97 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5" 192.168.10.204 - - [08/Jun/2012:17:27:17 +0200] "GET /favicon.ico HTTP/1.1" 404 319 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5" 192.168.5.53 - - [08/Jun/2012:17:29:21 +0200] "GET / HTTP/1.0" 200 97 "-" "Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8e-fips-rhel5" 192.168.10.204 - - [08/Jun/2012:17:29:48 +0200] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5" 192.168.10.204 - - [08/Jun/2012:17:29:48 +0200] "GET /favicon.ico HTTP/1.1" 404 319 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Iron/19.0.1100.0 Chrome/19.0.1100.0 Safari/536.5"
Quelles doivent être les permissions de vos fichiers pour qu’Apache puisse y accéder ?
Etant donné qu'Apache s'éxécute en tant qu'utilisateur apache membre du groupe apache [...]
[adminbdd log]$ grep apache$ /etc/httpd/conf/httpd.conf
User apache Group apache
[...] il lui suffit d'avoir un accès "r" pour les fichiers et "rx" pour les dossiers pour qu'il puisse y accéder (que ce soit en tant que groupe ou autre).
Pour changer d'air et ne plus utiliser Telnet (pour une fois), je vais installer et essayer netcat (même si au final c'est la même chose) :
[adminbdd log]$ yum install nc.x86_64
Loaded plugins: fastestmirror, rhnplugin Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package nc.x86_64 0:1.84-10.fc6 set to be updated --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================= Package Arch Version Repository Size ============================================================================================================================= Installing: nc x86_64 1.84-10.fc6 centos5-x86_64 56 k Transaction Summary ============================================================================================================================= Install 1 Package(s) Upgrade 0 Package(s) Total download size: 56 k Is this ok [y/N]: y Downloading Packages: nc-1.84-10.fc6.x86_64.rpm | 56 kB 00:00 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : nc 1/1 Installed: nc.x86_64 0:1.84-10.fc6 Complete!
Une simple requête HTTP pourrait être par exemple :
[root@CentOS_AdminBDD agilan]# nc www.w3.org 80 > output
GET / HTTP/1.1 Host: www.w3.org
[root@CentOS_AdminBDD agilan]# head -n 20 output
HTTP/1.1 200 OK Via: 1.1 LILSISAFWPX Connection: Keep-Alive Proxy-Connection: Keep-Alive Content-Length: 31765 Expires: Fri, 29 Jun 2012 07:57:42 GMT Date: Fri, 29 Jun 2012 07:47:42 GMT Content-Location: Home.html Content-Type: text/html; charset=utf-8 ETag: "7c15-4c38a0e14f400;89-3f26bd17a2f00" Server: Apache/2 Vary: negotiate,accept TCN: choice Last-Modified: Thu, 28 Jun 2012 15:33:36 GMT Accept-Ranges: bytes Cache-Control: max-age=600 P3P: policyref="http://www.w3.org/2001/05/P3P/p3p.xml" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Néanmoins, il est possible de simplifier encore. La requête HTTP la plus courte est : GET / HTTP/1.1
Apache permet aux utilisateurs de posséder leur propre espace Web.
Mettons en place un système identique à l’aide de mod_userdir.
L'activation du module userdir se fait très facilement. Pour cela, il suffit de l'activer dans le fichier de configuration /etc/httpd/conf/httpd.conf.
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # #UserDir disabled # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disabled" line above, and uncomment # the following line instead: # UserDir public_html </IfModule>
Ensuite, il ne reste plus qu'à créer le dossier public_html et à redémarrer le service httpd.
[root@CentOS_AdminBDD cvanvincq]# mkdir public_html; cd public_html/ [root@CentOS_AdminBDD public_html]# cat > index.php << EOF
> <?php > echo "<h2>It works !</h2>"; > ?> > EOF
[root@CentOS_AdminBDD public_html]# /etc/init.d/httpd restart
Stopping httpd: [ OK ] Starting httpd: [ OK ]
Il ne reste plus qu'à aller sur l'url http://127.0.0.1/~cvanvincq/ pour obtenir le message "It works !".