コース一覧
Linux運用・管理
パーミッションの読み方

Linux運用・管理

ユーザー権限、パーミッション、プロセス、ジョブ制御を学び、Linux上の実行中サービスと作業権限を安全に管理できるようにします。

1
パーミッションと権限管理
01. ユーザーとグループの概念5分
02. パーミッションの読み方5分
03. 権限の変更 chmod5分
04. 所有者の変更 chown5分
05. sudo - スーパーユーザーの力5分
06. 実行権限とスクリプト5分
07. パーミッションチェック5分
2
プロセス管理とジョブ制御
01. プロセスとは何か5分
02. psでプロセス一覧を確認する5分
03. topでリアルタイム監視する5分
04. プロセスの終了 kill5分
05. フォアグラウンドとバックグラウンド5分
06. nohupでログアウト後も実行する5分
07. プロセス管理チェック5分

パーミッションの読み方

パーミッションの数字

「Permission denied」と出ても、何が足りないのかは分からない

このメッセージは「あなたには許可がありません」としか言っていません。読む権利が無いのか、書く権利が無いのか、そのディレクトリに入る権利が無いのかで、打つ手はまったく変わります。切り分けの材料になるのが、ls -l の左端に出る 10 文字です。

ターミナル

$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2890 May 20 12:00 /etc/passwd

10 文字は 1 と 3 と 3 と 3 に割って読む

プレーンテキスト

- rw- r-- r--
│ └┬┘ └┬┘ └┬┘
│  │   │   └ その他の人
│  │   └───── 所有グループ
│  └───────── 所有者
└──────────── 種類

先頭の 1 文字は種類です。- なら普通のファイル、d ならディレクトリ、l ならシンボリックリンクを表します。残りの 9 文字は 3 文字ずつの 3 ブロックで、左から所有者、所有グループ、それ以外の全員、の順に並びます。

各ブロックの 3 文字は必ず r w x の順に並び、権利があればその文字、無ければ - になります。r は中身を読める、w は書き換えられる、x は実行できる、です。

ディレクトリの x だけは意味がずれて「その中に入れる」を表します。r があって x が無いディレクトリは、ファイル名の一覧は取れるのに cd で入れず、中のファイルも読めない、という不思議な状態になります。

4 と 2 と 1 を足すと数字になる

同じ権限は数字でも表せます。r を 4、w を 2、x を 1 として、ブロックごとに足すだけです。rw- なら 4 と 2 で 6、r-x なら 4 と 1 で 5、rwx なら 7、何も無ければ 0 になります。これを 3 ブロック分並べた 3 桁が、記号と同じ情報を数字で言い直したものです。

stat を使うと、両方の表記を一度に見られます。

ターミナル

$ stat /etc/hosts
  File: /etc/hosts
  Size: 200       Blocks: 8    IO Block: 4096   regular file
  Access: (0644/-rw-r--r--)  Uid: (0/root)   Gid: (0/root)

0644 と -rw-r--r-- が並んで出ています。書き方が 2 通りあるだけで、中身は同じものです。

s や t が混ざっている行がある

x の位置に、たまに別の文字が立っているファイルを見かけます。

ターミナル

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 May 20 12:00 /usr/bin/passwd

$ ls -ld /tmp
drwxrwxrwt 10 root root 4096 May 20 12:00 /tmp

所有者側の s は、誰が起動しても所有者の権限で動く印です。パスワードの変更が一般ユーザーにもできるのは、これがあるからです。末尾の t は、誰でも書き込めるのに他人のファイルは消せない、という制限を足す印で、/tmp が誰かに荒らされない理由になっています。

課題

  1. touch でファイルを作成する
  2. ls -l と stat の両方で権限を確認する

ヒント

touch でファイルを作成

ls -l で記号表記、stat -c '%a' で 8 進表記が得られる

stat -c '%A' は ls -l と同じ記号表記

script.sh
script.sh
エディタを読み込んでいます
ターミナル出力