dpkg-buildflags(1) | suite dpkg | dpkg-buildflags(1) |
NOM¶
dpkg-buildflags - retourne les options de compilation à utiliser pour la construction du paquetSYNOPSIS¶
dpkg-buildflags [option...] [commande]DESCRIPTION¶
dpkg-buildflags est un script qui permet de récupérer les options de compilation à utiliser pour la construction d'un paquet. Les drapeaux par défaut sont définis par le fournisseur de la distribution mais peuvent être étendus ou remplacés de plusieurs façons :- 1.
- pour tout le système avec /etc/dpkg/buildflags.conf;
- 2.
- pour l'utilisateur courant avec $XDG_CONFIG_HOME/dpkg/buildflags.conf où la valeur par défaut de $XDG_CONFIG_HOME est $HOME/.config;
- 3.
- temporairement par l'utilisateur avec des variables d'environnement (voir VARIABLES D'ENVIRONNEMENT).
- 4.
- dynamiquement par le responsable du paquet avec des variables d'environnement via debian/rules (voir VARIABLES D'ENVIRONNEMENT).
- SET drapeau valeur
- Remplace le drapeau drapeau par la valeur valeur.
- STRIP valeur drapeau
- Retire du drapeau drapeau tous les drapeaux de construction listés dans valeur.
- APPEND drapeau valeur
- Étend le drapeau drapeau avec les options indiquées dans valeur. Un espace est ajouté au début de ce qui est ajouté si la valeur actuelle du drapeau n'est pas vide.
- PREPEND valeur drapeau
- Préfixe le drapeau drapeau avec les options indiquées dans valeur. Un espace est ajouté au début de ce qui est ajouté si la valeur actuelle du drapeau n'est pas vide.
COMMANDES¶
- --dump
- Affiche sur la sortie standard tous les drapeaux de compilation et leurs valeurs. Un drapeau par ligne est affiché, suivi de sa valeur, séparée par le caractère « égal » (« drapeau=valeur »). Il s'agit de l'action par défaut.
- --list
- Affiche la liste des drapeaux gérés par l'éditeur actuel (un par ligne). Voir la section DRAPEAUX GÉRÉS pour plus d'informations sur chacun d'eux.
- --status
- Affiche toute information utile pour expliquer le
comportement de dpkg-buildflags : variables d'environnement,
éditeur actuel, état de tous les drapeaux de
fonctionnalités. Affiche également les drapeaux de compilation
résultants ainsi que leur origine.
- --export=format
- Affiche sur la sortie standard les commandes shell (si format est sh) ou make (si format est make) qui permettent d'exporter tous les drapeaux de compilation dans l'environnement. Si format est configure, la sortie peut être utilisée comme une ligne de commande de ./configure? Si format n'est pas spécifié, sa valeur est sh. Seuls les drapeaux de compilation commençant par une majuscule sont inclus, les autres étant supposés inadaptés à l'environnement.
- --get drapeau
- Affiche la valeur de ce drapeau sur la sortie standard. Retourne un code de sortie 0 si le drapeau est connu et 1 s'il est inconnu.
- --origin drapeau
- Affiche l'origine de la valeur renvoyée par --get. Retourne un code de sortie 0 si le drapeau est connu et 1 s'il est inconnu. L'origine est une des valeurs suivantes :
- vendor
- le drapeau défini à l'origine par l'éditeur est renvoyé ;
- system
- le drapeau est placé ou modifié par un réglage système ;
- user
- le drapeau est placé ou modifié par une configuration spécifique à l'utilisateur ;
- env
- le drapeau est placé ou modifié par une configuration spécifique dans l'environnement.
- --query-features domaine
- Affiche les fonctionnalités activées pour un domaine donné. Le seul domaine reconnu à ce jour est hardening. Retourne un code de sortie 0 si le domaine est connu et 1 s'il est inconnu.
- Le format d'affichage est dans le style RFC822, avec une section par fonctionnalité. Par exemple :
-
Feature: pie Enabled: no Feature: stackprotector Enabled: yes
- --help
- Affiche un message d'aide puis quitte.
- --version
- Affiche le numéro de version puis quitte.
DRAPEAUX GÉRÉS¶
- CFLAGS
- Options du compilateur C. La valeur par défaut définie par l'éditeur comporte -g le niveau d'optimisation par défaut ( -O2 en général, ou -O0 si la variable d'environnement DEB_BUILD_OPTIONS contient noopt).
- CPPFLAGS
- Options du préprocesseur C. Valeur par défaut : aucune.
- CXXFLAGS
- Options du compilateur C++. Analogue à CFLAGS.
- FFLAGS
- Options du compilateur Fortran. Analogue à CFLAGS.
- LDFLAGS
- Options passées au compilateur lors du processus de liaison des exécutables ou des objets partagés (si le linker est appelé directement, alors -Wl et , doivent être retirés de ces options). Valeur par défaut : aucune.
FICHIERS¶
- /etc/dpkg/buildflags.conf
- Fichier de configuration pour l'ensemble du système.
- $XDG_CONFIG_HOME/dpkg/buildflags.conf ou $HOME/.config/dpkg/buildflags.conf
- Fichier de configuration propre à l'utilisateur
ENVIRONNEMENT¶
Deux jeux de variables d'environnement effectuent les mêmes opérations. Le premier (DEB_ drapeau_opération) ne devrait jamais être utilisé depuis debian/rules. Il est destiné aux utilisateurs souhaitant recompiler le paquet source avec des drapeaux de compilation modifiés. Le second (DEB_ drapeau_MAINT_opération) ne doit être utilisé que dans debian/rules par les responsables de paquets pour modifier les drapeaux de compilation concernés.- DEB_drapeau_SET
- DEB_drapeau_MAINT_SET Cette variable permet de forcer la valeur renvoyée pour le drapeau indiqué.
- DEB_drapeau_STRIP
- DEB_drapeau_MAINT_STRIP Cette variable peut être utilisée pour fournir une liste d'options (séparées par des espaces) qui seront retirées du jeu de drapeaux renvoyé pour le drapeau indiqué.
- DEB_drapeau_APPEND
- DEB_drapeau_MAINT_APPEND Cette variable permet d'ajouter des options à la valeur renvoyée pour le drapeau indiqué.
- DEB_drapeau_PREPEND
- DEB_drapeau_MAINT_PREPEND Cette variable permet de préfixer la valeur renvoyée pour le drapeau indiqué par des options supplémentaires.
- DEB_BUILD_MAINT_OPTIONS
- Cette variable permet d'activer ou désactiver différents drapeaux de compilation renforcée via l'option hardening. Voir la section COMPILATION RENFORCÉE pour plus d'informations.
COMPILATION RENFORCÉE (« HARDENING »)¶
Plusieurs options de compilation (détaillées ci-dessous) peuvent aider à rendre le binaire compilé moins sensible aux attaques par corruption de la mémoire ou à fournir des messages supplémentaires d'avertissement lors de la compilation. Sauf mention contraire, ces options sont activées par défaut pour les architectures qui les gèrent. Chaque option de renforcement peut être activée ou désactivée avec la valeur hardening de la variable d'environnement DEB_BUILD_MAINT_OPTIONS, via un modificateur « + » ou « - ». Par exemple, pour activer l'option « pie » et désactiver l'option « feature », il est possible d'indiquer ceci dans debian/rules :export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify L'option spéciale all peut être utilisée pour activer ou désactiver toutes les options de renforcement à la fois. Ainsi, tout désactiver en n'activant que « format » et « fortify » peut être réalisé avec :
export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
- format
- Ce réglage, activé par défaut, ajoute -Wformat -Werror=format-security à CFLAGS et CXXFLAGS. Cela provoquera l'avertissement en cas d'utilisation de chaînes de formatage incorrectes et échouera si les fonctions de formatage sont utilisées d'une façon qui présente des risques pour la sécurité. Actuellement, ce réglage crée des avertissements pour les appels des fonctions printf et scanf lorsque la chaîne de formatage n'est pas une chaîne littérale et qu'aucun paramètre de formatage n'est utilisé (par exemple dans printf(foo); au lieu de printf("%s", foo);. Ce type de syntaxe peut créer un problème de sécurité si la chaîne de formatage vient d'une source non sûre et contient « %n ».
- fortify
- Ce réglage, activé par défaut, ajoute
-D_FORTIFY_SOURCE=2 à CFLAGS et CPPFLAGS. Lors
de la création du code, le compilateur connaît un nombre
important d'informations relatives aux tailles de tampons (quand c'est
possible) et tente alors de remplacer des appels de fonctions avec une
taille illimitée de tampons, peu sûrs, par des appels avec des
tampons de taille limitée. Cette fonctionnalité est
particulièrement utile pour du code ancien et mal écrit. De
plus, les chaînes de formatage dans la mémoire accessible en
écriture qui contiennent « %n » sont
bloquées. Si une application dépend de telles chaînes de
formatage, un contournement devra être mis en place.
- stackprotector
- Ce réglage, activé par défaut, ajoute
-fstack-protector --param=ssp-buffer-size=4 à
CFLAGS et CXXFLAGS. Il ajoute des contrôles liés
aux réécritures de piles. Cela conduit des tentatives d'attaques
par injection de code à terminer en échec. Dans le meilleur des
cas, cette protection transforme une vulnérabilité d'injection
de code en déni de service ou en non-problème (selon les
applications).
- relro
- Ce réglage, activé par défaut, ajoute -Wl,-z,relro à LDFLAGS. Lors du chargement du programme, plusieurs parties de la mémoire ELF doivent être écrites par l'éditeur de liens. Ce réglage indique au chargeur de mettre ces sections en lecture seule avant de rendre le contrôle au programme. L'utilisation habituelle de ce réglage est la protection contre les attaques par réécriture GOT. Si cette option est désactivée, l'option bindnow sera également désactivée.
- bindnow
- Ce réglage, désactivé par défaut, ajoute -Wl,-z,now à LDFLAGS. Lors du chargement du programme, tous les symboles dynamiques sont résolus, ce qui permet au « PLT » entier (NdT : jargon détecté !) d'être en lecture seule (du fait du réglage relro ci-dessus). Cette option ne peut être activée si relro ne l'est pas.
- pie
- Ce réglage, désactivé par défaut,
ajoute -fPIE à CFLAGS et CXXFLAGS ainsi que
-fPIE -pie à LDFLAGS. Les exécutables à
position indépendante (« Position Independent
Executable ») permettent d'utiliser la randomisation de
l'organisation de l'espace d'adressage
(ASLR : « Address Space Layout
Randomization »), qui est gérée par certaines versions
du noyau. Bien que ASLR puisse déjà être mise en oeuvre
pour les zones de données dans la pile et le tampon (brk et mmap),
les zones de codes doivent être compilées comme
indépendantes de la position. Les bibliothèques partagées
font déjà cela (-fPIC) ce qui permet automatiquement d'utiliser
ASLR. Par contre les régions .text binaires doivent être
construites en mode PIE pour mettre en ?uvre ASLR. Une fois cela
réalisé, les attaques ROP (« Return Oriented
Programming ») deviennent plus difficiles car il n'existe pas
d'emplacement statique d'où rebondir sur une attaque par corruption
de la mémoire.
TRADUCTION¶
Ariel VARDI <ariel.vardi@freesbee.fr>, 2002. Philippe Batailler, 2006. Nicolas François, 2006. Veuillez signaler toute erreur à <debian-l10n-french@lists.debian.org>.03-04-2012 | Projet Debian |