プロセスがファイルに対して操作を実行すると、Linuxカーネルは次の順序でチェックを実行します。
任意アクセス制御(DAC)またはユーザーが指定したアクセス制御。これには、従来のUNIXスタイルのアクセス許可チェックとPOSIXアクセス制御リスト(ACL)の両方が含まれます。従来のUNIXチェックでは、現在のプロセスのUIDおよびGIDと、アクセスされているファイルのUIDおよびGIDが、設定されているモード(読み取り/書き込み/実行)に関して比較されます。アクセス制御リストは、従来のUNIXチェックを拡張して、アクセス許可制御に関するオプションをさらに許可します。
必須アクセス制御(MAC)またはポリシーベースのアクセス制御。これは、実際のモジュールではなくなったLinux Security Modules(LSM)を使用して実装されます(以前は使用されていましたが、削除されました)。これにより、従来のUNIXスタイルのセキュリティチェック以外のモデルに基づいた追加チェックが可能になります。これらのモデルはすべて、どのコンテキストでどのプロセスにどのような操作が許可されているかを説明するポリシーに基づいています。
オンラインLinuxクロスリファレンスへのリンクを使用して回答をバックアップするiノードアクセス(ファイルアクセスを含む)の例を次に示します。指定された「function_name
(filename:line)」は、Linuxカーネルの3.14バージョン用です。
機能inode_permission
(FS / namei.c:449)(ファイルシステム自体の読み取り許可の最初のチェックsb_permission
でのFS / namei.c:425)、次いでコール__inode_permission
(FS / namei.c:394)、リード/ライトをチェックする/実行しますdo_inode_permission
(fs / namei.c:368)(DAC)のinodeに対する許可とPOSIX ACL 、次にsecurity_inode_permission
(security / security.c:550)のLSM関連の許可(MAC )。
この順序には1つだけ例外がありました(DAC、次にMAC):mmapチェック用でした。しかし、これはLinuxカーネルの3.15バージョンで修正されました(関連するコミット)。