主に、ツールまたはプログラムが行うことの問題です .非スーパーユーザーは、自分が所有している、またはアクセスできるファイルのみに触れることができることに注意してください。すべてに指を入れることができる必要があるツール それが行うことを行うには、スーパーユーザーのアクセスが必要になります。スーパーユーザー アクセスが必要になる可能性のあるものの簡単なサンプルには、以下が含まれますが、これらに限定されません:
- 1024 未満のポートでリスニング TCP ソケットを開く
- システム構成の変更 (例:
/etc
のすべて) ) - グローバルにアクセス可能な新しいライブラリの追加 (
/lib
と/usr/lib
) またはバイナリ (/bin
、/usr/bin
) - タッチを行っているユーザーが所有していない、十分な許容モードを持たないファイルへのタッチ
- 他のユーザーのファイルの所有権を変更する
- プロセスの優先度を上げる (例:
renice
) - ほとんどのサービスの開始または停止
- カーネル構成 (swappiness の調整など)
- ファイル システム クォータの調整
- 「フル」ディスクへの書き込み (ほとんどのファイルシステムは root ユーザー用にスペースを確保しています)
- 他のユーザーとしてアクションを実行する
Linux では、root の特権はある時点で「機能」に分割されていたため、そのドキュメントを調べることで root の特別な特権の完全なリストを取得できます:man 7 capabilities
.
あなたの質問に答えるために、これらの権限のいずれかが必要な場合、コマンドはルートとして実行する必要があり、その非スクリプト実行可能ファイルには、ファイルメタデータに関連する機能が設定されていません (たとえば、python スクリプトが機能を必要とする場合、機能shebang 行で指定された python インタープリターにある必要があります)。
root アクセスが必要な一部のコマンドは、sudo
のようなものを必要としないことに注意してください。 実行可能ファイルに SUID ビットが設定されているためです。このビットにより、実行アクセス権を持つユーザーが実行したときに、実行可能ファイルが所有者 (通常はルート) として実行されます。例は sudo
です ユーザーの変更は実行する必要がある特権アクションであるため、それ自体です。
編集:あなたの質問から、コマンドを実行する前にルートアクセスが必要かどうかを判断できるという考えがあるかもしれないことに注意してください。そうではありません。プログラムはルート権限を必要とする場合もあれば、必要としない場合もあります。これは、実行時に提供されるデータのために、プログラムによって決定される可能性があります。たとえば、vim
を呼び出します。 、引数なしでそのように、そして一連のキーを押して貼り付けることにより、書き込み権限のないファイルに何かを書き込むように指示するか、それ自体がルート権限を必要とする別のコマンドを実行する可能性があります。実行前のコマンドについては、最終的にルート アクセスが必要になることを示すものはありません。それは、それを必要とする何かをしようとする時点でのみ決定できるものです.
いずれにせよ、参照されている root 権限のマンページからごくわずかな例を以下に示します:
- プロセス UID を任意に操作する (setuid(2)、setreuid(2)、setresuid(2)、setfsuid(2));
- ファイルの読み取り、書き込み、および実行の権限チェックをバイパスします。 (DACは「Discretionary Access Control」の略です。)
- シグナル送信の許可チェックをバイパスします (kill(2) を参照)。これには、ioctl(2) KDSIGACCEPT 操作の使用が含まれます。
- さまざまなネットワーク関連の操作を実行します:
- インターフェース構成;
- IP ファイアウォール、マスカレード、アカウンティングの管理
- ルーティング テーブルを変更する;
- ソケットをインターネット ドメインの特権ポート (ポート番号 1024 未満) にバインドします。
- カーネル モジュールのロードとアンロード (init_module(2) と delete_module(2) を参照);
- システムクロックの設定 (settimeofday(2), stime(2), adjtimex(2));リアルタイム (ハードウェア) クロックを設定します。
- 次のような一連のシステム管理操作を実行します:quotactl(2)、mount(2)、umount(2)、swapon(2)、swapoff(2)、sethostname(2)、setdomainname(2);リ>
- reboot(2) と kexec_load(2) を使用します。
- chroot(2) を使用します。
- プロセスのナイス値 (nice(2)、setpriority(2)) を上げ、任意のプロセスのナイス値を変更します。