table of contents
dpkg-buildflags(1) | dpkg-Programmsammlung | dpkg-buildflags(1) |
BEZEICHNUNG¶
dpkg-buildflags - liefert Bauschalter zum Einsatz beim PaketbauÜBERSICHT¶
dpkg-buildflags [Option ?] [Befehl]BESCHREIBUNG¶
dpkg-buildflags ist ein Werkzeug, das zum Abfragen der zu verwendenden Kompilierungsschalter für den Bau von Debian-Paketen eingesetzt wird. Die Standardschalter werden vom Lieferanten definiert, sie können auf mehrere Arten erweitert/überschrieben werden:- 1.
- systemweit mit /etc/dpkg/buildflags.conf
- 2.
- für den aktuellen Benutzer mit $XDG_CONFIG_HOME/dpkg/buildflags.conf, wobei $XDG_CONFIG_HOME standardmäßig auf $HOME/.config gesetzt ist
- 3.
- temporär durch den Benutzer mittels Umgebungsvariablen (siehe Abschnitt UMGEBUNG)
- 4.
- dynamisch durch den Paketverwalter mittels Umgebungsvariablen, die über debian/rules gesetzt wurden (siehe Abschnitt UMGEBUNG)
- SET Schalter Wert
- Überschreibt den Schalter namens Schalter, um den Wert Wert zu erhalten.
- STRIP Schalter Wert
- Aus dem Schalter namens Schalter alle in Wert aufgeführten Bauschalter entfernen
- APPEND Schalter Wert
- Erweitert den Schalter namens Schalter durch Anhängen der in Wert angegebenen Optionen. Ein Leerzeichen wird vor den angehängten Wert vorangestellt, falls der derzeitige Wert nicht leer ist.
- PREPEND Schalter Wert
- Erweitert den Schalter namens Schalter durch Voranstellen der in Wert angegebenen Optionen. Ein Leerzeichen wird hinter den vorangestellten Wert angehängt, falls der derzeitige Wert nicht leer ist.
BEFEHLE¶
- --dump
- Auf der Standardausgabe alle Kompilierschalter und ihre Werte ausgeben. Es wird ein Schalter pro Zeile ausgegeben, wobei der Werte durch ein Gleichheitszeichen (» Schalter=Wert«) abgetrennt wird. Dies ist die Standardaktion.
- --list
- Gibt die Liste der vom aktuellen Lieferanten unterstützen Schalter (eine pro Zeile) aus. Lesen Sie den Abschnitt UNTERSTÜTZTE SCHALTER für weitere Informationen über sie.
- --status
- Alle Informationen anzeigen, die zum Verständnis des
Verhaltens von dpkg-buildflags nützlich sein können:
relevante Umgebungsvariablen, aktueller Lieferant, Zustand der
Funktionsschalter. Auch die entstehenden Compiler-Schalter mit ihrem
Ursprung werden ausgeben.
- --export=Format
- Auf der Standardausgabe Shell- (falls Format sh ist) oder Make- (falls Format make ist) Befehle ausgeben, die dazu verwandt werden können, alle Kompilierschalter in die Umgebung zu exportieren. Falls Format configure lautet, kann die Ausgabe für eine Kommandozeile von ./configure verwandt werden. Falls der Wert von Format nicht angegeben wird, wird sh angenommen. Nur Kompilierschalter, die mit einem Großbuchstaben beginnen, werden aufgenommen. Bei allen anderen wird angenommen, dass sie für die Umgebung nicht geeignet sind.
- --get Schalter
- Gibt den Wert des Schalters auf der Standardausgabe aus. Beendet sich mit 0, falls der Schalter bekannt ist, andernfalls mit 1.
- --origin Schalter
- Gibt den Ursprung des von --get gelieferten Werts aus. Beendet sich mit 0, falls der Schalter bekannt ist, andernfalls mit 1. Der Ursprung kann einer der folgenden Werte sein:
- vendor
- der ursprünglich vom Lieferanten gesetzte Schalter wird zurückgeliefert
- system
- der Schalter wurde durch eine systemweite Konfiguration gesetzt/verändert
- user
- der Schalter wurde durch eine benutzerspezifische Konfiguration gesetzt/verändert
- env
- der Schalter wurde durch eine umgebungsspezifische Konfiguration gesetzt/verändert
- --query-features Bereich
- Gibt die Funktionalitäten, die für den übergebenen Bereich aktiviert sind, aus. Der einzige derzeit erkannte Bereich ist hardening. Beendet sich mit 0, falls der Bereich bekannt ist, andernfalls mit 1.
- Das Ausgabeformat ist im Kopfzeilen-Stil von RFC822, mit einem Abschnitt pro Funktionalität. Beispiel:
-
Feature: pie Enabled: no Feature: stackprotector Enabled: yes
- --help
- Zeige den Bedienungshinweis und beende.
- --version
- Gebe die Version aus und beende sich.
UNTERSTÜTZTE SCHALTER¶
- CFLAGS
- Optionen für den C-Compiler. Der vom Lieferanten gesetzte Standardwert enthält -g und die Standard Optimierungsstufe (normalerweise -O2 oder -O0, falls die Umgebungsvariable DEB_BUILD_OPTIONS noopt definiert.
- CPPFLAGS
- Optionen für den C-Präprozessor. Standardwert: leer
- CXXFLAGS
- Optionen für den C++-Compiler. Identisch zu CFLAGS.
- FFLAGS
- Optionen für den Fortran-Compiler. Identisch zu CFLAGS.
- LDFLAGS
- Optionen die beim Linken von Programmen oder Laufzeitbibliotheken an den Compiler weitergegeben werden (falls der Linker direkt aufgerufen wird, müssen -Wl und , aus diesen Optionen entfernt werden). Standardmäßig leer.
DATEIEN¶
- /etc/dpkg/buildflags.conf
- Systemweite Konfigurationsdatei
- $XDG_CONFIG_HOME/dpkg/buildflags.conf oder $HOME/.config/dpkg/buildflags.conf
- Benutzer-Konfigurationsdatei
UMGEBUNG¶
Es gibt einen Satz von zwei Umgebungsvariablen, die den gleichen Vorgang durchführen. Der erste (DEB_ Schalter_Vorg) sollte niemals innerhalb von debian/rules verwandt werden. Er ist für Benutzer gedacht, die das Quellpaket mit anderen Bauschaltern erneut bauen möchten. Der zweite Satz (DEB_ Schalter_MAINT_Vorg) sollte nur durch Paketbetreuer in debian/rules verwandt werden, um die entstehenden Bauschalter zu ändern.- DEB_Schalter_SET
- DEB_Schalter_MAINT_SET Diese Variable kann zum Erzwingen des für Schalter zurückgegebenen Werts verwandt werden.
- DEB_Schalter_STRIP
- DEB_Schalter_MAINT_STRIP Diese Variable kann zum Bereitstellen einer durch Leerzeichen getrennten Liste von Optionen verwandt werden, die aus dem Satz von Schalter zurückgelieferten Schaltern entfernt werden.
- DEB_Schalter_APPEND
- DEB_Schalter_MAINT_APPEND Diese Variable kann zum Anhängen ergänzender Optionen zum Wert, der von Schalter zurückgegeben wird, verwandt werden.
- DEB_Schalter_PREPEND
- DEB_Schalter_MAINT_PREPEND Diese Variable kann zum Voranstellen ergänzender Optionen zum Wert, der von Schalter zurückgegeben wird, verwandt werden.
- DEB_BUILD_MAINT_OPTIONS
- Diese Variable kann zum Deaktivieren oder Aktivieren verschiedener Härtungsbauschalter durch die Option hardening verwandt werden. Lesen Sie den Abschnitt HÄRTUNG für weitere Details.
HÄRTUNG¶
Mehrere Kompilierzeit-Optionen (weiter unten beschrieben) können dazu verwandt werden, ein erstelltes Programm gegen Speicherverfälschungsangriffe zu härten, oder zusätzliche Warnungsmeldungen während der Übersetzung auszugeben. Sie werden für Architekturen, die diese unterstützen, standardmäßig aktiviert; die Ausnahmen sind unten angegeben. Jede Härtungsfunktionalität kann durch den entsprechenden Härtungs--Wert in der Umgebungsvariablen DEB_BUILD_MAINT_OPTIONS mit den »+«- und »-«-Schaltern aktiviert und deaktiviert werden. Soll beispielsweise die »pie«-Funktionalität aktiviert und die »fortify«-Funktionalität deaktiviert werden, können Sie Folgendes in debian/rules verwenden:export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify Die spezielle Funktionalität all kann dazu verwandt werden, alle Härtungsfunktionalitäten auf einmal zu aktivieren oder zu deaktiveren. Um daher alles zu deaktiveren und nur »format« und »fortify« zu aktiveren, kann Folgendes eingesetzt werden:
export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
- format
- Diese Einstellung (standardmäßig aktiviert) fügt -Wformat -Werror=format-security zu CFLAGS und CXXFLAGS hinzu. Damit wird über inkorrekte Formatzeichenkettenverwendungen gewarnt und zu einem Fehler führen, wenn Formatfunktionen deart verwandt werden, dass daraus ein mögliches Sicherheitsproblem werden könnte. Derzeit warnt dies über Aufrufe auf printf- und scanf-Funktionen, bei denen die Formatzeichenkette nicht eine reine Zeichenkette ist und es keine Formatargumente gibt, wie in printf(foo); statt printf("%s", foo);. Dies könnte ein Sicherheitsproblem sein, falls die Formatzeichenkette aus einer unvertrauenswürdigen Eingabe stammt und »%n« enthält.
- fortify
- Diese Einstellung (standardmäßig aktiviert)
fügt -D_FORTIFY_SOURCE=2 zu CPPFLAGS hinzu.
Während der Code-Erstellung hat der Compiler umfangreiche
Informationen über Puffergrößen (wo möglich) und
versucht, unsichere unbegrenzte Pufferfunktionsaufrufe durch
längenbegrenzte zu ersetzen. Das ist besonders für alten,
verkramten Code nützlich. Zusätzlich werden Formatzeichenketten
in schreibbarem Speicher, die »%n« enthalten, blockiert. Falls
eine Anwendung von solchen Formatzeichenketten abhängt, müssen
dafür andere Lösungsmöglichkeiten gefunden werden.
- stackprotector
- Diese Einstellung (standardmäßig aktiviert)
fügt -fstack-protector --param=ssp-buffer-size=4 zu
CFLAGS und CXXFLAGS hinzu. Dies fügt
Sicherheitsprüfungen gegen die Überschreibung des
Stapelspeichers (Stacks) hinzu. Damit werden viele mögliche
Code-Einfügeangriffe zu Abbruchsituationen. Im besten Fall werden
damit Code-Einfügungsangriffe zu Diensteverweigerungsangriffen oder
zu keinen Problemen (abhängig von der Anwendung).
- relro
- Diese Einstellung (standardmäßig aktiviert) fügt -Wl,-z,relro zu LDFLAGS hinzu. Während des Ladens des Programms müssen mehrere ELF-Speicherabschnitte vom Binder (Linker) geschrieben werden. Diese Einstellung signalisiert dem Ladeprogramm, diese Abschnitte in nur-Lese-Zugriff zu ändern, bevor die Steuerung an das Programm übergeben wird. Insbesondere verhindert dies GOT-Überschreibeangriffe. Falls diese Option deaktiviert ist, wird auch bindnow deaktiviert.
- bindnow
- Diese Einstellung (standardmäßig deaktiviert) fügt -Wl,-z,now zu LDFLAGS hinzu. Während des Ladens des Programms werden alle dynamischen Symbole aufgelöst, womit das gesamte PLT nur-lesend markiert werden kann (aufgrund von relro oben). Diese Option kann nicht aktiviert werden, falls relro nicht aktiviert ist.
- pie
- Diese Einstellung (standardmäßig deaktiviert)
fügt -fPIE zu CFLAGS und CXXFLAGS sowie -fPIE
-pie zu LDFLAGS hinzu. »Position Independent
Executable« (positionsunabhängige Programme) werden
benötigt, um »Address Space Layout Randomization«
(Bereitstellung eines zufälligen Adressbereichlayouts) auszunutzen,
der von einigen Kernelversionen bereitgestellt wird. Während ASLR
bereits für Datenbereiche auf dem Stapel (Stack) und Heap erzwungen
werden kann (brk und mmap), müssen die Codebereiche
positionsunabhängig übersetzt werden. Laufzeitbibliotheken
machen dies bereits (-fPIC), so dass sie ASLR automatisch erhalten, aber
Programm-.text-Regionen müssen mit PIE gebaut werden, um ASLR zu
erhalten. Wenn dies passiert, sind ROP- (Return Oriented Programming)
Angriffe sehr viel schwerer durchzuführen, da es keine statischen
Orte mehr gibt, zu denen während eines
Speicherverfälschungsangriffs hingesprungen werden könnte.
ÜBERSETZUNG¶
Die deutsche Übersetzung wurde 2004, 2006-2015 von Helge Kreutzmann <debian@helgefjell.de>, 2007 von Florian Rehnisch <eixman@gmx.de> und 2008 von Sven Joachim <svenjoac@gmx.de> angefertigt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 2 oder neuer für die Kopierbedingungen. Es gibt KEINE HAFTUNG.2012-04-03 | Debian-Projekt |