ルートアクセスを必要とする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
権限を順番に分割するのではなく、ユーザーの身元に基づいて権限を検証すると思います。ファイルとユーザーには権限が与えられ、コマンドは分割しないでください。