dpkg-buildflags(1)

NOMBRE
dpkg-buildflags - Devuelve opciones de compilación a usar durante la construcción del paquete

SINOPSIS
dpkg-buildflags [opción...] [orden]

DESCRIPCIÓN
dpkg-buildflags es una herramienta para obtener las opciones de compilación a utilizar durante la construcción de paquetes Debian. Las opciones predefinidas se definen por el proveedor, pero se pueden extender y sustituir de varias formas:

1.  Para todo el sistema con /etc/dpkg/buildflags.conf.

2.  Para el usuario actual con $XDG_CONFIG_HOME/dpkg/buildflags.conf, donde $XDG_CONFIG_HOME tiene como valor predefinido $HOME/.config.

3.  De forma temporal por el usuario con variables de entorno (consulte la sección ENTORNO).

4.  Definido por el responsable del paquete con variables de entorno definidas en debian/rules (consulte la sección ENTORNO).

Los ficheros de configuración pueden contener dos tipos de directivas:

SET opción valor
    Sustituye la opción llamada opción con el valor valor.

STRIP opción valor
    Elimina de la opción todas las opciones de compilación enumeradas en valor.

APPEND opción valor
    Extiende la opción llamada opción posponiendo las opciones dadas en valor. Se prefijará un espacio al valor añadido si el valor actual de la opción no está vacío.

PREPEND opción valor
    Extiende la opción llamada opción prefijando las opciones dadas en valor. Se prefijará un espacio al valor añadido si el valor actual de la opción no está vacío.

Los ficheros de configuración pueden contener comentarios en líneas que empiecen con «#». También se ignoran líneas vacías.

ÓRDENES

--dump
    Muestra por la salida estándar todas las opciones de configuración y sus valores. Muestra una línea por opción separada de su valor con un signo «=» (opción=valor). Esta es la acción predefinida.

--list
    Muestra la lista de opciones aceptadas por el proveedor actual (uno por línea). Para más información acerca de ellos consulte la sección OPCIONES ACEPTADAS.

--status
    Muestra toda la información que puede ser útil para explicar el comportamiento de dpkg-buildflags: variables de entorno pertinentes, el proveedor actual y el estado de todas las opciones de funcionalidad. También muestra las opciones de compilación resultantes con su origen. Se ha diseñado para ejecutarse debian/rules, de forma que el registro de construcción mantenga un seguimiento claro de las opciones de construcción utilizadas. Puede ser útil para diagnosticar problemas relacionados con ellos.

--export=formato
    Muestra por la salida del intérprete de órdenes estándar (si formato es sh) o make (si formato es make) las órdenes que se pueden utilizar para exportar todas las opciones de compilación en el entorno. Si el formato es configure, la salida se puede utilizar en la línea de órdenes en un fichero ./configure. Se asume sh si no se introduce el valor formato. Sólo se incluyen opciones de compilación que empiezan con un carácter en mayúscula, se asume que los otros no son adecuados para el entorno.

--get opción
    Muestra el valor de la opción por la salida estándar. Cierra con valor 0 si la opción es conocida, y el valor 1 en caso contrario.

--origin opción
    Muestra el origen del valor obtenido con --get. Cierra con valor 0 si la opción es conocida, y el valor 1 en caso contrario. El origen puede ser cualquiera de las siguientes opciones:

    vendor
        Devuelve la opción originalmente definida por el proveedor;

    system
        La opción se define/modifica con una configuración que afecta a todo el sistema;

    user
        La opción se define/modifica con una configuración específica del usuario;

    env La opción se define/modifica con una configuración específica del entorno.

--query-features área
    Muestra las funcionalidades activas para el área dada. La única sección actualmente admitida es hardening. Cierra con un valor de cero si el área es conocido, y con el valor 1 en caso contrario.

    El formato de la salida es de tipo cabecera RFC822, con una sección por funcionalidad. Por ejemplo:

      Feature: pie
      Enabled: no
      Feature: stackprotector
      Enabled: yes

