Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
getenv, secure_getenv - 環境変数を得る
書式
#include <stdlib.h> char *getenv(const char *name); char *secure_getenv(const char *name); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): secure_getenv(): _GNU_SOURCE
説明
関数 getenv() は、環境リストから名前が name の環境変数を検索し、対応する value 文字列への ポインターを返す。 GNU 固有の secure_getenv() 関数は getenv() と同様だが、 "secure execution" (「安全な実 行」) が必要な場合には NULL を返す点が異なる。 "secure execution" が必要となるのは、 呼び 出し元プロセスにより実行されるプログラムがロードされる際に、 以下の条件のいずれか一つが成 立する場合である。 * プロセスの実効ユーザー ID がプロセスの実ユーザー ID と一致しない場合、またはプロセスの 実効グループ ID がプロセスの実グループ ID と一致しない場合 (通常、この状況になるのは、 set-user-ID プログラムか set-group-ID プログラムを実行した場合である)。 * 実行ファイルで実効ケーパビリティビットがセットされている場合。 * プロセスの許可ケーパビリティセットが空でない場合。 Linux セキュリティモジュールにより要求された場合にも "secure execution" は必要となる場合が ある。 secure_getenv() 関数は、 set-user-ID プログラムや set-group-ID プログラムが実行環境を偶然 信用してしまった場合に起こり得る脆弱性を、 汎用ライブラリで回避するために使うことを意図し て作られた。
返り値
関数 getenv() は、環境における値 value へのポインターを返す。 name にマッチする環境変数が 存在しないときには NULL を返す。
バージョン
secure_getenv() は glibc 2.17 で初めて登場した。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。 ┌──────────────────────────┬───────────────┬─────────────┐ │インターフェース │ 属性 │ 値 │ ├──────────────────────────┼───────────────┼─────────────┤ │getenv(), secure_getenv() │ Thread safety │ MT-Safe env │ └──────────────────────────┴───────────────┴─────────────┘
準拠
getenv(): POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD. secure_getenv() は GNU による拡張である。
注意
環境リストの文字列は name=value という形式をしている。 通常の実装では、 getenv() は環境リスト内の文字列へのポインターを返す。 呼び出し元はこの文 字列を変更しないように注意しなければならない。 この文字列を変更すると、そのプロセスの環境 を変化させることになるからである。 getenv() の実装はリエントラント (再入可能) であることを要求されていない。 getenv() の返り 値により参照される文字列は静的に割り当てられてもよく、 文字列の内容は後続の getenv(), putenv(3), setenv(3), unsetenv(3) の呼び出しにより変更されることがある。 secure_getenv() の "secure execution" モードは、 カーネルからユーザー空間に渡される補助ベ クトル (auxiliary vector) の AT_SECURE フラグにより制御される。
関連項目
clearenv(3), getauxval(3), putenv(3), setenv(3), unsetenv(3), capabilities(7), environ(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。