Une stratégie de sécurité restrictive peut limiter l'accès des pirates à un ordinateur en cas d'attaque réussie sur une application. Une stratégie étendue règle limite l'étendue de l'effet de l'affectation de privilèges seulement les étapes intra-opérations une ressource dans la règle. Stratégie étendue les règles sont exprimées en plaçant les privilèges entre accolades, suivi de deux points et la ressource associée. Pour plus d'informations, reportez-vous à la section Extension des privilèges d'un utilisateur ou d'un rôle. Pour des exemples de syntaxe, reportez-vous aux pages de manuel ppriv(1) et privileges(5).
Les utilisateurs standard peuvent aussi bien les administrateurs vers le bas et des ressources à l'aide de verrouillage des privilèges étendus. Les administrateurs peuvent créer de règles pour les utilisateurs de privilège étendue, les ports et d'applications. Les utilisateurs standard peuvent se servir de la ligne de commande ou de scripts utilisant la commande ppriv -r pour empêcher les applications d'écrire dans des fichiers situés hors des répertoires spécifiés par l'utilisateur.
Limiter tout accès d'un utilisateur malveillant passant par un port : Application d'une stratégie de privilège étendue à un port
Exécuter une base de données en tant que démon non root : Procédure de verrouillage du service MySQL
Exécuter le serveur Web Apache en tant que démon non root : Procédure d'assignation de privilèges propres au shell Apache du serveur Web
Vérifier que le serveur Web Apache est en cours d'exécution avec des privilèges : Procédure de détermination des privilèges que le serveur Web Apache utilise
Empêchez Firefox d'écrire dans des répertoires de votre système : Example 4–4
Limiter les applications à des sous-répertoires spécifiques de votre système : Example 4–5
Le service du protocole NTP (Network Time Protocol) utilise le port privilégié 123 pour le trafic udp. Il faut disposer des privilèges pour ce service à exécuter. Cet exemple de procédure modifie le manifeste du service afin d'empêcher l'accès à d'autres ports par un utilisateur malveillant susceptible d'obtenir les privilèges affectés aux ports en question.
Avant de commencer
Vous devez prendre le rôle root. Pour plus d'informations, voir A l'aide de vos droits administratifs attribués.
A partir de l'entrée de méthode /lib/svc/manifest/network/ntp.xml start, les privilèges net_privaddr, proc_lock_memory et sys_time pourraient être utilisés sur d'autres processus :
privileges='basic,!file_link_any,!proc_info,!proc_session,net_privaddr, proc_lock_memory,sys_time'
Les privilèges supprimés spécifiés par !file_link_any,!proc_info,!proc_session empêchent le service de signaler ou d'observer tout autre processus, ou de créer des liens physiques afin de renommer des fichiers. Par conséquent, le processus démarré par le service ne peut établir de liaison qu'avec le port NTP 123, c'est-à-dire avec aucun autre port privilégié.
Si un pirate peut exploiter le service afin de démarrer un autre processus, celui-ci être la même façon limitée.
# svccfg -s ntp editprop
La stratégie de privilège étendue service supprime tous les privilèges octroyés sauf les privilèges spécifiés et les privilièges de base qui ne sont pas spécifiés. Par conséquent, l'ensemble des quatre-vingt privilèges exploitables est réduit à moins de huit.
# svcadm restart ntp
# svccfg -s ntp listprop | grep privileges start/privileges astring basic,!file_link_any,!proc_info,!proc_session, {net_privaddr}:123/udp,proc_lock_memory,sys_time restart/privileges astring basic,!file_link_any,!proc_info,!proc_session, {net_privaddr}:123/udp,proc_lock_memory,sys_time
Lors de l'installation, la base de données MySQL est configurée pour être exécutée avec les privilèges d'accès complet root sur un port non protégé. Dans cette tâche, vous affectez la stratégie de privilège étendu au service MySQL dans un profil de droits. Lorsque le profil de droits devient la méthode exec du service, MySQL s'exécute sur un port protégé en tant que l'utilisateur mysql, avec un accès limité à la base de données par les processus non MySQL.
Avant de commencer
L'utilisateur initial peut installer le package. Les étapes restantes doivent être effectuées par le rôle root. Pour plus d'informations, voir A l'aide de vos droits administratifs attribués.
# pkg search basename:mysql ... basename ... pkg:/database/mysql-51@version # pfexec pkg install mysql-51
# svcs mysql STATE STIME FMRI disabled May_15 svc:/application/database/mysql:version_51
Le manifeste de ce service spécifie que la méthode d'execution est un wrapper de script shell, /lib/svc/method/mysql_51.
# svccfg -s mysql listprop | grep manifest ... astring /lib/svc/manifest/application/database/mysql_51.xml # grep exec= /lib/svc/manifest/application/database/mysql_51.xml exec='/lib/svc/method/mysql_51 start' exec='/lib/svc/method/mysql_51 stop'
Utilisez le wrapper /lib/svc/method/mysql_51 pour la commande dans le profil.
% su - Password: xxxxxxxx # profiles -p "MySQL Service" MySQL Service> set desc="Locking down the MySQL Service" MySQL Service> add cmd=/lib/svc/method/mysql_51 MySQL Service:mysql_51> set privs=basic MySQL Service:mysql_51> add privs={net_privaddr}:3306/tcp MySQL Service:mysql_51> add privs={file_write}:/var/mysql/5.1/data/* MySQL Service:mysql_51> add privs={file_write}:/tmp/mysql.sock MySQL Service:mysql_51> add privs={file_write}:/var/tmp/ib* MySQL Service:mysql_51> end MySQL Service> set uid=mysql MySQL Service> set gid=mysql MySQL Service> exit
Le privilège file_write est un privilège de base accordé par défaut à tous les processus. Lors de l'énumération explicite des chemins, l'accès en mode écriture est limité à ces chemins d'accès uniquement. Cette contrainte s'applique à l'exécutable et ses processus enfants.
# ipadm set-prop -p extra_priv_ports+=3306 tcp # ipadm show-prop -p extra_priv_ports tcp PROTO PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE tcp extra_priv_ports rw 2049,4045, 3306 2049,4045 1-65535 3306
Le privilègenet_privaddr est obligatoire pour établir la liaison avec un port privilégié. Pour MySQL, se connecter au numéro de port par défaut, 3306, ne nécessite normalement pas ce privilège.
# svccfg -s mysql:version_51 ...version_51> setprop method_context/profile="MySQLService" ...version_51> setprop method_context/use_profile=true ...version_51> refresh ...version_51> exit
Le dernier composant du FMRI, mysql:version_51, est suffisant pour spécifier le service de manière unique.
# svcadm enable mysql:version_5
# ppriv $(pgrep mysql) 103697: /usr/mysql/5.1/bin/mysqld --basedir=/usr/mysql/5.1 --datadir=/var/mysql/5.1/data flags = PRIV_XPOLICY Extended policies: {net_privaddr}:3306/tcp {file_write}:/var/mysql/5.1/data/* {file_write}:/tmp/mysql.sock {file_write}:/var/tmp/ib* E: basic,!file_write I: basic,!file_write P: basic,!file_write L: all 103609: /bin/sh /usr/mysql/5.1/bin/mysqld_safe --user=mysql --datadir=/var/mysql/5.1/data flags = PRIV_XPOLICY Extended policies: {net_privaddr}:3306/tcp {file_write}:/var/mysql/5.1/data/* {file_write}:/tmp/mysql.sock {file_write}:/var/tmp/ib* E: basic,!file_write I: basic,!file_write P: basic,!file_write L: all
Cette procédure verrouille le démon de serveur Web par le biais d'une affectation à celle-ci est uniquement les privilèges dont il a besoin. Le serveur Web ne peut être lié qu'au port 80 et peut uniquement effectuer des opérations d'écriture dans des fichiers dont le démon webservd est propriétaire. Aucun processus du service apache22 ne s'exécute en tant que root.
Avant de commencer
Vous devez prendre le rôle root. Pour plus d'informations, voir A l'aide de vos droits administratifs attribués.
# profiles -p "Apache2" profiles:Apache2> set desc="Apache Web Server Extended Privilege" profiles:Apache2> add cmd=/lib/svc/method/http-apache22 profiles:Apache2:http-apache22> add privs={net_privaddr}:80/tcp ...http-apache22> add privs={zone}:/system/volatile/apache2 ...http-apache22> add privs={zone}:/var/apache2/2.2/logs/* ...http-apache22> add privs={zone}:/var/user ...http-apache22> add privs={file_write}:/var/user/webserv* ...http-apache22> add privs={file_write}:/tmp/* ...http-apache22> add privs={file_write}:/system/volatile/apache* ...http-apache22> add privs={file_write}:/proc/* ...http-apache22> add privs=basic,proc_priocntl ...http-apache22> set uid=webservd ...http-apache22> set gid=webservd ...http-apache22> end ---Apache2> exit
# profiles -p "Apache2" profiles:Apache2> add privs={net_privaddr}:443/tcp profiles:Apache2> add privs={net_privaddr}:8443/tcp profiles:Apache2:http-apache22> end
La procédure du proxy SSL au niveau du noyau est décrite dans la section Configuration d’un serveur Web Apache 2.2 afin qu’il utilise le proxy SSL au niveau du noyau du manuel Sécurisation du réseau dans Oracle Solaris 11.2 .
# svccfg -s apache22 svc:/network/http:Apache2> listprop start/exec start/exec astring "/lib/svc/method/http-apache22 start" ... svc:/network/http:Apache2> setprop start/profile="Apache2" svc:/network/http:Apache2> setprop start/use_profile=true svc:/network/http:Apache2> refresh svc:/network/http:Apache2> exit
Lorsque le service apache22 est activé, le profil Apache 2 est utilisé.
# svcadm enable apache22
Ouvrez Firefox et tapez localhost dans le champ d'adresse.
Etapes suivantes
Pour vérifier que ces privilèges s'appliquent correctement, reportez-vous à la section Procédure de détermination des privilèges que le serveur Web Apache utilise.
Cette opération consiste à déterminer les privilèges par le serveur Web est de débogage à l'aide de la création d'un profil de droits version Apache 2.
Avant de commencer
Vous avez terminé la section Procédure d'assignation de privilèges propres au shell Apache du serveur Web. Le service apache22 est désactivé. Vous êtes dans le rôle root.
Il est plus simple de déboguer une commande qu'un service SMF. La commande apachectldémarre le service Apache de façon interactive.
# profiles -p "Apache2" profiles:Apache2> set name="Apache-debug" profiles:Apache-debug> sel <Tab><Tab> profiles:Apache-debug:http-apache22> set id=/usr/apache2/2.2/bin/apachectl profiles:Apache-debug:apachectl> end profiles:Apache-debug> exit
Pour plus d'informations, reportez-vous à la page de manuel apachectl(8).
# usermod -K profiles+=Apache-debug webservd
# su - webservd
# id uid=80(webservd) gid=80(webservd)
N'utilisez pas SMF directement. Utilisez la commande du profil de droitsApache-debug.
% pfbash # ppriv -De /usr/apache2/2.2/bin/apachectl start
# ppriv $(pgrep httpd|head -1) 2999: httpd flags = PRIV_DEBUG|PRIV_XPOLICY|PRIV_EXEC 5 Extended policies: 6 {net_privaddr}:80/tcp 7 {zone}:/system/volatile/apache2 8 {zone}:/var/apache2/2.2/logs/* 9 {zone}:/var/user 10 {file_write}:/var/user/webserv* 11 {file_write}:/tmp/* 12 {file_write}:/system/volatile/apache* 13 {file_write}:/proc/* 14 E: basic,!file_write,!proc_info,proc_priocntl 15 I: basic,!file_write,!proc_info,proc_priocntl 16 P: basic,!file_write,!proc_info,proc_priocntl 17 L: all