プログラムの実行にrootが必要かどうかをどのようにして知ることができますか?


10

これは少し基本的なことであり、おそらくばかげた質問であることを理解していますが、答えを見つけることができませんでした。

すべてのファイルに"Executable"ビットがあることを理解しています。

ユーザーとグループrootが所有する、を必要とするプログラムにはビットがないため、root以外のユーザーがそれらを実行できないようにするプログラムだと思いました。しかし、およびディレクトリでは、すべてのファイルに次のような権限があることがわかりますrootrootExecutableOther/bin/sbin-rwxr-xr-x

では、ユーザーが何かを実行するためにroot権限を持っている必要があるかどうかを実際に決定するのは何ですか?


1
デフォルトでは、あなたまたはすべてのユーザーは、/binまたは/sbinディレクトリから任意のプログラムを実行できます。問題は、これらのプログラムのいくつかは、実行するユーザーに応じて実行が異なることです。
RaduRădeanu2014

回答:


13

時々、それはコードにあります。たとえば、の途中でhwclock.c、次のことがわかります。

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

rootであるかどうかにかかわらず、プログラムの動作を変更します。

他のほとんどの場合、それは暗黙的です。カーネルに委任されました。たとえば、プログラムがシステムコールを呼び出してシステムを再起動できる場合、プログラムはrootである場合にのみ機能します。rootでない場合は、「許可が拒否されました」というエラーが発生し、アプリケーション(適切に記述されている場合)から報告されます。または、ファイルを削除しようとしています。ファイルに対してそれを行うための適切な権限があれば、成功します。ない場合は、rootまたはされていない場合とき、それは---依存rm呼び出すunlink()カーネルが権限をチェックします。

したがって、プログラムがroot権限を必要とするかどうかにかかわらず、原則として、実行可能ファイルの権限だけを見ているとは言えません。多くのプログラムでは、一部の操作でのみ必要になるため、そのようなことを行うのは非常に困難です。以下の場合はhwclock1(誰でもクロックを読み取ることができますが、rootだけがそれを設定することができます)ですが、そのうちの何百もあります(killrmcat...)

次に、setuidプログラムの関連する興味深い世界があります...


それで、基本的にカーネルは「それを担当しています」?プログラムがシステムコールを行う場合、カーネルは、プログラムを実行しているユーザーがrootでなければならないかどうかを判断し、それを強制しますか?
Dean

2
基本的にそうです。プログラムは追加のテスト実行できますが、権限チェックはカーネルレベルで行われます。Setuid-rootプログラムは例外です。彼らは常にrootとして実行されるため、権限を自分で確認する必要があります(そしてセキュリティ上の欠陥の素晴らしいフォントです...)
Rmano
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.