コンピューティングにおいて、特権とは、コンピュータシステム上でセキュリティに関連する機能を実行する権限の委譲と定義されます。[ 1 ]特権は、ユーザーがセキュリティに影響を与える操作を実行することを可能にします。特権の例としては、新規ユーザーの作成、ソフトウェアのインストール、カーネル関数の変更などがあります。
追加の制御レベルが委任されたユーザーは特権ユーザーと呼ばれます。ほとんどの権限を持たないユーザーは、非特権ユーザー、通常ユーザー、または一般ユーザーとして定義されます。
権限は、自動的に付与されるか、付与されるか、申請によって付与されます。
自動的な権限とは、あるアクションを実行するために権限を必要としない場合に存在します。例えば、システムを使用するためにログインが必要なシステムでは、ログアウトに権限は必要ありません。MS -DOSのようにファイル保護を実装していないシステムでは、実質的にファイルに対するあらゆるアクションを実行するための無制限の権限が与えられます。
付与された権限は、権限付与機関に何らかの資格情報を提示することで発生します。これは通常、ユーザー名とパスワードを使用してシステムにログオンすることで実現され、提供されたユーザー名とパスワードが正しければ、ユーザーには追加の権限が付与されます。
権限は、実行プログラムが高度な権限を要求するか、追加の権限を申請するプログラムを実行することによって申請されます。ユーザーが追加の権限を申請する例としては、スーパーユーザー(root)sudoとしてコマンドを実行するコマンドや、Kerberos認証システムが挙げられます。
現代のプロセッサアーキテクチャには複数のCPUモードがあり、OSを異なる権限レベルで実行できます。一部のプロセッサには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 ボリュームに保存されている場合にのみ、ファイル レベルでアクセス許可を設定できます。
ユーザー権限には、ログオン権限と特権が含まれます。