コンピューティングにおいて、特権とは、コンピュータシステム上でセキュリティに関連する機能を実行する権限の委譲と定義されます。[ 1 ]特権により、ユーザーはセキュリティ上の影響を伴うアクションを実行できます。さまざまな特権の例としては、新しいユーザーの作成、ソフトウェアのインストール、カーネル機能の変更などが挙げられます。
追加の制御権限を委任されたユーザーは特権ユーザーと呼ばれます。ほとんどの権限を持たないユーザーは、非特権ユーザー、一般ユーザー、または通常ユーザーと呼ばれます。
特権は、自動的に付与される場合、付与される場合、または申請によって付与される場合があります。
自動的な特権とは、操作を実行する際に許可を必要としない場合に存在します。例えば、システムを使用するためにログインが必要なシステムでは、ログアウトに特権は必要ありません。MS -DOSのようにファイル保護を実装していないシステムでは、基本的にファイルに対してあらゆる操作を実行する無制限の特権が与えられます。
権限が付与されるのは、権限付与機関に何らかの認証情報を提示した結果として生じるものです。これは通常、ユーザー名とパスワードを使用してシステムにログインすることで行われ、入力されたユーザー名とパスワードが正しければ、ユーザーに追加の権限が付与されます。
特権は、実行中のプログラムが高度な特権を要求するか、追加の特権を申請するプログラムを実行することによって申請されます。ユーザーが追加の特権を申請する例としては、スーパーユーザー(root)sudoとしてコマンドを実行するコマンドや、Kerberos認証システムが挙げられます。
最新のプロセッサアーキテクチャには、OSが異なる特権レベルで実行できる複数のCPUモードがあります。一部のプロセッサは2つのレベル(ユーザーとスーパーバイザーなど)を持ち、i386 +プロセッサは4つのレベル(#0が最も高い特権、#3が最も低い特権)を持ちます。タスクには特権レベルがタグ付けされます。リソース(セグメント、ページ、ポートなど)と特権命令には、要求された特権レベルがタグ付けされます。タスクがリソースを使用しようとしたり、特権命令を実行しようとしたりすると、プロセッサは許可があるかどうかを判断します(許可がない場合は、「保護違反」割り込みが発生します)。これにより、ユーザータスクがOSや他のタスクに損害を与えることを防ぎます。
コンピュータプログラミングにおいて、特権命令違反に関連する例外は、配列が範囲外にアクセスされた場合、または無効なポインタが逆参照された場合に発生する可能性があります。この場合、参照された無効なメモリ位置は、デバイスの入出力制御など、特権領域です。これは、ポインタ演算を使用したり、配列の境界を自動的にチェックしないC言語などのプログラミング言語で特に発生しやすくなります。
マーク・ミラーは、特権の枠組みは定義が曖昧で測定が難しいと批判し、権威はプログラムができることの集合として定義できる方がより有用だと提案した。[ 2 ]
Unix系システムでは、スーパーユーザー(一般的に「root」と呼ばれる)がすべての権限を保有しています。一般ユーザーには、最も一般的なタスクを実行するために必要な権限のみが付与されます。UNIXシステムにはセキュリティ機能が組み込まれています。ほとんどのユーザーは、新しいユーザーアカウントを作成したり、その他の管理手順を実行したりすることはできません。「root」ユーザーは特別なユーザーであり、スーパーユーザーと呼ばれ、システム上で何でも実行できます。この高い権限はUNIXシステムを完全に管理するために必要ですが、同時にユーザーがミスを犯してシステムに問題を引き起こす可能性も秘めています。
権限のないユーザーは通常、以下のことができません。
sbin/(ただし、一般ユーザーが実行する場合、そのようなプログラムの動作を制限することが一般的になりつつある)。Windows NTベースのシステムでは、権限はさまざまな程度で委任されます。これらの委任は、ローカル セキュリティ ポリシー マネージャ ( ) を使用して定義できますsecpol.msc。以下は、デフォルトの割り当ての簡略化されたリストです。
Windowsでは、ユーザーやグループに個別に割り当てることができる多数の管理権限が定義されています[ 3 ] 。アカウント(ユーザー)は、直接またはグループメンバーシップを通じて間接的に付与された権限のみを保持します。インストール時に多数のグループとアカウントが作成され、それらに権限が付与されます。ただし、これらの付与は後で変更することも、グループポリシーを通じて変更することもできます。Linuxとは異なり、特定のアカウントに暗黙的または永続的に権限が付与されることはありません。
管理者権限の中には、(例えば、任意のファイルの所有権を取得したり復元したりする)非常に強力なものがあり、悪意を持って使用されるとシステム全体が侵害される可能性があります。ユーザーアカウント制御( Windows Vista以降、デフォルトで有効)が有効になっている場合、Windowsはログイン時にユーザー トークンからこれらの権限を削除します。したがって、広範なシステム権限を持つアカウントでログインした場合でも、そのユーザーはこれらのシステム権限で実行されません。ユーザーがシステム権限を必要とする管理操作を実行したい場合は、管理者権限を持つプロセスから実行する必要があります。管理者権限を持つプロセスを起動すると、ユーザーには同意を求めるプロンプトが表示され、管理者権限が要求されていることを知らせます。実際に必要になるまで権限を保持しないことは、最小権限の原則に合致しています。
昇格されたプロセスは、システムの完全な権限ではなく、ユーザーの完全な権限で実行されます。それでも、ユーザーの権限は、その特定のプロセスに必要な権限よりも大きい場合があり、完全な最小権限の原則が適用されるとは限りません。
DOSベースのWindows ME、Windows 98、Windows 95、および以前のバージョンの非NT WindowsはFATファイルシステムのみで動作し、ファイルシステムのアクセス許可をサポートしていなかったため[ 4 ] 、 NTFSファイルシステムを使用しないWindows NTベースのシステムでは特権が事実上無効になります。
Windowsのソースコードで使用されている名前は、「privilege」または「logonright」で終わっています。そのため、これらの「権利」と「特権」の完全なセットを何と呼ぶべきかについて、混乱が生じています。
マイクロソフトは現在「ユーザー権限」という用語を使用しています。[ 5 ] 過去には、マイクロソフトは「特権権限」[ 6 ] 、「ログオンユーザー権限」[ 7 ] 、「nt権限」[ 8 ]など、他の用語も使用していました。
ファイルがNTFSボリュームに保存されている場合にのみ、ファイルレベルでアクセス許可を設定できます。
ユーザー権限には、ログオン権限と特権が含まれます。