特権(コンピューティング)
コンピューティングでは、 特権はコンピューターシステム上でセキュリティ関連の機能を実行する権限の委任として定義されます。特権を使用すると、ユーザーはセキュリティに影響するアクションを実行できます。さまざまな特権の例には、新しいユーザーの作成、ソフトウェアのインストール、またはカーネル機能の変更が含まれます。
追加の制御レベルが委任されたユーザーは、特権と呼ばれます。ほとんどの特権を持たないユーザーは、非特権ユーザー、通常ユーザー、または通常ユーザーとして定義されます。
理論
特権は、自動、付与、または適用できます。
アクションを実行する権限を持つ必要がない場合、自動特権が存在します。たとえば、システムを使用するためにシステムにログインする必要があるシステムでは、ログアウトには特権は必要ありません。ファイル保護を実装していないシステム(MS-DOSなど)は、基本的にファイルに対してアクションを実行するための無制限の特権を与えます。
権限付与権限に何らかの資格情報を提示した結果として、付与された権限が存在します。これは通常、ユーザー名とパスワードを使用してシステムにログオンすることで実現され、指定されたユーザー名とパスワードが正しい場合、ユーザーに追加の権限が付与されます。
特権は、実行されたプログラムが高度な特権の要求を発行するか、何らかのプログラムを実行して追加の特権を適用することによって適用されます。追加の特権を申請するユーザーの例は、rootユーザーとしてコマンドを実行するsudoコマンド、またはKerberos認証システムによって提供されます。
最新のプロセッサアーキテクチャには、OSをさまざまな特権レベルで実行できる複数のCPUモードがあります。一部のプロセッサーには2つのレベルがあります( ユーザーとスーパーバイザーなど )。 i386 +プロセッサには4つのレベルがあります(#0が最大、#3が最小の特権)。タスクには特権レベルのタグが付けられます。リソース(セグメント、ページ、ポートなど)および特権命令は、要求された特権レベルでタグ付けされます。タスクがリソースを使用するか、特権命令を実行しようとすると、プロセッサはそのタスクに許可があるかどうかを判断します(許可されていない場合、「保護障害」割り込みが生成されます)。これにより、ユーザータスクがOSまたは相互に損傷を与えることを防ぎます。
コンピュータープログラミングでは、参照されている無効なメモリ位置が1つの制御デバイス入出力などの特権位置である場合、配列が境界外にアクセスされたり、無効なポインターが逆参照されたりすると、特権命令違反に関連する例外が発生する場合があります。これは、ポインター演算を使用するか、配列の境界を自動的にチェックしないCなどのプログラミング言語で特に発生しやすくなります。
Unix
Unixライクシステムでは、スーパーユーザー(一般に「ルート」と呼ばれる)がすべての特権を所有します。通常のユーザーには、最も一般的なタスクを実行するのに十分な権限のみが付与されます。 UNIXシステムには、組み込みのセキュリティ機能があります。ほとんどのユーザーは、新しいユーザーアカウントを設定したり、他の管理手順を実行したりすることはできません。ユーザー「root」は、スーパーユーザーと呼ばれる特別なユーザーであり、システム上で何でも実行できます。この高度な能力は、UNIXシステムを完全に管理するために必要ですが、ユーザーがミスをしてシステムの問題を引き起こすことも可能にします。
通常、非特権ユーザーは次のことができません。
- カーネルオプションを調整します。
- システムファイルまたは他のユーザーのファイルを変更します。
- ファイルの所有者を変更します。
- ランレベルを変更します(System Vスタイルの初期化があるシステム)。
- ulimitまたはディスククォータを調整します。
- デーモンを起動または停止します。
- 他のユーザーのシグナルプロセス。
- デバイスノードを作成します。
- ユーザーまたはグループを作成または削除します。
- ボリュームをマウントまたはマウント解除しますが、一般ユーザーがコンパクトディスクなどのリムーバブルメディアをマウントおよびマウント解除できるようにすることが一般的になってきています。これは通常、FUSEを介して行われます。
- 任意のsbin /ディレクトリのコンテンツを実行しますが、通常のユーザーが実行する場合、そのようなプログラムの動作を単純に制限することが一般的になっています。
- 1024未満のポートをバインドします。
Windows NT
Windows NTベースのシステムでは、権限はさまざまな程度で委任されます。これらの委任は、ローカルセキュリティポリシーマネージャー(SECPOL.MSC)を使用して定義できます。以下は、デフォルトの割り当ての簡略リストです。
- 「NT AUTHORITY \ System」は、Unixライクシステムのスーパーユーザーに最も近いものです。作成されたすべてのファイルのトラスティであるなど、従来のUnixスーパーユーザーの多くの特権があります。
- 「管理者」は、Unixライクなシステムのスーパーユーザーに最も近いものの1つです。ただし、このユーザーは、スーパーユーザーができる限り多くのオペレーティングシステムの保護を上書きすることはできません。
- 「管理者」グループのメンバーには、「管理者」とほぼ同等の特権があります。
- 「Power Users」グループのメンバーは、プログラムをインストールしてシステムをバックアップすることができます。
- 「Users」グループのメンバーは、Unixライクシステムの非特権ユーザーと同等です。
Windowsでは、ユーザーやグループに個別に割り当てることができる多くの管理特権が定義されています。アカウント(ユーザー)は、直接またはグループメンバーシップを介して間接的に、付与された特権のみを保持します。インストール時に、いくつかのグループとアカウントが作成され、それらに特権が付与されます。ただし、これらの許可は、後で変更することも、グループポリシーを使用して変更することもできます。 Linuxとは異なり、特定のアカウントに暗黙的または永続的に付与される特権はありません。
一部の管理権限(たとえば、任意のファイルの所有権の取得や復元)は非常に強力であるため、悪意を持って使用すると、システム全体が危険にさらされる可能性があります。ユーザーアカウント制御(Windows Vista以降はデフォルトでオン)を使用すると、Windowsはログイン時にこれらの特権のユーザートークンを削除します。したがって、ユーザーが幅広いシステム権限を持つアカウントでログインした場合、これらのシステム権限で実行されることはありません。ユーザーがシステム権限のいずれかを必要とする管理アクションを実行する場合は常に、 昇格したプロセスからこれを行う必要があります。 昇格されたプロセスを起動するとき、ユーザーは、自分の同意を必要とするプロンプトを介して自分の管理特権がアサートされていることを認識します。実際に必要になるまで特権を保持しないことは、最小特権の原則に準拠しています。
昇格したプロセスは、 システムの完全な特権ではなく、 ユーザーの完全な特権で実行されます 。それでも、ユーザーの特権は、特定のプロセスに必要な特権よりも大きい場合があり、したがって、完全な特権ではありません。
DOSベースのWindows ME、Windows 98、Windows 95、およびNT以外のWindowsの以前のバージョンはFATファイルシステムでのみ動作し、ファイルシステムのアクセス許可をサポートしていませんでした。 NTFSファイルシステムを使用します。
命名法
Windowsソースコードで使用される名前は、「Privilege」または「LogonRight」で終わります。これにより、これらすべての「権利」と「特権」の完全なセットを何と呼ぶべきかについて、いくらか混乱が生じています。
マイクロソフトでは現在、「ユーザー権利」という用語を使用しています。過去には、「特権の権利」、「ログオンユーザーの権利」、「NT-Rights」などの他の用語もMicrosoftによって使用されてきました。