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 をしないラッパーであり、特権を削除するために使われる。
これは
daemontools
の
setuidgid(8)、
runit
の
chpst(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_caps
は
execve(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