SETPRIV

Section: User Commands (1)
Updated: July 2014
Index Return to Main Contents
 

名前

setpriv - 別の Linux 特権 (privilege) 設定でプログラムを実行する。  

書式

setpriv [options] program [arguments]  

説明

execve(2) で継承される、いろいろな Linux 特権設定を設定または取得する。

su(1) と runuser(1), と比較して、 setpriv(1) は PAM を使わず、パスワードのプロンプトも出さない。 これは単純なプログラムで、 execve(2) の set-user-ID をしないラッパーであり、特権を削除するために使われる。 これは daemontoolssetuidgid(8)、 runitchpst(8) など、他のサービスマネージャーと一緒に提供される同様のツールと同じように 行われる。  

オプション

--clear-groups
補助 (supplementary) グループをクリアする。
-d, --dump
現在の特権状態をダンプする。 1 回以上指定することが可能で、追加のほとんど使い道のない情報も 表示できる。 他の全てのオプションとは互換性がない (一緒には指定できない)。
--groups group...
補助グループを設定する。引き数はカンマ区切りの GID またはグループ名のリストである。
--inh-caps (+|-)cap... or --ambient-caps (+|-)cap... or --bounding-set (+|-)cap...
継承可能 (inheritable) ケーパビリティ、環境 (ambient) ケーパビリティ、 ケーパビリティバウンディングセット (bounding set) を設定する。 capabilities(7) を参照すること。 引き数は +cap-cap エントリのカンマ区切りのリストであり、それぞれエントリを追加と 削除を行う。 cap は、 capabilities(7) に書かれている cap_ プレフィックスが付いていない、人が読みやすい名前、 または cap_N の形式である。 ここで N は Linux が使う内部ケーパビリティのインデックスである。 +all-all は全てのケーパビリティを追加または削除する。 ケーパビリティのセットは、 --inh-caps では現在の継承可能セット、 --ambient-caps では現在の環境セット、 --bounding-set では現在のバウンディングセットから始める。 ケーパビリティをバウンディングセットから削除して、 継承可能セットから削除しないと、混乱しやすくなるだろう。 そのようなことをしてはいけない。
--keep-groups
補助グループを保持する。 --rgid, --egid, --regid と組み合わせた場合にのみ使用できる。
--init-groups
initgroups(3) を使って補助グループを初期化する。 --ruid または --reuid と組み合わせた場合にのみ使用できる。
--list-caps
既存の全てのケーパビリティを表示する。 このオプションは単独で指定しなけばならない。
--no-new-privs
no_new_privs ビットを設定する。 このビットを設定すると、 execve(2) は新しい特権を許可しない。 例えば、set-user-ID と set-group-ID ビットと同じく、 ファイルケーパビリティも無効化される。 (これらのビットを設定してバイナリを実行すると、動作はするが、 特権を取得しない。 特定の LSM (Linux Security Module)、特に AppArmor は特定のプログラムの 実行に失敗する可能性がある。) このビットは、子プロセスに継承され、無効化できない。 prctl(2) と、Linux カーネルソースの Documentation/:prctl/:no_:new_:privs.txt を参照すること。

no_new_privs ビットは、Linux 3.5 以降でサポートされている。

--rgid gid, --egid gid, --regid gid
実 (real) GID、実効 (effective) GID、またはその両方の GID を設定する。 gid 引き数は、テキストのグループ名でも指定できる。

プライマリ gid を設定した場合、安全のため、 --clear-groups, --groups, --keep-groups, --init-groups のうちの 1 つを指定しなければならない。

--ruid uid, --euid uid, --reuid uid
実 (real) UID、実効 (effective)、またはその両方の UID を設定する。 uid 引き数は、テキストのログイン名でも指定できる。

uid または gid を設定しても、ケーパビリティを変更しないが、 最終的な exec コールでケーパビリティが変更される可能性がある。 root の場合、以下のようにしたいことがあるかもしれないという意味である:

setpriv --reuid=1000 --regid=1000 --inh-caps=-all

--securebits (+|-)securebit...
セキュアビットを設定またはクリアする。 引き数はカンマ区切りのリストである。 有効なセキュアビットは noroot, noroot_locked, no_setuid_fixup, no_setuid_fixup_locked, keep_caps_locked である。 keep_capsexecve(2) でクリアされるので、許可されない。
--pdeathsig keep|clear|<signal>
親プロセスが死んだ場合のシグナル (parent death signal) を、保持・クリア・設定する。 いくつかの LSM、特に SELinux と AppArmor は、プロセスのクレデンシャルが変更されたときに、 このシグナルをクリアする。 --pdeathsig keep は、このような状況に対処するため、クレデンシャルを変更した後で、 親プロセスが死んだ場合のシグナルを回復する。
--selinux-label label
特定の SELinux 遷移 (transition) を要求する (dyntrans ではなく、exec での遷移を使う)。 SELinux が使われていない場合、要求は失敗し、 setpriv(1) はアボートする。 遷移は無視されるか、SELinux の気まぐれ (whim) で execve(2) が失敗する (特に、これは no_new_privs と組み合わせた場合、動作しないだろう)。 これは、 runcon(1) と同様である。
--apparmor-profile profile
特定の AppArmor プロファイルを要求する (exec での遷移を使う)。 AppArmor が使われていない場合、要求は失敗し、 setpriv(1) はアボートする。 遷移は無視されるか、AppArmor の気まぐれ (whim) で execve(2) が失敗する。
--reset-env
TERM 以外の環境変数をクリアする。 ユーザーの passwd エントリに基づいて、環境変数 HOME, SHELL, USER, LOGNAME を初期化する。 一般ユーザーでは PATH が /usr/local/bin:/bin:/usr/bin に設定される。 root では /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin に設定される。

/bin と /sbin が /usr の中に統合されているシステムでは、 環境変数 PATH が違っているかもしれない。 ユーザーの passwd エントリで指定されていない場合、 環境変数 SHELL のデフォルトは /bin/sh に設定される。

-V, --version
バージョン情報を表示して、終了する。
-h, --help
ヘルプを表示して、終了する。
 

注意

指定したオプションの適用が失敗した場合、 program は実行されず、 setpriv は返り値 127 を返す。

このツールは注意して使うこと -- 予期しないセキュリティ上の結果を出すかもしれない。 例えば、(このツールが行うように) no_new_privs を設定して、 SELinux で制限されているプログラムを実行した場合、 SELinux の制限が妨げられるかもしれない。  

su(1)/runuser(1) または sudo(8) と同様の動作がほしい場合 (-g オプションを指定せず)、以下のようにすればよい:

setpriv --reuid=1000 --regid=1000 --init-groups

daemontools の setuid(8) の真似をしたい場合、以下のようにすればよい:

setpriv --reuid=1000 --regid=1000 --clear-groups  

関連項目

runuser(1), su(1), prctl(2), capabilities(7)  

著者

Andy Lutomirski  

入手方法

setpriv コマンドは util-linux パッケージの一部であり、 Linux Kernel Archive から入手できる。


 

Index

名前
書式
説明
オプション
注意
関連項目
著者
入手方法

This document was created by man2html, using the manual pages.
Time: 16:09:08 GMT, April 12, 2020