0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「ls -l」の出力内容を理解する

Posted at

ファイルパーミッションについて:SUID/SGID/Sticky Bitの解説

ls -lコマンドは、ファイルやディレクトリの詳細情報を表示する際によく使いますが、正直どんな情報が出力されているのかわかっていませんでした...

それではいけないと思い、出力結果の各項目を一度調べ上げて整理してみました。
もし間違いなどあればご指摘ください<(_ _)>

ls -lの出力例

まずそもそもls -lの出力内容から見ていきたいと思います

drwxrwsr-x 2 root staff 4096 Sep  8 10:15 shared_directory
-rwsr-xr-x 1 root root  136 Sep  8 10:10 suid_program
-rwxr-sr-x 1 root staff  523 Sep  8 10:12 sgid_program
drwxrwxr-t 3 root users 4096 Sep  8 10:00 sticky_directory

一番最後がファイル名なのはわかるのですが、それ以外が何を指しているのか、パッと見ただけではわからないですね、、、


1. ファイルの種類とパーミッション

最初の列に表示される文字列は、ファイルの種類とパーミッションを表しています。この部分が非常に重要です!

drwxrwxrwx

この10文字で構成されたフィールドは、以下の3つの部分に分かれます。

  1. 1文字目: ファイルの種類

    • d: ディレクトリ
    • -: 通常のファイル
    • l: シンボリックリンク
  2. 2~4文字目: 所有者(user)の権限

    • r: 読み取り権限 (read)
    • w: 書き込み権限 (write)
    • x: 実行権限 (execute)
  3. 5~7文字目: グループ(group)の権限

    • r: 読み取り権限
    • w: 書き込み権限
    • x: 実行権限
  4. 8~10文字目: その他のユーザー(others)の権限

    • r: 読み取り権限
    • w: 書き込み権限
    • x: 実行権限

加えて、SUID、SGID、Sticky Bitが設定されている場合は特別な動作が可能になり、その設定位置はそれぞれ次のようになります

  • SUID:4文字目
  • SGID:7文字目
  • Sticky Bit:10文字目

これらについても整理していきます!

SUID(Set User ID)

機能

SUID(Set User ID)は、プログラムが実行されると、そのファイルの所有者の権限で一時的に実行されるようにします。通常、ユーザーは自分の権限でファイルを実行しますが、SUIDが設定されている場合は、そのファイルの所有者の権限で実行されます。

よくある例としては、所有者がrootになっているファイルのSUIDがセットされていれば、root権限をもっていなくても実行できてしまいます(;^ω^)

表示

  • 実行権限がある場合: s
  • 実行権限がない場合: S

具体例

以下の例では、4文字目がsになっていますね。
suid_programはSUIDが設定されており、所有者rootの権限で実行されます。

-rwsr-xr-x 1 root root  136 Sep  8 10:10 suid_program

次は実行権限のない例をみておきますと、以下は4文字目にSが入っていますので、所有者は実行権限を持たないです。
ただ、以下の例だと読み書きはできる設定になっています

-rwSr--r-- 1 root root 136 Sep  8 10:10 suid_file

SGID(Set Group ID)

機能

SGID(Set Group ID)は、ファイルが実行されると、そのファイルのグループの権限で実行されます。また、SGIDが設定されたディレクトリでは、作成されたファイルがそのディレクトリのグループに自動的に所属します。

表示

  • 実行権限がある場合: s
  • 実行権限がない場合: S

具体例

以下の例では7文字目にsがあるので、sgid_programstaffグループの権限で実行されます。

-rwxr-sr-x 1 root staff  523 Sep  8 10:12 sgid_program

あわせて、実行権限のない例をみておくと以下になります。

-rw-r-Sr-- 1 root staff 523 Sep  8 10:12 sgid_file

Sticky Bit

機能

Sticky Bitが設定されたディレクトリ内では、そのディレクトリにファイルを作成したユーザーとrootのみがそのファイルを削除できるようになります。
これにより、共有ディレクトリ内で他のユーザーが作成したファイルを勝手に削除することを防ぐことができます。

