Installation et sécurisation d'une station Debian 3.0 stable15/05/2004
V. INSTALLATION ET SECURISATION D'UN SERVEUR D'APPLICATION WEBSPHERE
V.a. Installation
V.b. Configuration initiale
V.c. Reccomandations
V.d. Empreinte du système
V.e. Sauvegarde du système
V. INSTALLATION ET SECURISATION D'UN SERVEUR D'APPLICATION WEBSPHERE
Ce que nous abordons ici a été réalisé après le suivi de la partie
'IV. INSTALLATION ET SECURISATION D'UN SERVEUR APACHE MODSSL'.
Le CD d'installation utilise de Websphere contient la version 5.0 pour Linux et
je rappelle qu'IBM Websphere est un logiciel payant et que le piratage est
interdit.
Pour commencer, récupérez le fichier 'doc/InstallGuide_fr.PDF' et lisez le :)
Et pour finir, je n'aborde pas ici la configuration/administration du serveur
d'application en lui-meme.
L'installation du wrapper libsafe (presentee en 5.2. Installation du wrapper
libsafe) a été réalisée avec succès une fois l'installation de Websphere
terminée.
Cette partie présente la procédure à suivre pour une installation 'standard'
d'IBM Websphere Application Server.
mount -o remount,rw /usr
/etc/init.d/apache stop
cp /etc/apache/httpd.conf /etc/apache/httpd_before_was.conf
mkdir /usr/local/websphere500
chown root:root /usr/local/websphere500
chmod 755 /usr/local/websphere500
mkdir /usr/local/websphere500/install
mount /dev/cdrom /mnt
cd /usr/local/websphere500/install
cp /mnt/linuxi386/responsefile.txt .
Editez responsefile.txt de telle sorte que :
[...]
< -P wasBean.installLocation="C:\Program Files\WebSphere\AppServer"
> -P wasBean.installLocation="/usr/local/websphere500/appserver"
[...]
< -P mqSeriesBean.active="true"
< -P mqSeriesServerBean.active="true"
< -P mqSeriesSamplesBean.active="true"
> -P mqSeriesBean.active="false"
> -P mqSeriesServerBean.active="false"
> -P mqSeriesSamplesBean.active="false"
[...]
< -P ihsFeatureBean.active="true"
< -P ihsPluginBean.active="true"
< -P apachePluginBean.active="false"
> -P ihsFeatureBean.active="false"
> -P ihsPluginBean.active="false"
> -P apachePluginBean.active="true"
[...]
< -W nodeNameBean.nodeName="DefaultNode"
< -W nodeNameBean.hostName="127.0.0.1"
> -W nodeNameBean.nodeName="{YOUR_NODE_NAME}"
> -W nodeNameBean.hostName="{YOUR_IP_ADDRESS}"
[...]
< -W serviceSettingsWizardBean.active="true"
< -W serviceSettingsWizardBean.ihsChoice="true"
< -W serviceSettingsWizardBean.wasChoice="true"
< -W serviceSettingsWizardBean.userName="YOUR_USER_NAME"
< -W serviceSettingsWizardBean.password="YOUR_PASSWORD"
> #-W serviceSettingsWizardBean.active="true"
> #-W serviceSettingsWizardBean.ihsChoice="true"
> #-W serviceSettingsWizardBean.wasChoice="true"
> #-W serviceSettingsWizardBean.userName="YOUR_USER_NAME"
> #-W serviceSettingsWizardBean.password="YOUR_PASSWORD"
[...]
< -W defaultApacheConfigFileLocationBean.value=
> -W defaultApacheConfigFileLocationBean.value=/etc/apache/httpd.conf
[...]
cd /mnt/linuxi386/
./install -options /usr/local/websphere500/install/responsefile.txt
NDR : Des fichiers de log sont crées dans /tmp : vous pouvez suivre le
processus d'installation en les consultant.
Quand l'installation est terminée :
umount /mnt
mv /etc/apache/httpd_before_was.conf /etc/apache/httpd.conf
Ajoutez ce qui suit au fichier /etc/apache/httpd.conf avant les directives
VirtualHost
########################
### Plugin WebSphere ###
########################
LoadModule app_server_http_module\
/usr/local/websphere500/appserver/bin/mod_app_server_http.so
WebSpherePluginConfig\
/usr/local/websphere500/appserver/config/cells/plugin-cfg.xml
#Alias /WSsamples /usr/local/websphere500/appserver/WSsamples
#Alias /IBMWebAS/ /usr/local/websphere500/appserver/web/
cd /usr/local/websphere500/appserver/config/cells/
cp plugin-cfg.xml plugin-cfg.xml.orig
cd /usr/local/websphere500/appserver/bin
./GenPluginCfg.sh
/etc/init.d/apache start
=> Vérifiez que Apache tourne correctement.
=> Si vous rencontrez des erreurs, editez '/usr/local/websphere500/appserver/config/cells/plugin-cfg.xml'
et au niveau de la ligne
'<Log LogLevel="Error" Name="/usr/local/websphere500/appserver/logs/http_plugin.log"/',
remplacez 'Error' par 'Trace'.
=> Consultez ensuite le fichier '/usr/local/websphere500/appserver/logs/http_plugin.log'
après avoir essayé de relancer Apache.
Testez votre installation :
cd /usr/local/websphere500/appserver/bin/
./ivt.sh
NDR : Patientez ... Le message '>ADMU3200I: Server launched. Waiting for initialization status.'
dure longtemps !
=> Le test d'installation via 'ivt' lance également le serveur
d'applications par défaut (server1) et celui-ci reste lance à la fin du test.
=> Vous pouvez donc tester que WAS est bien installé en entrant
http://{@IP}/snoop dans un navigateur.
V.b. Configuration initiale
Restauration du 'read-only' sur /usr,
déplacement vers /var/was, attribution de permissions restreintes et
exécution du service WAS sous une identitée restreinteb
Stoppez le service Websphere si celui-ci est démarré :
cd /usr/local/websphere500/appserver/bin/
./stopServer.sh server1
Stoppez le serveur Apache si celui-ci est démarré :
/etc/init.d/apache stop
Création d'un nouvel utilisateur :
Créez un utilisateur pour le service Was et un groupe pour les
administrateurs was :
groupadd wasadm
groupadd was
adduser --no-create-home --disabled-password --quiet --ingroup was was
Changing the user information for was
Enter the new value, or press return for the default
Full Name []: Ibm Websphere user
Room Number []:
Work Phone []:
Home Phone []:
Other []: Disabled
Is the information correct? [y/n] y
passwd -l was && chsh -s /bin/false was
Créez des limites spécifiques à cet utilisateur was dans le fichier
/etc/security/limits.conf :
was hard memlock 128000
was hard nofile 32000
was hard cpu 100
Déplacement vers /var/was et restauration du 'read-only' sur /usr :
Vous devez avoir une partition /dev/sda12 dans /etc/fstab du type :
/dev/sda12 /var/was ext2 rw,noexec,nosuid,nodev 0 2
Vérifiez que la partition est montée, puis :
chown root:was /var/was
chmod 3770 /var/was
Créez les répertoires dans /var/was :
cd /var/was
cp -r /usr/local/websphere500/appserver/config/ .
cp -r /usr/local/websphere500/appserver/etc/ .
cp -r /usr/local/websphere500/appserver/installableApps/ .
cp -r /usr/local/websphere500/appserver/installedApps/ .
cp -r /usr/local/websphere500/appserver/logs/ .
cp -r /usr/local/websphere500/appserver/properties/ .
cp -r /usr/local/websphere500/appserver/temp/ .
cp -r /usr/local/websphere500/appserver/tranlog/ .
cp -r /usr/local/websphere500/appserver/wstemp/ .
Supprimez les répertoires dans /usr/local et créez les liens vers la
partition Was :
cd /usr/local/websphere500/appserver/
rm -rf config && ln -s /var/was/config/ config
rm -rf etc && ln -s /var/was/etc/ etc
rm -rf installableApps && ln -s /var/was/installableApps/ installableApps
rm -rf installedApps && ln -s /var/was/installedApps/ installedApps
rm -rf logs && ln -s /var/was/logs/ logs
rm -rf properties && ln -s /var/was/properties/ properties
rm -rf temp && ln -s /var/was/temp/ temp
rm -rf tranlog && ln -s /var/was/tranlog/ tranlog
rm -rf wstemp && ln -s /var/was/wstemp/ wstemp
Positionnez les permissions appropriées sur le répertoire /var/was :
cd /var/was
chown -R root:was *
find . -type d -perm -750 -exec chmod 2770 \{\} \;
find . -type f -perm -640 -exec chmod 660 \{\} \;
Positionnez les permissions appropriées sur le répertoire
/usr/local/websphere500 :
chown root:was /usr/local/websphere500 /usr/local/websphere500/appserver\
&& chmod 750 /usr/local/websphere500 /usr/local/websphere500/appserver
cd /usr/local/websphere500/appserver
chown -R root:was *
find . -type d -exec chmod 750 \{\} \;
--- NOTE ---
NDR : La j'ai fait cette connerie :(
=> 'find . -type f -exec chmod 640 \{\} \;'
... Correction à la prochaine install pour quelque chose de meilleur que :
find . -type f -name "*sh" -exec chmod 750 \{\} \;
find ./java/bin -type f -exec chmod 750 \{\} \;
find ./java/jre/bin -type f -exec chmod 750 \{\} \;
--- NOTE ---
Exécution de Was sous une identité restreinte :
Modifiez les paramètres de la JVM pour une adaptation à VOTRE (Mon serveur
de test possède 156M de Ram et 300M de Swap) serveur dans
'/var/was/config/cells/{HOSTNAME}/nodes/{HOSTNAME}/servers/server1/server.xml' :
<jvmEntries xmi:id="JavaVirtualMachine_1" verboseModeClass="false"\
verboseModeGarbageCollection="false" verboseModeJNI="false"\
initialHeapSize="96" maximumHeapSize="96" runHProf="false"\
debugMode="false" debugArgs="-Djava.compiler=NONE -Xdebug -Xnoagent\
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777"\
disableJIT="false"/>
Modifiez le fichier /var/was/config/cells/{HOSTNAME}/nodes/{HOSTNAME}/servers/server1/server.xml
de facon à obtenir :
<exécution xmi:id="ProcessExecution_1" processPriority="20" umask="007"\
runAsUser="was" runAsGroup="was"/>
à la place de :
<exécution xmi:id="ProcessExecution_1" processPriority="20" runAsUser=""\
runAsGroup=""/>
Configuration des comptes administrateurs Was :
mount -o remount,ro /usr
Redémarrez Apache, Websphere et inscrivez les futurs administrateurs dans
les groupes was et wasadm :
Pour les administrateurs :
usermod -g {UserName} -G adm,users,webadm,www-data,wasadm,was {UserName}
Pour les utilisateurs :
usermod -g users -G [webadm,www-data],wasadm,was {UserName}
Avec 'visudo', ajoutez les entrées suivantes dans '/etc/sudoers' pour
permettre à vos administrateurs was d'administrer le serveur Websphere :
# Cmnd alias specification
[...]
Cmnd_Alias WASCTL=/usr/local/websphere500/appserver/bin/startServer.sh ,\
/usr/local/websphere500/appserver/bin/stopServer.sh
[...]
# User privilege specification
[...]
%wasadm ALL=(was) NOPASSWD: WASCTL
NDR: Il est, bien entendu, trivial d'indiquer que les scripts que vous
inscrivez dans le fichier d'autorisation sudo ne doivent être en
disponibles en écriture que pour le super-utilisateur ou les
administrateur.
Vos administrateurs Was peuvent désormais administrer le serveur :
> sudo -l
User simon may run the following commands on this host:
(was) NOPASSWD: /usr/local/websphere500/appserver/bin/startServer.sh,\
/usr/local/websphere500/appserver/bin/stopServer.sh
> sudo -u was /usr/local/websphere500/appserver/bin/startServer.sh server1
L'arborescence /var/was est désormais en 3770. N'oubliez pas que les
administrateurs ou le serveur Was peuvent modifier les fichiers appartenant à
root.
=> Présumez désormais que tous les fichiers appartenant à root dans cette
arborscence peuvent contenir des données malicieuses !!!
Cette documentation n'a pas pour objectif de vous présenter une sécurisation
approfondie de Websphere Application Server, voici donc quelques
reccomandations sur les etapes que vous pourriez suivre après l'installation :
Supprimer toutes les webapp installées.
N'installer que les webapps relatives aux services que vous désirez
offrir.
Privilégier les accès Ssh pour l'administration.
Si vous devez conserver l'interface web de la console d'administrateur :
Positionnez l'application console derrière un vhost apache SSL.
Mettez en place des restrictions d'accès réseau pour l'utilisation de
la console.
Mettez en place des restrictions d'accès utilisateur pour
l'utilisation de la console.
Si vous souhaitez placer l'accès à la console d'administration Web en aval du
serveur Web Apache, vous pourrez bénéficier de la fonctionnalité SSL (par
exemple). Pour ce faire, éditez le fichier '/etc/apache/httpd.conf' :
Configuration des modules :
> LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so
> LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so
Configuration des vhosts :
> RewriteEngine On
> RewriteRule ^/admin/(.*)$ http://127.0.0.1:9090/admin/$1 [P,L]
=> Si vous avez suivi la procédure '5.8. Sécurisation approfondie avec
GrSecurity', n'oubliez pas d'éditer le fichier /etc/grsec/debian-secinst/Dmn_apache
pour ajouter une ligne du type '127.0.0.1:9090 stream tcp'
dans la directive 'connect'.
Si vous souhaitez modifier les ressources mémoires attribuées aux processus
Java, editez le fichier '/etc/security/limits.conf' pour les entrées 'nofile',
'cpu' et 'memlock' puis modifier les fichiers de configuration des serveurs
dans /var/was/config/cells/{SERVER}/nodes/{SERVER}/servers/server{SERVER_NUM}/server.xml.
V.d. Empreinte du système
Editez /etc/aide/aide.conf et ajoutez : '/usr/local/websphere500/appserver/bin Binlib' a la fin du fichier.
Suivez ensuite la procédure présentée en '5.3. Conserver une empreinte de
vérification d'intégrite du système.'
V.e. Sauvegarde du système
Réferez vous à '4.11. Backup du système sur une partition spécifique' et
editez le fichier '/home/system/scripts/backup/exclude' pour qu'il contienne
cette ligne supplémentaire :
/var/was/logs
Copyright (c) 2003 Simon Castro, scastro [ at ] entreelibre.com.
Permission is granted to copy, distribute and/or modify this document under the
terms of the GNU Free Documentation License, Version 1.2 or any later version
published by the Free Software Foundation; with the Invariant Sections being
LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the
Back-Cover Texts being LIST.
You must have received a copy of the license with this document and it should
be présent in the fdl.txt file.
If you did not receive this file or if you don't think this fdl.txt license is
correct, have a look on the official http://www.fsf.org/licenses/fdl.txt
licence file.
|