--help
    Muestra el modo de uso y termina.

--version
    Muestra la versión y termina.

OPCIONES ACEPTADAS

CFLAGS
    Opciones para el compilador C. El valor por omisión definido por el proveedor incluye -g y el nivel de optimización predefinido (habitualmente -O2, o -O0 si la variable de entorno DEB_BUILD_OPTIONS define noopt).

CPPFLAGS
    Opciones para el preprocesador C. Valor por omisión: vacío.

CXXFLAGS
    Opciones para el compilador C++. Idéntica a CFLAGS.

FFLAGS
    Opciones para el compilador Fortran. Idéntica a CFLAGS.

LDFLAGS
    Opciones introducidas al compilador al enlazar ejecutables u objetos compartidos (en el caso de ejecutar al enlazador directamente, debe eliminar -Wl y «,» de estas opciones). Valor por omisión: vacío.

FICHEROS

/etc/dpkg/buildflags.conf
    Fichero de configuración de todo el sistema.

$XDG_CONFIG_HOME/dpkg/buildflags.conf o $HOME/.config/dpkg/buildflags.conf
    Fichero de configuración del usuario.

ENTORNO
Existen dos conjuntos de variables de entorno que realizan las mismas funciones, y no se debe utilizar el primero (DEB_opción_op) en un fichero debian/rules. Sirve para reconstruir el paquete fuente con otras opciones de compilación. El segundo conjunto ((DEB_opción_MAINT_op) solo se debe utilizar en un fichero debian/rules mediante encargados de paquete para modificar las opciones de compilación.

DEB_opción_SET
DEB_opción_MAINT_SET
    Esta variable sirve para forzar el valor devuelto para la opción dada.

DEB_opción_STRIP
DEB_opción_MAINT_STRIP
    Esta variable ofrece una lista separada por espacios de opciones que eliminar del conjunto de opciones devuelto por la opción dada.

DEB_opción_APPEND
DEB_opción_MAINT_APPEND
    Esta variable añade opciones adicionales al valor devuelto por la opción dada.

DEB_opción_PREPEND
DEB_opción_MAINT_PREPEND
    Esta variable prefija opciones adicionales al valor devuelto por la opción dada.

DEB_BUILD_MAINT_OPTIONS
    Esta variable se puede utilizar para desactivar/activar varias opciones de compilación de seguridad a través de la opción hardening. Para más detalles, consulte la sección AUMENTAR LA SEGURIDAD.

AUMENTAR LA SEGURIDAD
Se pueden utilizar varias opciones de tiempo de compilación (explicadas a continuación) para aumentar la seguridad (hardening) de un binario resultante frente a ataques de corrupción de memoria, u ofrecer mensajes de aviso durante la compilación. A menos que se especifique lo contrario, están activas por omisión para las arquitecturas que las admiten.

Cada opción de seguridad se puede activar o desactivar incluyendo el valor hardening en la variable de entorno DEB_BUILD_MAINT_OPTIONS con los modificadores «+» y «-». Por ejemplo, para activar la funcionalidad «pie» y desactivar la funcionalidad «fortify», puede utilizar lo siguiente en debian/rules:

  export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify

La funcionalidad especial all se puede utilizar para activar o desactivar todas las funcionalidades de seguridad de forma simultánea. Así, lo siguiente desactiva todo, y solo activa «format» y «fortify»:

  export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify

format
    Esta opción (activa por omisión) añade -Wformat -Werror=format-security a CFLAGS y CXXFLAGS. Esto avisa de usos inadecuados de cadena formato, y falla si las funciones de forma se utilizan de forma que supongan un problema potencial de seguridad. Actualmente, avisa de invocaciones a las funciones printf y scanf cuando la cadena formato no es una cadena literal y no hay argumentos de formato; por ejemplo printf(foo); en lugar printf("%s", foo);. Esto puede suponer una vulnerabilidad si la cadena formato proviene de una entrada no de confianza y contiene "%n".

fortify
    Esta opción (activa por omisión) añade -D_FORTIFY_SOURCE=2 a CPPFLAGS. Durante la generación de código, el compilador conoce una gran cantidad de información de tamaños de búfer (si es posible), e intenta sustituir invocaciones no seguras de función sin límite de longitud de búfer con invocaciones de longitud limitada. Es muy útil para código antiguo y sin mantener. Además, se bloquean las cadenas formato en memoria con permisos de escritura que contengan «%n». Si una aplicación depende de una cadena formato con esta característica, necesitará una alternativa. Tenga en cuenta que para que esta opción tenga efecto, las fuentes también se deben compilar con -O1 o superior.

stackprotector
    Esta opción (activa por omisión) añade -fstack-protector --param=ssp-buffer-size=4 a CFLAGS y CXXFLAGS. Esto añade comprobaciones de seguridad frente a sobrescrituras de pila. Provoca que varios ataques potenciales de inyección de código se deriven en interrupciones del proceso. En el mejor de los casos, convierte vulnerabilidades frente a una inyección de código en una negación de servicio o bien en un problema sin efecto (depende de la aplicación). Esta funcionalidad requiere el enlazado con glibc (u otro proveedor de __stack_chk_fail), y se debe desactivar al construir con -nostdlib, -ffreestanding, o similar.

relro
    Esta opción (activa por omisión) añade -Wl,-z,relro a LDFLAGS. Durante la carga del programa, el enlazador debe escribir en varias zonas de memoria ELF. Esto indica al cargador que estas zonas sean de solo lectura antes de entregar el control al programa. Básicamente, impide ataques de sobrescritura GOT. Si se desactiva esta opción, se desactiva también bindnow.

bindnow
    Esta opción (desactivada por omisión) añade -Wl,-z,now a LDFLAGS. Durante la carga del programa, se resuelven todos los símbolos dinámicos, lo que permite que se marque el total de PLT como solo escritura (debido a relro, arriba). Esta opción no se puede activar si no se activa relro.

pie Esta opción (por omisión, desactivada) añade -fPIE a CFLAGS and CXXFLAGS, y -fPIE -pie a LDFLAGS. Se requiere «Position Independent Executable» para obtener los beneficios de «Address Space Layout Randomization», compatible con algunas versiones de núcleos. Aunque se puede forzar ASLR para áreas de datos en la pila y en el almacén de libres (brk y mmap), las áreas de código se deben compilar independientes de posición. Las bibliotecas compartidas lo realizan (-fPIC), de forma que obtienen ASLR de forma automática, pero las regiones «.text» binarias se deben construir con PIE para obtener ASLR. Cuando esto ocurre, los ataques ROP (Return Oriented Programming) son más difíciles al no existir ubicaciones estáticas donde realizar un efecto rebote durante los ataques de corrupción de memoria. No es compatible con -fPIC, tenga cuidado al construir objetos compartidos. Además, debido a que se implementa PIE a través de un registro general, algunas arquitecturas (basicamente, i386) pueden sufrir una pérdida de potencia de hasta un 15% en cargas de trabajo de aplicaciones de segmento de texto de alto rendimiento; la mayoría de cargas de trabajo sufren menos de un 1%. Las arquitecturas con registros más generales (por ejemplo, amd64) no se ven afectados con la misma gravedad.

TRADUCTOR
Rudy Godoy <rudy@kernel-panik.org>, Rubén Porras <nahoo@inicia.es>, Bruno Barrera C. <bruno.barrera@igloo.cl>, Carlos Izquierdo <gheesh@ertis.net>, Esteban Manchado y NOK. Debian L10n Spanish <debian-l10n-spanish@lists.debian.org>.
Revisiones por Santiago Vila <sanvila@unex.es>, Javier Fernández-Sanguino, Rubén Porras, Luis Uribe y Omar Campagne.