dpkg-buildflags(1)

NOM
dpkg-buildflags - retourne les options de compilation à utiliser pour la construction du paquet

SYNOPSIS
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).

Les fichiers de configuration peuvent contenir deux types de directives :

SET drapeau valeur
    Remplace le drapeau drapeau par la valeur valeur.

STRIP valeur drapeau
    Remplace par le 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.

Les fichiers de configuration peuvent contenir des commentaires sur les lignes commençant par un dièse (#). Les lignes vides sont également ignorées.

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.

--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 area
    Print the features enabled for a given area. The only currently recognized area is hardening. Exits with 0 if the area is known otherwise exits with 1.

    The output format is RFC822 header-style, with one section per feature. For example:

      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 variables 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é pour les 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 sensibles 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 -Wformat-security -Werror=format-security à CFLAGS et CXXFLAGS. Cela provoquera l'avertissement en cas d'utilisation de chaînes de formatage incorrectes et échouera sur 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 avertissement pour les appels des fonctions printf et scanf lorsque la chaîne de formatage n'est pas une chaîne lité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 chapine de formatage vient d'une source non sûre et contient « %n ».

fortify
    This setting (enabled by default) adds -D_FORTIFY_SOURCE=2 to CPPFLAGS. During code generation the compiler knows a great deal of information about buffer sizes (where possible), and attempts to replace insecure unlimited length buffer function calls with length-limited ones. This is especially useful for old, crufty code. Additionally, format strings in writable memory that contain '%n' are blocked. If an application depends on such a format string, it will need to be worked around. Veuillez noter que pour que cette option ait une utilité, le code source doit être compilé avec l'option -O1 ou supérieure.

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). Cette fonctionnalité impose de lier le code à glibc (ou toute autre bibliothèque fournissant __stack_chk_fail) et doit donc être désactivée lorsque le code est construit avec -nostdlib, -ffreestanding ou équivalents.

relro
    This setting (enabled by default) adds -Wl,-z,relro to LDFLAGS. During program load, several ELF memory sections need to be written to by the linker. This flags the loader to turn these sections read-only before turning over control to the program. Most notably this prevents GOT overwrite attacks. If this option is disabled, bindnow will become disabled as well.

bindnow
    This setting (disabled by default) adds -Wl,-z,now to LDFLAGS. During program load, all dynamic symbols are resolved, allowing for the entire PLT to be marked read-only (due to relro above). The option cannot become enabled if relro is not enabled.

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 dé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égion.text binaires doivent être construites en mode PIE pour mettre en oeuvre 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. Ce réglage n'est pas compatible avec -Fpic : la prudence est donc conseillée pour la construction d'objets partagés. De plus, comme la protection PIE n'est mise en oeuvre via un registre global, certaines architectures (notamment i386) peuvent souffrir de pertes de performances allant jusqu'à 15% sur des charges d'applications utilisant largement les segments de texte ; le plus souvent, cette perte de performances n'excèdera pas 1%. Pour des architectures offrant plus de registres globaux (par exemple amd64), cette pénalisation n'existe pratiquement pas.

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>.