Linuxでファイルやフォルダの権限(パーミッション)の調べ方と変更方法

Linuxでファイルやフォルダの権限(パーミッション)の調べ方と変更方法

117 回閲覧されました

みなさんこんにちは、jonioです。

ターミナルで操作をしていた時に下記みたいなのを何度も見ていましが全く理解ができなくずっとスルーしていました。

chmod 777 hoge.txt

「数字の777って何だろう」って。

-rw-r--r--  1 user user      9  1 1 00:00 hoge.txt

「-rw-r–r–って何だろう」って。

エラーを修正する時に見かけて分からないからとりあえずコマンドを叩いているだけでした。

実務で教えてもらって何かが分かったのでメモとしてこの記事を残します。

777は対象の権限が何かを意味している

下記のコマンドで考えます。(コマンドの意味はあとで説明します)

chmod 777 hoge.txt

777」は権限を数値で表していてそれぞれの7で権限を与える対象が変わります。

権限を与える対象は下記になります。(黄色・青・緑の背景色を対応させて下さい)

  • 一番左の7 : ファイルの所有者
  • 真ん中の7 : ファイルを所有するグループ(設定をしない場合はファイルの所有者になる)
  • 一番右の7 : その他(ゲスト)

この数値が今は全て7ですが必ず7にしないといけない訳ではなく0〜7の値を指定できます。

また特定の数値に対する権限がr(read・読みこみのこと)・w(write・書き込みのこと)・x(execute・実行のこと)と決まっていてそれぞれの対応は以下になります。

  • r : 数値は4
  • w : 数値は2
  • x : 数値は1
  • – : 数値は0(r・w・xではない場合)

hoge.txtに対して「ls」コマンドを入力すると下記みたいな文字列が表示されるはずです。

-rw-r--r--  1 user user      9  1 1 00:00 hoge.txt

「-rw-r–r–」って何だろうと思う人が多いですよね、私もそうでしたが「r」や「w」は「read」・「write」のことです。

次はこれが何を表しているかを見ていきます。

「-rw-r–r–」は数値の権限を文字列で表している

最初に出てきた「777」は権限を数値で表していましたがこれを文字列にしたら「-rw-r–r–」になります。(本当はこの文字列ではないですがとりあえず文字列が対応していると思って下さい)

rw-r–r–」の一番左の「」はこれだけ別の意味があり「-」の時と「d」の時があります。

意味は下記になります。

  • – : ファイルを表す
  • d : ディレクトリを表す

今は「-」なのでファイルになります。

rw-r–r–」は左から順に3つずつ(rw-r–r–)区切ってそれぞれの対象での権限を表します。

対象での権限は777の時と同じで対応は下記になります。

  • rw- : ファイルの所有者の権限
  • r– : ファイルを所有するグループの権限
  • r– : その他(ゲスト)の権限

これで「-rw-r–r–」が何の権限を表しているかは分かるのですが何に使えるかが分からないですよね。

次はこれを見ていきます。

権限の厳しさ・ゆるさ

「rw-r–r–」を何に使えるかですがファイルの権限の厳しさやゆるさを変更するのに使えます。

厳しさやゆるさを考えるのにr・w・xが表す数値の合計で考えます。

「-rw-r–r–」で考えてみます。

rの数値は4でwの数値は2でxの数値は1で-の数値は0でした。(777の所で説明しています)

だから「-rw-r–r–」は「ファイルの所有者の権限が6でグループの権限が4でゲストの権限が4」ということになります。

数値を全部足すと6+4+4=14ですが数値が大きければ大きいほど権限がゆるくて小さいほど権限が厳しいという意味になります。

場合によっては権限がゆるすぎてエラーになるのですがそれを変える為にコマンドの「chmod」があります。

chmod(change mode)

下記はよく見かけていました。

chmod 777 hoge.txt

このコマンドは権限の変更です、権限の値が7+7+7=21なので大きいから権限を緩くしています。

これで「ls」をすると下記の表示になるはずです。

-rwxrwxrwx  1 user user      21  1 1 00:00 hoge.txt

例えば権限を一番厳しくしてchmodの権限を「400」にするならコマンドは下記にします。

chmod 400 hoge.txt

この時に「ls」をすると下記の表示になります。

-r--------  1 user user      21  1 1 00:00 hoge.txt

権限を「400」じゃなく「100」にしてはいけない

権限が「400」の時は数値の合計が4で権限が「100」の時は数値の合計が1でこっちの方が小さいです。

さっき権限を一番厳しくと説明しましたが「何で100にしないんだろう」って思いますよね。

また「010」や「001」にしてもダメですが理由が分からないと思います。

これの説明をします。

さっき説明しましたが4はファイルの所有者の権限で真ん中の0はグループの権限で一番右の0はゲストの権限でした。

ファイルにアクセスできる権利があるのは誰の時が一番厳しいでしょうか?

例えばTwitter(x)のツイートで考えるとイメージしやすいですがツイートに鍵がかけてあって自分しか見ることができない状態です。

だから「040」や「004」はダメで「400」になります。

また4じゃなくて1にすることもできません。

4はr(read)ですが1はx(execute)です。

read(読む)とwrite(書く)とexecute(実行する)の内一番厳しいのはどれになるでしょうか?

ブログサイトの記事を読む時でイメージすると考えやすいと思いますがread(4)だけですよね、execute(1)ではありません。

以上より権限が一番厳しい状態が「400」ということになります。

ここまで説明すれば分かると思いますが「000」は権限として厳しいですがファイルに誰もアクセスできないのでダメです。