other versions
- wheezy 1.16.18
dpkg-buildflags(1) | dpkg suite | dpkg-buildflags(1) |
名前¶
パッケージのビルドの際に用いられるビルドフラグを返却する書式¶
dpkg-buildflags [option...] [command]説明¶
dpkg-buildflags は、Debian パッケージのビルドの際に用いられるコンパイルオプションを示すツールである。 デフォルトのフラグはベンダによって定義されるが、いくつかの方法によって上書きすることができる。- 1.
- システムワイドな /etc/dpkg/buildflags.conf
- 2.
- 現在のユーザの $XDG_CONFIG_HOME/dpkg/buildflags.conf。$XDG_CONFIG_HOMEのデフォルトは $HOME/.config である。
- 3.
- ユーザ毎に一時的に設定される環境変数の値 ( 環境変数 セクションを参照のこと)。
- 4.
- パッケージのメンテナによって debian/rulesで設定された環境変数の値 ( 環境変数 セクションを参照のこと)。
- SET flag value
- flag という名前のフラグの値を value で上書きする。
- STRIP flag value
- flag という名前のフラグから、 value で指定されたビルドフラグを取り除く。
- APPEND flag value
- flag という名前のフラグに対して、 value で指定されたオプションを追加する。対象のフラグに値が設定されている場合は、追加する値の前にスペースを付加すること。
- PREPEND flag value
- flag という名前のフラグに対して value で指定されたオプションを値の先頭部分に付加する。対象のフラグに値が設定されている場合は、追加する値の後ろにスペースを付加すること。
コマンド¶
- --dump
- 標準出力に、すべてのコンパイルフラグとその値を出力する。1 行に 1 つのフラグが、等号記号でフラグ名と値とを区切った (" flag=value") 形式で出力される。これはデフォルトの動作である。
- --list
- 現在のベンダによってサポートされるフラグの一覧を (1 行に 1 つずつ) 出力する。詳細については、 サポートされるフラグ セクションを参照のこと。
- --status
- dpkg-buildflags
の動作を示すのに便利な情報を表示する。これには関連する環境変数、現在のベンダ、すべての機能フラグの状態が含まれる。加えて、最終的なコンパイラのフラグが、元々のフラグの状態とともに表示される。
- --export=format
- 標準出力に、シェル形式 ( format が sh の場合) もしくは make 形式 ( format が make の場合) で、定義済のすべてのコンパイルフラグをエクスポートする。 format が configure の場合、出力形式は、 ./configure コマンドで使用可能な形式となる。 format の値が指定されない場合は sh が仮定される。大文字から始まるコンパイルフラグのみが対象となる。それ以外のものは、現在の環境に適合していないものと見なされる。
- --get flag
- 指定されたフラグの値を標準出力に出力する。フラグが存在している場合は 0、それ以外の場合は 1 が返却される。
- --origin flag
- --get によって返却された値の提供元を表示する。フラグが存在している場合は 0、それ以外の場合は 1 が返却される。origin は、以下の値のいずれかとなる:
- vendor
- ベンダによって設定された本来のフラグ
- system
- システムワイドな設定ファイルにより設定、変更されたフラグ
- user
- ユーザ毎の設定により設定、変更されたフラグ
- env
- 環境固有の設定により設定、変更されたフラグ
- --query-features area
- 指定された領域 (area) で有効化された機能 (Feature) を出力する。現在認識される領域は hardening のみである。領域が認識されている場合は 0 を、それ以外の場合は 1 を返却し終了する。
- The output format is RFC822 header-style, with one section per feature. For example:
-
Feature: pie Enabled: no Feature: stackprotector Enabled: yes
- --help
- 利用方法を表示して終了する。
- --version
- バージョン情報を表示して終了する。
サポートされるフラグ¶
- CFLAGS
- C コンパイラのオプション。デフォルトの値はベンダによって設定されるが、 -g およびデフォルトの最適化レベル (通常 -O2 だが DEB_BUILD_OPTIONS環境変数に noopt が設定されている場合は -O0) も含まれている。
- CPPFLAGS
- C プリプロセッサのオプション。デフォルト値: 未定義
- CXXFLAGS
- C++ コンパイラのオプション。 CFLAGS と同等
- FFLAGS
- Fortran コンパイラのオプション。 CFLAGS と同等
- LDFLAGS
- 実行ファイルもしくは共有オブジェクトのリンクの際にコンパイラに渡されるオプション (リンカが直接呼び出される場合は、 -Wl および , がオプションから削除される)。デフォルト値: 未定義
ファイル¶
- /etc/dpkg/buildflags.conf
- システムワイドな設定ファイル
- $XDG_CONFIG_HOME/dpkg/buildflags.conf もしくは $HOME/.config/dpkg/buildflags.conf
- ユーザ毎の設定ファイル
環境変数¶
同じ動作を行う環境変数が 2 組存在する。1 つ目の (DEB_ flag_op) を debian/rules 内で用いてはならない。これは、デフォルトのフラグとは異なる設定でソースパッケージをリビルドしたいユーザ向けの設定である。2 つ目の方法 (DEB_ flag_MAINT_op) は debian/rules 内でのみ使用すべきである。これは、パッケージのメンテナがビルドフラグを変更する際に使用すること。- DEB_flag_SET
- DEB_flag_MAINT_SET この変数は、 flag の値を強制的に設定したい場合に使用すること
- DEB_flag_STRIP
- DEB_flag_MAINT_STRIP この変数は、 flag の値から削除したいオプションがある場合に使用すること。削除したいオプションは、スペースで区切ったリスト形式で指定する。
- DEB_flag_APPEND
- DEB_flag_MAINT_APPEND この変数は、 flag の値に追加したいオプションがある場合に使用すること。
- DEB_flag_PREPEND
- DEB_flag_MAINT_PREPEND この変数は、 flag の値の先頭部分に追加したいオプションがある場合に使用すること。
- DEB_BUILD_MAINT_OPTIONS
- この変数は、hardening オプションによるビルドフラグの様々な要塞化の有効化、無効化を行うために使用される。詳細は 要塞化 セクションを参照のこと。
要塞化¶
幾つかのコンパイルタイムオプションを (以下で説明する) 使用することで、生成されるバイナリをメモリ破壊攻撃から保護したり、コンパイル時に追加の警告メッセージを表示させたりすることができる。以下で注記されていない限り、これらのオプションは、サポートされているアーキテクチャにおいて、デフォルトで有効化される。 各要塞化機能は、 DEB_BUILD_MAINT_OPTIONS 環境変数の hardening 値において "+" や "-" をつけることで有効化/無効化できる。例えば、"pie" 機能を有効化して "fortify" 機能を無効化する場合、 debian/rules で次のように設定する:export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify 特別な機能 all により、すべての要塞化機能を一度に有効化、無効化することができる。次のようにして、すべての機能を無効化した上で "format" と "fortify" のみを有効化することができる:
export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
- format
- この設定 (デフォルト有効) により、 CFLAGS および CXXFLAGS に -Wformat -Werror=format-security が追加される。これにより、不適切なフォーマット文字列の使用に関する警告が行われ、フォーマット関数が潜在的にセキュリティ問題を引き起こすような使用をされている場合に処理を失敗させる。現在、これは、 printf と scanf 関数の呼び出しで、フォーマット文字列が文字列リテラル以外かつフォーマットに関する引数がないもの、例えば printf("%s", foo); ではなく printf(foo); のようなものについて警告する。信頼できない入力からもたらされたフォーマット文字列が "%n" を含んでいる場合、呼び出しはセキュリティホールとなりうる。
- fortify
- この設定
(デフォルト有効)
により、 CPPFLAGS に
-D_FORTIFY_SOURCE=2
が追加される。コード生成の際に、コンパイラはバッファサイズに関して
(可能な場所では)
多くの情報を収集し、安全でないバッファ長の制限のない関数の呼び出しを、制限のある関数の呼び出しに置換する。これは、古い汚いコードには特に有用である。これに加え、書き込み可能なメモリ上にあるフォーマット文字列で
'%n'
を含むものが抑止される。アプリケーションがこうしたフォーマット文字列に依存している場合は、個別に対処する必要がある。
- stackprotector
- この設定
(デフォルト有効)
により、 CFLAGS および
CXXFLAGS に -fstack-protector
--param=ssp-buffer-size=4
が追加される。これにより、スタックの上書きに対する安全性チェックが追加され、多くの潜在的なコードインジェクション攻撃が抑止される。(アプリケーションにもよるが)
最良のケースでは、コードインジェクションの脆弱性を単なるサービス拒否に留めたり、無力化したりすることができる。
- relro
- この設定 (デフォルト有効) は、 LDFLAGS に -Wl,-z,relro を追加する。プログラムがロードされる際、ELF メモリセクションの幾つかは、リンカから書き込まれる必要がある。この設定により、ローダはプログラムに制御を引き渡す前に、こうしたセクションを読み取り専用にする。これにより、GOT を上書きする攻撃の大半が抑止される。このオプションが無効な場合、 bindnow も同様に無効となる。
- bindnow
- この設定 (デフォルト無効) は LDFLAGS に -Wl,-z,now を追加する。これにより、プログラムがロードされる時点ですべての動的なシンボルが解決されるため、PLT 全体を読み取り専用とすることが可能となる (上の relro を参照のこと)。 relro が有効でない場合、このオプションは有効化できない。
- pie
- この設定
(デフォルト無効) は
CFLAGS および CXXFLAGS に
-fPIE を追加し、 LDFLAGS
に -fPIE -pie
を追加する。PIE
(位置独立実行形式)
は、幾つかのカーネルバージョンでサポートされるアドレス空間配置のランダム化
(ASLR)
を行う上で必要となる。スタックとヒープ
(brk とmmap)
内のデータ領域では、ASLR
が既に必須となっているが、コード領域も位置独立でコンパイルされる必要がある。共有ライブラリでは、(-fPIC)
によりこれが既に行われているので、自動的に
ASLR
が行われるが、バイナリの
.text 領域は ASLR
を行うために、PIE
でビルドされる必要がある。これが実現すると、メモリ破壊攻撃を行う際にリターンさせる先のアドレスが静的ではなくなるため、ROP
(Return Oriented Programming)
攻撃が、より困難となる。
翻訳者¶
高橋 基信 <monyo@monyo.com>. 喜瀬 浩 <kise@fuyuneko.jp>. 関戸 幸一 <sekido@mbox.kyoto-inet.or.jp>. 鍋谷 栄展 <nabe@debian.or.jp>. 倉澤 望 <nabetaro@debian.or.jp>. 石川 睦 <ishikawa@linux.or.jp>. 鵜飼 文敏 <ukai@debian.or.jp>. 中野 武雄 <nakano@apm.seikei.ac.jp>.翻訳校正¶
Debian JP Documentation ML <debian-doc@debian.or.jp>.2012-04-03 | Debian Project |