ファイルの権限を確認していたら、とあることに気づいたので調べて記事にしました。
Linuxでの権限確認といえば ls -laですが、複数の環境で調べる機会があり、権限を見比べていたらあることに気づきました。
Dockerコンテナの中で確認したら
ls -la
-rw-r--r--. 1 root root 294 11 15 12:45 hoge.txt
しかしローカルのMacBookで確認すると
ls -la
-rw-r--r--@ 1 user staff 294 11 15 12:45 huga.txt
ん?そういえばあんまり気にしたことなかったけど、この権限の後ろについてる.や@って何だろう?
ということで、調べた結果をまとめます。
ls -laの意味
ls コマンドは List Segment(または List Directory Contents) の略で、現在のディレクトリ内のファイル一覧を表示します。
最もよく使われるコマンドのひとつです。
-la オプションの意味は以下のとおりです:
• -l:詳細(long format)表示。権限やファイルサイズなどの情報が出る。
• -a:隠しファイル(. から始まるファイル)も含め、すべて表示。
各項目の意味
例として、以下の出力を見てみます:
-rw-r--r--. 1 user staff 294 11 15 12:45 hoge.txt
この各項目には、次のような意味があります:
| 項目 | 例 | 説明 |
|---|---|---|
| ファイルタイプ+パーミッション | -rw-r--r--. | ファイル種別と権限+追加属性記号 |
| ハードリンク数 | 1 | ファイルに張られているハードリンク数 |
| 所有ユーザー | user | このファイルの所有者 |
| 所有グループ | staff | ファイルの所属グループ |
| サイズ | 294 | ファイルサイズ(バイト) |
| 更新日時 | 11 15 12:45 | 最終更新日時 |
| ファイル名 | hoge.txt | 対象ファイルの名前 |
本題:.や@って?
同じファイルサイズ・権限でも、以下のように末尾の記号だけが違っていました:
• . … Docker内の Linux 環境にて
• @ … macOSローカル環境にて
これらの記号には、実は次のような意味がありました👇
「.`(ドット)」:SELinux セキュリティコンテキストあり
Linux(特に CentOS / RHEL / AmazonLinux)環境では、SELinux(Security-Enhanced Linux) が有効になっている場合、ファイルにセキュリティ情報がつきます。
その印として パーミッション末尾に . が付くのです。
確認には ls -Z を使います:
ls -Z hoge.txt
出力例:
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 hoge.txt
「@(アットマーク)」:拡張属性(xattr)つき
@ は 拡張属性(xattr) が付いていることを示しています。
特に macOS では頻繁に使われます。
確認コマンド:
xattr huga.txt
出力例:
com.apple.quarantine
macOS ではインターネットからダウンロードしたファイルに quarantine 属性がついたりするため、かなりの頻度で見かける記号です。
必要であれば削除できます:
xattr -d com.apple.quarantine huga.txt
SELinuxとは?より詳しい解説
SELinux(Security-Enhanced Linux) は、Linuxに追加された強力なアクセス制御機構で、アメリカ国家安全保障局(NSA)によって開発されました。
通常の UNIX の権限(所有者・グループ・その他)に加えて、**「どのプロセスが、どのリソースにアクセスできるかを細かく制御」**できます。
例えば:
• /var/www/html/index.html に apache や nginx はアクセス出来るけど、他のプロセスは読めない
• 仮に権限を777にしても、ラベルが違うとアクセス禁止されることも
SELinuxでは、すべてのファイルやプロセスに セキュリティコンテキスト(ラベル) が付与されます。
例:
system_u:object_r:httpd_sys_content_t:s0 ← SELinuxのコンテキスト
これは「httpd(=ApacheやNginxなどのWebサーバプロセス)が読むことができるファイル」という意味です。
xattrとは?より詳しい解説
xattr(Extended Attributes:拡張属性) は、ファイルにメタデータを追加できる仕組みです。
普通のファイル属性(権限・所有者など)とは別に、以下のような情報をファイルシステムに追加できます:
• macOS:ダウンロードファイルには com.apple.quarantine が付く
• HFS+ や APFS:ファイルにメモやタグのようなカスタム属性を保持可能
• Linux:SELinuxやACL情報も xattr として管理されることがある
確認コマンド:
xattr -l file.txt
よくある xattr の例(macOS):
| 属性名 | 説明 |
|---|---|
| com.apple.quarantine | インターネットからダウンロードしたファイルである印 |
| com.apple.metadata:_kMDItemUserTags | ファイルに付けたFinderのタグ名 |
| com.apple.FinderInfo | macOS Finder用の情報 |
他にもある末尾記号一覧
ls -la のパーミッション末尾には、. や @ 以外にもさまざまな記号が表示されることがあります。
| 記号 | 例 | 意味 | 主に見られる環境 |
|---|---|---|---|
. |
-rw-r--r--. |
SELinux のセキュリティコンテキストがある | Linux(RHEL / CentOS / Amazon Linux) |
@ |
-rw-r--r--@ |
拡張属性(xattr)が付いている | macOS / 一部 Linux |
+ |
-rw-r--r--+ |
ACL(Access Control List)が設定されている | Linux / macOS / BSD |
# |
drwx------# |
NFSv4 ACL が設定されている | NFS マウント環境 |
* |
-rwxr-xr-x* |
拡張フラグや特別な実行属性が付いている | FreeBSD / macOS の一部設定 |
| (なし) | -rw-r--r-- |
特になし(通常のパーミッションのみ) | 全環境 |
まとめ
ls -la で権限をチェックしていると、末尾に付く . や @ には意味があります。
それは、OS が持つセキュリティ機能や拡張機能による「付加情報」の存在を表している記号なのです。
• . → SELinuxコンテキスト(Linux)
• @ → 拡張属性(macOS)
一見同じ rw-r--r-- に見えても、背後に含まれるメタ情報には違いがあります。
これらを理解しておくことで、権限やセキュリティ周りのトラブルシュートがもっと楽になります。
なお、この情報が載っていないと、「アクセスできない」「動かない」問題の原因が分からないこともあるのでご注意ください。