2017-04-04 26 views
0

Plan 9 capデバイスと同様にLinux用の小さな機能システムを実装する必要があります。ホストの所有者(Linuxの場合root)は、user1user2と偽装することを可能にします。[email protected]@random-stringから/dev/caphashです。 を知っているuser1プロセスは、uiduser2に変更して、[email protected]@random-stringから/dev/capuseに変更できます。実行中の非暴走プロセスのuid/gidを変更する

Linuxでは、任意の特権プロセスがsetuid(2)システムコールを持つ特権のないユーザーになりすますことがありますが、水平偽装を許可するメカニズムはわかりません。 Linuxはどうしていますか?

答えて

1

セルジュE. Hallynは、Linuxカーネルのメーリングリストにp9authを提出2010年4月にはこの機能をほとんど提供していました(ただし、最後に提出されたフォームであっても、インターフェイスは少し異なります)。残念ながら、それはLinuxカーネルには含まれていませんでした。

Linuxの基本的なセキュリティパラダイムは、水平ではなく垂直です。

特権はcapabilitiesに分けられ、でを取得できます。余分な特権はいつでも削除できます。実際には、ファイルシステムの機能とsetcapユーティリティを使用して、特権を持たないバイナリに、その実行時にいつでも特定の機能を実行させることができます。 (Linuxカーネル2.6.33以降では、プロセスが別の実行中のプロセスの機能を変更することはできなくなりました)。 CAP_SETUID)は、実行時にそのIDを変更できます。

つまり、ポイントexecは、権限の昇格のためにLinuxで使用され、特権付きのバイナリが指定されたユーザ(および/またはグループ、場合によっては補足グループ)に変更され、余分な特権が削除されます。私は特権のないプロセスがexecなしでcredentialsを変更できるようにするメカニズムについて認識していません。

OPの場合、これはPlan 9インターフェイス(/dev/caphash/dev/capuse)が機能しないことを意味します。ユーザー空間に実装された同等のLinuxインターフェイスは、資格情報の変更の一環としてバイナリのexecを必要としますが、それ以外には、提案のためにOPのユースケースが十分ではありません。

カーネル内では、このようなインターフェイスは明らかに可能です(この回答の最初のリンクに示されているように)。バニラカーネルでは使用できません。

0

linux(および一般的にはUNIX)には、実行可能ファイルのビットパーミッションの1つと同様の機能があります。 setuidビットの実行可能バイナリファイルがある場合、そのファイルを実行すると、カーネルはそのプロセスの実効ユーザーIDをそのファイルの所有者に設定することによって実行可能ファイルを実行します。したがって、そのファイルを実行する実行権限を持っている場合は、このメカニズムが機能します。ユーザーab、およびcを、あるプログラムの実行時にユーザーdに偽装したいとします。最初にシステム内にユーザーグループ(グループsetuid_d)を作成し、すべてのユーザーa,bおよびcを入力します。実行可能ファイルを作成し、それをユーザーdに属し、グループsetuid_dに属するようにします。これはユーザーdとして、あるいはrootとして、行われている一度だけグループsetuid_dでファイルを実行可能にしますと権限で設定されたUIDビットを有効

$ chgrp setuid_d program 
$ chown d program 
$ chmod ug+x,o-x,u+s program 
$ program # you'll be effectively user d when executing program 
+0

質問はCLI指向より多くのAPIですが、私はそのオプションもチェックします。 – user3368561

関連する問題