Linuxにおけるファイル権限とは何か、そして自分のファイルが安全であることをどう確保すれば良いのか?
Linuxでは、ファイルの権限がファイルの所有者と他のすべてのユーザーの特権レベルを決定します。ウェブに公開されているファイルの権限が正しく設定されていることを確認することが重要です。そうしないと、侵害されたプロセスが不正な場所に書き込むことができてしまいます。
ファイルの権限とは何ですか?
ファイルのアクセス許可は、3つの異なるグループのための許可を追跡します。各グループは3ビットで表されます:
- r: 「読み取り」権限は、プロセスがそのファイルの内容をメモリに読み込むことを許可します。
- 「書き込み」権限は、プロセスがファイルが保存されているディスク上の物理位置を上書きするアクセス権を与えます。
- x: 「実行」権限はプログラムのためのもので、そのファイルが実行されることを許可します。
ターミナルでは、パーミッションは次のように表示されます:
最初の「d」は、ファイルがディレクトリであるかどうかを示します。最初の3つのグループはファイルの所有者のためのもので、この場合、ファイルの所有者は完全な読み取り、書き込み、および実行権限を持っています。次の3つのグループは「グループの所有者」で、ファイルが属するグループのアクセス権を示し、この場合は読み取り専用です。次のグループは他のすべての人々で、これも読み取り専用です。
一般的に、「全員」権限が付与されたファイルはあまり安全ではありません。ほとんどのファイルについて、最後のグループが読み取り専用またはアクセス不可能に設定されていることを確認したいでしょう。
内部では、これらはバイナリ形式で保存されており、各権限がビットを表しています。例えば、
rw-です
1102進数では、10進数で6に相当します。したがって、パーミッション文字列は:
rwxrw-r--...は「764」として保存される可能性があります。ファイルの権限はこのように言及されることがよくあり、「777」はフルアクセスを示し、「700」はプライベートで、「644」は読み取り専用です。技術的には、これは十進法ではなく八進法として知られています。各桁に対して8つの可能な値があるためです。
ディレクトリの場合、権限は同じ文字を使用しますが、少し異なります:
- r: リスト権限。ディレクトリを開くことを許可し、
lsの使用を許可します。x属性を設定する必要があります。 - w: 書き込み権限。新しいファイルの作成、ファイルの削除、ファイルの名前変更を許可します。ディレクトリ内の既存の書き込み可能なファイルの内容を変更することを妨げません。
- x: エンタラビリティ。
cdの使用を許可します。これはシステム全体で尊重され、フォルダーがGUIファイルエクスプローラーで開かれるのを防ぎます。
一部のシステム、特にmacOSでは、ファイルの権限文字列の後に「@」が表示される場合があります。これは、そのファイルに拡張属性があることを意味し、ls -l@コマンドで確認できます。たとえば、com.apple.quarantine属性は、まだ開いていない実行可能ファイルに割り当てられており、Gatekeeperが二重クリックをブロックし、右クリックして開く必要があるように強制し、その後に本当に開いても良いかどうかの不要な確認を促します。
ファイルの所有者とグループとは何ですか?
ファイルの所有者は特定のユーザーですが、UnixシステムのユーザーはWindowsのようには動作しません。Unixでは、mysqlやnginxのような個々のプロセスに対して異なるユーザーを設定することができます。これにより、権限が非常に詳細になる場合があります。例えば、mysqlユーザーとして実行されているMySQLのインスタンスは自分のデータベースにアクセスできますが、nginxユーザーはアクセスできません。
ユーザーグループは似たような方法で動作しますが、同じ権限を持つ複数のユーザーを持つことをサポートします。ユーザーはグループに追加または削除でき、ファイルの権限設定においてはオプションです。
ディレクトリのファイル権限を確認する方法
端末で ls -l を実行することで、ファイルとディレクトリのパーミッションを表示できます。ファイルのパーミッションは、右端に表示されます:
特定のファイルやディレクトリのファイル権限を表示したい場合は、lsの出力をgrepにパイプする必要があります。
ls -la | grep filename現在のフォルダと親フォルダの権限は、-aフラグを使用した場合、.および..として表示されることに注意してください。しかし、これでも権限の表示は2レベルだけです。すべての親フォルダの権限を表示するには、nameiコマンドを使用する必要があります:
namei -l `pwd`このコマンドはすべてのLinuxディストリビューションにインストールされているわけではありません。macOSでは、brewからインストールする必要があります。
フォルダー内の個々のファイルを検索して、誤った権限があるかもしれないものを見つけるには、findコマンドと-permフラグを使用できます:
find ~ -type f -perm 777これは再帰的に検索し、ルートディレクトリで実行している場合は時間がかかることがあります。
ファイルの権限と所有権を変更する方法
ファイルの権限を変更するのは、chmodコマンドを使えば簡単です:
chmod 700 filename完全な権限文字列を指定せずに権限を追加することもできます。これはショートカットですが、時間を節約できます。たとえば、スクリプトファイルを開けない場合、オーナーが実行できるように権限を追加するには次のようにします:
chmod u+x filenameこれにより、現在の所有者(uは「ユーザー」を意味します)に実行(x)権限が追加されます。
所有者を変更するのは、chown コマンドと似たような方法で行います:
chown owner:group filename「:group」はオプションです。chmod と chown は、ディレクトリ内のすべてのファイルのアクセス権を変更するために、再帰的に実行できます。これを行うには、大文字の -R フラグを使用します:
chmod 700 -R directoryまた、findの-execオプションとしてchmodを使用することもでき、システム全体のファイルパーミッションを変更できます。例えば、このコマンドは書き込み権限が開かれているファイルを見つけ、それらを読み取り専用に設定します:
find / -type f -perm 777 -print -exec chmod 744 {} ;

