X. Installation et sécurisation d'un serveur d'application Websphere▲
Ce que nous abordons ici a été réalisé après le suivi de la partie Installation et sécurisation 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-même.
L'installation du wrapper libsafe (presentee en Installation du wrapper libsafe) a été réalisée avec succès une fois l'installation de Websphere terminée.
X-A. Installation▲
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 .
Éditez 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
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 qu'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.
X-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 administrateurs.
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
X-C. Reccomandations▲
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.
X-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 Conserver une empreinte de vérification d'intégrite du système.
X-E. Sauvegarde du système▲
Réferez vous à 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