ls -l コマンドで@が表示されたら念のため ls-le を使おう
MacOSでターミナルコマンドなどを使うようになり、
ふとした時に目に付くことになる「ls -l」コマンド結果に表示される「@」表示。
Finderからファイルの編集や保存した過去のあるファイルには、
大半はこの「@」表示がされているはずです。
ただ、この「@」の後ろには、実はより重要な「+」マークが隠れています。
概要
ls -l コマンドで@が表示されたら念のため ls-le を使おう
なんでこんなことを書こうと思ったかと言うと、
ズルをして「httpd.conf」をGUIエディタで編集しようと、
Finderからアクセス権の追加(MacOSX)を行っていました。
さらに、エディタでファイルを編集して保存します。
そのファイルに対してターミナルから「ls -l」を実行しパーミッションを確認します。
「@」が表示されていますので、拡張メタデータが付加されたファイルだと分かります。
拡張メタデータの「@」の情報などは別に気にしなくていいや。
ダウンロードしたファイルにも多くついているから・・・まいっか。
その程度です。
※以下はApacheのソースファイルをダウンロードしたもの「.tar.gz」と、
それを解凍したファイルの例です。
大半に「@」が表示されています。慣れっこになってしまいます。
※ちなみにこの状態を回避するには、
解凍前に拡張メタ情報を削除してから解凍します。
付加されている拡張メタデータですから、
どんなメタ情報が格納されているのか、名前を確認することで推測はできます。
xattr /private/etc/apache2/httpd.conf
実行した結果が以下になります。
以下のような情報が表示されます。
- com.apple.FinderInfo
- com.apple.ResourceFork
- com.apple.TextEncoding
「@」に隠れている「+」の存在
「@」が拡張メタデータという事を一度知ってしまえば、
それから後は、またか。で、特に気にすることもなくなるでしょう。
今回は「httpd.conf」ですので他人とやり取りすることは皆無かもしれません。
でも、このファイルをそのまま誰かにメールで送ったりすると、
ちょっと微妙な事になります。
「ls -le」でアクセス権(パーミッション)の確認
普段から「ls -l」を利用していると、
最初の画像ような表示になりますが、
同じファイルに対して「ls -le」と「e」を付けて実行します。
すると、何やら3行が表示されているのが分かります。
「e」を付けたことで、追加の情報が表示されています。
この情報が「拡張ACL」の情報です。
本来、拡張ACLが付加されたファイルには「+」が付加されます。
しかし、今は「@」が表示されています。
さて、このファイルを誰かに渡し、
受け取った人が悪意はなくとも「ls -le」を実行した場合どうなるでしょうか?
受け取ったファイルが開けないから・・・と、
チェックする場合もあるかもしれません。
ls- le /private/etc/apache2/httpd.conf
0: user:<userneme> allow read,write,append,readattr,writeattr,readextattr,writeextattr,readsecurity
1: group:admin allow read,readattr,readextattr,readsecurity
2: user:macports allow read,readattr,readextattr,readsecurity
※<userneme>:は伏字。
少なくとも、送信元の人のMacOSXでは、
ユーザ名で「<userneme>」と「macports」アカウントが存在し、
グループに「admin」が存在していることが分かります。
また、後ろには与えられている権限が並んでいるように見えます。
※Finderから「アクセス権の追加」をしなければ「拡張ACL」は付加されません。
ユーザー名だけでは、パスワードは推測しなければログインはできません。
ですが、このユーザー名が恥ずかしい名前だったり、
バカっぽい名前にしていたら、ちょっと嫌な感じがしないでしょうか。。。
拡張メタデータを削除してみる
では拡張メタデータだけを削除してみます。
ここでは「@」を消す手順としています。
一括で削除しますので xattr -c (ファイルパス)
で削除します。
次に「ls -le」を実行してみます。
ls- le /private/etc/apache2/httpd.conf
拡張メタデータが消え「+」表示になりました。
「+」であれば「ls- l
」だったとしても、ん?と気づくので、
「何か拡張ACLが付加されている」と気づけます。
恐らく「ls- le
」で再チェックするきっかけになります。
「+」表示で「ls- le
」で確認。
ではなく、
「@」表示で「ls- le
」で確認。
としておいた方が、より安全かと思います。
「+」は「@」で上書きされる
です。
拡張メタデータを保持するデータは「+」が表示されません。
そして「@」が表示されるデータは多くあります。
しかし、本当にチェックする必要があるのは「+」です。
ls- le
を利用していれば「@」表示であっても、
拡張ACLデータが付加されている場合は、その情報が併せて表示されます。
どうして「ls- le
」というオプションがあるのか。
きっと、この上書き状態の「@」で、
ACL情報が上書きされ分からなくなるから、それが見れるオプションが必要だった。
そんな気がしませんか?
参考
ls(1) Mac OS X Manual Page|developer.apple.com
xattr(1) Mac OS X Manual Page|developer.apple.com
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
関連記事
-
SafariでApple Developerサイトが開けない?切り捨てられた過去遺産。
初代MacPro。個人的には一番格好いいデザインと存在感のMacだと思っています …