【パーミッション】permission deniedの対応備忘録

#インフラ
written by ま。

こんにちは。

先日、ターミナルからファイルを触った際に不意にpermission deniedに出会いました。
ファイルやディレクトリにその操作をする権限がないというエラーですが、実際に権限変更する際の備忘録をまとめてみます。

権限の変更方法

パーミッションは知っているから、とりあえず変更したい方(僕)のためにコマンドを先に。

sudo chmod 777 ファイル名

数値の対応
1・・・読み取り(r)
2・・・書き込み(w)
4・・・実行(x)

読み書き:1+2=3
読み実行:1+4=5
全て許可:1+2+4=7

パーミッションって?

前振りに権限と書きましたが、もう少し平たく表現するならば「誰にどの操作を許可するのか」です。
前提としてOSは1つのマシンへ複数のユーザーが存在し操作する場合を想定されています。
そのためファイルが作られた際にこれが誰のものなのか、作成者以外が見れたり書き換えれていいのかなどを制御する必要があり、そのためにパーミッションが用意されています。

見てみる

ターミナルでls -lとコマンドを実行してみます。

表示 意味
d ファイルタイプ
rwxr-xr-x ファイルモード
ユーザー名 ファイルオーナー
staff ファイルが所属するグループ
160 サイズ
11 1 13:36 タイムスタンプ
Applications ファイル名、ディレクトリ名

ファイルタイプは”d”がディレクトリ、”-”がファイルです。これ以外にも”l”(シンボリックリンク)や”s”(ソケット)、”p”(パイプ)なども存在します。インフラエンジニアじゃないのでdか-しかみた事ないです。

ファイルモードは一番重要なので後述します。

ファイルオーナーはその名の通りファイルを所持しているユーザーのことです。

ファイルグループは会社に例えるなら、社長や役員が管理する資料なのか、上長が管理するのか、社員が管理するのかといったように、作成したユーザーの持つ権限に応じて割り当てられます。

サイズ、タイムスタンプ、ファイル名はその名の通りです。

ファイルモード

権限というところに直接関係するところがファイルモードです。
先にコマンドと対応表を書いたので既にお分かりかもしれませんが、読み取り、書き取り、実行の3つを指定できます。

1・・・読み取り(r)
2・・・書き込み(w)
4・・・実行(x)

読み書き:1+2=3
読み実行:1+4=5
全て許可:1+2+4=7

書き実行というパターンは使うこと多分ないです。(書き込めるのに読めないは優しくないから)

コマンドは、

sudo chmod 777 ファイル名

となっていますがこれを分割して説明すると、

sudo root(マシン内で最強のユーザー)権限でのコマンドを実行できるオプション。chmodを利用できるように。

chmod 権限を変更するためのコマンド。だいたいrootしか使えないからsudoを利用。

777 ファイルモードの設定です。

ファイルモードの1つ目の数はファイルオーナーの権限です。自分のものなので大抵は7にします。(絶対に書き換えないものは5にすることもある。)
2つ目はrootグループに所属するユーザーの権限です。sudoで少し書きましたがマシン内の偉い人たちに対する権限を指定しています。
3つ目は他のユーザーに対する権限です。誰でも使っていいかどうかですね。

実際、権限変更する場合には755が一番良く使われます。書き換えられるのはオーナーだけ、読んだり実行したりは誰が使ってもいいよというパターンですね。
777なら誰でも何でも、775は偉い人たちはいいよといった感じでよく使うものは覚えていたりします。(覚えなくとも簡単な足し算だけです笑)

まとめ

permission deniedは開発をしていて出会うことはそんなにありません。たいていは自分の作ったファイルを自分で動かす場合がほとんどだからです。
まとめ直前に書いたようによく使うやつさえ覚えておけばこのエラーで立ち止まることはないかなと思います。

コマンドで言えば忘れることもあんまり無いのですが、実際何をしているのかの知識は最低限持っているべきだと思いますので、備忘録の意味合いも込めてブログ記事にしてみました。