表示

  • 実行権限がある場合: t
  • 実行権限がない場合: T

具体例

sticky_directory内のファイルは、ファイルを作成したユーザーまたはrootのみが削除可能です。
ただ、所有者以外のユーザーでも実行は可能になっています

drwxrwxr-t 3 root users 4096 Sep  8 10:00 sticky_directory

次の例は、削除権限を所有者とrootに限定し、かつその他のユーザーは実行できないように設定できます

drwxrwxr-T 2 admin users 4096 Aug  1 15:00 /tmp

SUID、SGID、Sticky Bitの利用例については末尾のSUID、SGID、Sticky Bitの利用例に記載しますので、ご興味があれば見てみてください!

2. リンクの数

次の列は、ファイルのリンクの数(ハードリンクの数)です。ディレクトリの場合は、サブディレクトリや自身へのリンクを含むため、2以上の値になることが多いです。

2

これは、そのファイルまたはディレクトリが他の場所から参照されている回数です。

3. 所有者

次の列は、ファイルの所有者を示しています。通常は、ファイルを作成したユーザー名が表示されます。

root

これは、ファイルの所有者がrootユーザーであることを意味します。

4. グループ

次の列は、ファイルの所有グループを示しています。ファイルやディレクトリには所有者だけでなく、グループも存在し、そのグループに属するユーザーがアクセス権を持つ場合があります。

staff

これは、このファイルやディレクトリがstaffグループに属していることを意味します。

5. ファイルサイズ

次の列は、ファイルのサイズをバイト単位で示しています。ディレクトリの場合は、そのディレクトリ内のエントリの数に基づいたサイズが表示されます。

4096

これは、ファイルやディレクトリのサイズが4096バイトであることを意味します。

6. 最終更新日時

次の列は、ファイルやディレクトリが最後に更新された日時を示しています。通常、ファイルが作成された、修正された、またはアクセスされた日時です。

Sep  8 10:15

この例では、ファイルが9月8日10:15に最後に変更されたことを意味します。

7. ファイル名

最後の列は、ファイルやディレクトリの名前を表示します。

file1.txt

これは、ファイルの名前がfile1.txtであることを示しています。

まとめ

ls -lコマンドで表示される情報ってこんなにあったんだ、、、という驚きがありました。。。
特にパーミッションは、ほとんど理解できていなかった(怠惰)ので、勉強になりました!

この記事がどなたかの参考になれば幸いです!

参考

SUID、SGID、Sticky Bitの利用例

以下に、SUID、SGID、Sticky Bitの利用例をそれぞれ3つずつ、指定された形式で説明します。

SUIDの利用例

1. パスワードの変更

passwdコマンドは、一般ユーザーが自身のパスワードを変更できるようにするため、SUIDが設定されています。このコマンドは、実行時にroot権限で動作し、システムのパスワードファイルを安全に更新します。

-rwsr-xr-x 1 root root /usr/bin/passwd
2. 管理者権限でのコマンド実行

sudoコマンドは、ユーザーが一時的に管理者権限でコマンドを実行できるようにするためにSUIDが設定されています。SUIDによって、通常のユーザーがrootの権限で特定のタスクを実行できます。

-rwsr-xr-x 1 root root /usr/bin/sudo

SGIDの利用例

1. 共有ディレクトリのファイル管理

/srv/sharedのような共有ディレクトリにSGIDを設定すると、そのディレクトリ内で作成されたファイルは、そのディレクトリのグループに自動的に所属します。これにより、グループ内でのファイル共有が容易になります。

drwxrwsr-x 3 root shared /srv/shared

Sticky Bitの利用例

1. 一時ファイルディレクトリ

/tmpディレクトリは、全ユーザーがアクセスできる一時ファイル保存場所です。Sticky Bitが設定されているため、ユーザーは自分のファイルのみ削除でき、他のユーザーのファイルは削除できません。

drwxrwxrwt 1777 root root /tmp
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?