Linuxでは、rootの特権は一時的に「機能」に分割されていたため、そのドキュメントを調べることで、rootの特別な特権の完全なリストを取得できますman 7 capabilities
。
あなたの質問に答えるために、コマンドはこれらの特権のいずれかが必要なときにrootとして実行する必要があり、その非スクリプト実行可能ファイルはファイルメタデータに関連する機能が設定されていません(たとえば、Pythonスクリプトが機能を必要とする場合、機能shebang行で指定されたpythonインタープリターにいる必要があります)。
ルートアクセスを必要とする一部のコマンドsudo
は、実行可能ファイルにSUIDビットが設定されているため、次のようなものを必要としないことに注意してください。このビットを使用すると、実行アクセス権を持つユーザーが実行すると、実行可能ファイルが所有者(通常はルート)として実行されます。sudo
ユーザーの変更は必要な特権アクションであるため、例はそれ自体です。
編集:私はあなたの質問から、コマンドを実行する前にルートアクセスが必要かどうかを判断できるという考えがあるかもしれないことに注意します。そうではありません。プログラムにはルート権限が必要な場合とそうでない場合があります。これは、実行時に提供されるデータのためにプログラムによって決定される場合があります。たとえば、vim
引数なしでを呼び出し、一連のキーを押して貼り付けることで、書き込み権限がないファイルに何かを書き込むように指示するか、ルート権限を必要とする別のコマンドを実行することができます。実行前のコマンドについては、最終的にルートアクセスが必要であることを示すものはありません。それは、それを必要とする何かをしようとする時点でのみ決定できるものです。
とにかく、ルートの権限の参照マンページからの非常に少数の例があります:
- プロセスUID(setuid(2)、setreuid(2)、setresuid(2)、setfsuid(2))の任意の操作を行います。
- ファイルの読み取り、書き込み、および実行の許可チェックをバイパスします。(DACは「任意アクセス制御」の略語です。)
- シグナル送信の許可チェックをバイパスします(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値(nice(2)、setpriority(2))を上げ、任意のプロセスのnice値を変更します。