table of contents
other versions
- wheezy 1.16.18
dpkg-buildflags(1) | Herramientas de dpkg | dpkg-buildflags(1) |
NOMBRE¶
dpkg-buildflags - Devuelve opciones de compilación a usar durante la construcción del paqueteSINOPSIS¶
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).
- 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.
Ó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.
- --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.
- 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).
- 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.
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>.3 de abril del 2012 | Proyecto Debian |