たとえば、Linuxや他のUnixファミリーシステムのファイル権限メカニズムを説明できる人はいますか?この9つの数字は何のためですか?ファイルのユーザーとグループIDがあるのはなぜですか?この二つは関係がありますか?
答え1
所有権とアクセスは基本的に連携します。所有権通知システムWHOファイルにアクセスでき、ファイル権限によるとどのように。
所有権は、アクセスをユーザー(ファイルを所有する個々のユーザー)、グループ(ユーザー)、およびその他(残りの世界)の3つのグループに分けます。
権限は次のとおりです。
r
- 読み取り許可、w
- 書き込み許可、x
- 実行許可
ディレクトリの場合、意味が若干異なります。x
ディレクトリに入ってr
その内容を一覧表示できます(そしてw
更新も可能です)。つまり、正しいファイル名がわかっている場合は、そのディレクトリに対する読み取り権限は必要ありません。で、x
十分です。しかし、r
書類が必要です。
次に、追加のビットトリプルがあります:setuid、setgid、Sticky。最初の2つは、(実行ファイル内)プログラムがファイルを所有しているユーザー/グループとして実行されるようにします(これら2つのビットのどちらが設定されているかによって異なります)。固定ビットは実装によって異なります。実行可能ファイルの場合、これは次のロード速度を上げるためにプログラムコードをスワップ領域にキャッシュする必要があることを意味しました。ディレクトリの場合、権限のないユーザーが自分が所有していないファイルを削除するのを防ぎます。権限があっても削除するのが一般的です。これが一般的に誰でも書くことができるディレクトリ(例えば/tmp
。
これに加えて、多くのファイルシステムは、より細かいアクセス制御を可能にする追加のアクセス制御リスト(ACL)をサポートしています。を使用する代わりにgetfacl
/を使用してアクセスできます。setfacl
chmod
ちなみに、同様の特権システムは通常、ページ単位でメモリ(RAM)用に実装されています。主な目標は「W^X」の原則に従うことです。つまり、メモリに書き込んでも実行することもできますが、同時に両方を行うことはできません。一般的には良い考えですが、ソルバーが生成されたコードをコンパイル/最適化(つまりページ作成)してから通常は増分式で実行する必要があるため、Javaのように解釈されたJIT(Just-In-Time)コンパイルコードではうまく機能します。しません。 (そして権限を変更するたびにあまり意味がありません)。