ルートアクセスを必要とするLinuxコマンドはどのように決定されますか?

ルートアクセスを必要とするLinuxコマンドはどのように決定されますか?

ルートアクセスを必要とするLinuxコマンドはどのように決定されますか?apt-get権限を要求することが望ましい理由を理解してくださいroot。しかし、このコマンドは他のコマンドとどう違いますか?これは実行可能ファイルの所有権と実行権限の問題ですか?

答え1

これは主にツールまたはプログラムの問題です。する。スーパーユーザーでない人は、自分が所有またはアクセスできるファイル、そのファイルにアクセスするために必要なすべてのツールに触れることができることを覚えておいてください。すべてそのタスクを実行するにはスーパーユーザーアクセスが必要です。スーパーユーザーアクセスが必要な可能性がある事項の簡単な例は次のとおりです(ただし、これに限定されない)。

  • 1024より低いポートで受信TCPソケットを開きます。
  • システム構成の変更(例:すべての項目/etc
  • /libグローバルにアクセス可能な新しいライブラリ(および/usr/lib)またはバイナリ(/bin/usr/bin)を追加する
  • そのファイルに触れるユーザーの所有者ではなく、十分な特権モードを持たないファイルをタッチします。
  • 他のユーザーのファイル所有権の変更
  • プロセス優先順位を上げる(例renice:)
  • ほとんどのサービスの開始または停止
  • カーネル構成 (例: スワップ性の調整)
  • ファイルシステムクォータの調整
  • 「フル」ディスクへの書き込み(ほとんどのファイルシステムはrootユーザーのためにいくつかのスペースを予約します)
  • 他のユーザーと同様にタスクを実行する

答え2

Linuxでは、root権限が「機能」に分割されているため、この記事を確認すると、rootの特別な権限の完全なリストを取得できます。man 7 capabilities

質問に答えるには、コマンドにこれらの権限のいずれかが必要な場合はrootとして実行する必要があり、スクリプト以外の実行可能ファイルのファイルメタデータに関連する機能が設定されていません(たとえば、Pythonスクリプトにその機能が必要な場合、関数はshebang行指定されたPythonインタプリタに存在する必要があります。

sudoルートアクセスを必要とする一部のコマンドでは、実行可能ファイルにSUIDビットが設定されているため、これは必要ありません。このビットを使用すると、実行アクセス権を持つ人が実行可能ファイルを実行すると、実行可能ファイルは所有者(通常はroot)として実行されます。sudoユーザーを変更することは、実行する必要がある特権タスクなので、それ自体を例に挙げることができます。

編集:あなたの質問でコマンドを実行する前に、コマンドにrootアクセスが必要かどうかを判断できると思うかもしれません。しかし、実際にはそうではありません。プログラムは、時にはroot権限を必要とする場合があり、時には必要とされない場合があります。これは、プログラムが実行時に提供されるデータに基づいて決定することがあります。たとえば、引数なしでこのように呼び出しvimて、一連のキーストロークと貼り付けを使用して、書き込み権限のないファイルに何かを書き込むか、root権限を必要とする別のコマンドを実行するように指示します。 。実行前に、コマンドにルートアクセスが必要であることはまったくありません。これは、rootアクセスが必要な操作を実行したい場合にのみ確認できます。

とにかく、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))。リアルタイム(ハードウェア)時計を設定します。
  • quotel(2), mount(2), umount(2), swapon(2), swapoff(2), sethostname(2) および setdomainname(2) を含む一連のシステム管理タスクを実行します。
  • 再起動(2)とkexec_load(2)を使用してください。
  • chroot(2) を使用してください。
  • プロセスのnice値(nice(2)、setpriority(2))を増やし、すべてのプロセスのnice値を変更します。

答え3

権限を順番に分割するのではなく、ユーザーの身元に基づいて権限を検証すると思います。ファイルとユーザーには権限が与えられ、コマンドは分割しないでください。

関連情報