いくつかのランダムアカウントとの基本的な違いは何ですかroot
? 0UID
以外のものですか?
それで、それは何をしますか?数バイナリするユーザーをrootに昇格させる方法は?私はユーザーが最初にsudo
私たちが見つけたコンテンツを通してグループの一部でなければならないことを理解しています/etc/sudoers
。
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
su
見つかった実行可能ファイルの権限を確認してください。-rwsr-xr-xまたは4755(つまり、すでにsetuid
設定されています)
はいまたはいいえ数この構成ファイルを読み取り、root権限を要求するユーザーが2つのグループのいずれかに属していることを確認するバイナリSudoまたは行政?もしそうなら、バイナリは別のシェルをrootとして作成しますか?設定値ビット) ユーザーが予想されるグループの一部であり、交換したい適切なユーザーのパスワードを知っているとします (例:根、特に)?
長すぎます。
特権昇格の動作は次のsetuid
点に依存していますか?数バイナリですか、それとも現在のプロセスのUIDを変更する他のメカニズムはありますか?前者の場合、EUIDのみが変更され、UID! = EUIDが残ります。これは問題ですか?
関連 これはすべてAndroid環境でどのようにシミュレートされますか?私が知っている限り、プロセスはまだこの権限レベルで実行されていますが、ルートへのアクセスは完全に削除されました。
を削除するとsudo
権限su
の昇格を防ぐのに十分ですか、またはAndroidは追加の措置を講じますか?
ベストアンサー1
ルートはユーザー0です。
キーはユーザーID 0です。カーネルには呼び出しプロセスのユーザーIDを確認する場所がたくさんあり、ユーザーIDが0の場合にのみ特定の操作を実行する権限が付与されます。
ユーザー名は重要ではありません。カーネルはユーザー名さえ知らない。
Androidの権限メカニズムはカーネルレベルでは同じですが、アプリケーションレベルではまったく異なります。 Androidには、Linuxカーネルベースの他のシステムと同様に、rootユーザー(UID 0)があります。 Androidにはユーザーアカウントがなく、ほとんどの設定でユーザー(デバイスを運営して所有している人など)がrootとしてタスクを実行することはできません。 「ルーティング」Androidは、デバイスの所有者/ユーザーがrootとしてタスクを実行できるようにする設定です。
setuidの仕組み
ㅏ設定値実行可能ファイルは、実行可能ファイルを所有するユーザーとして実行されます。たとえば、su
setuidでルートが所有しているため、ユーザーがそれを実行すると、実行中のプロセスがrootとしてsu
実行されます。これは、su
それを呼び出すユーザーがrootアカウントへのアクセス権を持っていることを確認し、検証に成功した場合は指定されたコマンド(またはコマンドが指定されていない場合はシェル)を実行し、検証に失敗した場合は終了します。たとえば、su
ユーザーはルートパスワードを知っていることを証明するように求められます。
もっと詳しく言えば、プロセスはユーザーID 3:これ効果的なセキュリティチェックに使用されるUID。本物UIDは一部の権限確認に使用されますが、主に元のユーザーIDのバックアップとして使用され、保存されたユーザーIDとして使用され、プロセスは一時的に有効なUIDを実際のユーザーIDに切り替えてから古い有効なUIDに戻すことができます。 UID(たとえば、setuidプログラムが元のユーザーとしてファイルにアクセスする必要がある場合に便利です。)setuid実行可能ファイルを実行すると、有効なUIDが実行可能ファイルの所有者に設定され、実際のUIDが保持されます。
setuid実行可能ファイル(およびsetgidなどの同様のメカニズム)を実行することは、プロセスの権限を向上させる唯一の方法です。他のほとんどすべてはプロセスの権限を減らします。
伝統的なUnixを超えて
これまで、私は伝統的なUnixシステムを説明しました。これらはすべて最新のLinuxシステムに適用されますが、Linuxはいくつかの追加の複雑さをもたらします。
Linuxでは能力システム。カーネルには、ユーザーID 0で実行されているプロセスだけが許可されている多くのチェックがあると言ったことを覚えていますか?実際、各検査には独自の機能があります。正確ではありませんが、一部の検査では同じ機能を使用します。たとえば、raw ネットワークソケットにアクセスする機能や、システムを再起動する機能があります。各プロセスには、そのユーザーとグループに関連する一連の機能があります。プロセスがユーザー 0 として実行されるか、または検査に対応する機能がある場合、検査に合格します。特定の権限を必要とするプロセスは、rootではなくユーザーとして実行できますが、必要な機能があるため、プロセスにセキュリティの脆弱性があると影響が制限されます。実行可能ファイルは1つ以上の機能に設定できます。これは setuid に似ていますが、プロセスのユーザー ID ではなく、プロセスの機能セットに適用されます。たとえば、pingにはrawネットワークソケットのみが必要なため、CAP_NET_RAW
setuidルートの代わりにsetcapを使用できます。
Linuxにはいくつかセキュリティモジュール、最も有名なのはSELinux。セキュリティモジュールは、ルートとして実行されるプロセスにも適用できる追加のセキュリティチェックを導入します。たとえば、SELinuxを設定することは可能です(簡単ではありません!)。ユーザーID 0でプロセスを実行しますが、制限が多すぎるため、実際には何もできません。。
Linuxはユーザーネームスペース。カーネル内では、ユーザーは実際には単純なユーザーIDではなく、ユーザーIDと名前空間のペアです。名前空間は階層を形成します。子ネームスペースは、親ネームスペース内の権限を具体化します。フルユーザーは、ルートネームスペースのユーザー0です。名前空間のユーザー0は、その名前空間内でのみ権限を持ちます。たとえば、ユーザーの名前空間のユーザー0はその名前空間のすべてのユーザーを偽装することができますが、外部ではその名前空間のすべてのプロセスが同じユーザーとして実行されます。