【Linux】Permission(アクセス権限)について

<font color=red><b>注意</b>：この記事ではセキュリティに関する変更を加える記事になっております。この記事を元に発生した問題や損害に対しては、当方一切の責任を負いませんので、コマンドなどを実行する場合は<b>必ず自己の責任が及ぶ範囲内</b>でお願いいたします。</font>

###この記事で出てくる用語
`file_put_contents()` → PHPを実行した際に、指定されたパスのファイルに内容を加える。
`file_get_contents()` → PHPを実行した際に、指定されたパスのファイルの内容を呼び出す。
`Permission` → ディレクトリやファイルを操作する時の権限。(日本語で再帰的)

---

先日、PHPの学習をしている時に、`file_put_contents()`と`file_get_contents()`を使用する場面があったのですが、そこでハマってしまったので解決方法を残しておきます。

結論から言うと`Permission`の問題でした。
<br>
<br>

##Permissionの確認方法
筆者が使っているのはMacOSなので、まずターミナルを開きます。その次に`Permission`を確認したいディレクトリの1階層上まで移動し、下記のコマンドを入力します。

```
$ ls -la
```
するとディレクトリとファイルごとに、下記のような表記がずらっと出てきます。

```
drwxrwxrwx 1 username admin 1918 4 21 14:22 example.html
```
左端の列が、右端に表示されているディレクトリかファイルの`Permission`を示しています。(それ以外はあまり気にしなくて大丈夫です。)
一番左側のdは複雑らしいので無視して、大切なのは`rwx`が3つ続いている部分になります。
<ul>
<li>1つ目の`rwx`は、読み込みのアクセス権限
<li>2つ目の`rwx`は、書き込みのアクセス権限
<li>3つ目の`rwx`は、実行のアクセス権限
</ul>
<br>
そして、`r`、`w`、`x`のそれぞれが示す権限は以下の通りです。
<ul>
<li>`r`は作成者
<li>`w`は作成者グループ下の編集者
<li>`x`は作成者でも編集者でも無い者(不特定多数)。
</ul>
<br>
<br>
##Permissionの変更方法(カレントディレクトリ下の全て)
無事に`Permisson`の確認を終えたら、いよいよ問題のディレクトリ、もしくはファイルの<b>Permissionの変更</b>をしていきます。
先ほど移動したカレントディレクトリのまま、以下のようなコマンドを実行します。

```
$ chmod 765
```
まず`chmod(チェンジモード)`を打ち込むことによって、<b>Permissionの変更</b>が可能な状態にします。そして次に<b>任意の数字</b>を入れて実行すれば、カレントディレクトリ下にある、全てのディレクトリとファイルの`Permission`を変更することができます。
<br>
因みに<b>任意の数字</b>は以下のように決めることができます。

| rwx rwx rwx | r-- -w- --x | rwx rw- r-x |
| ----------- | ----------- | ------------|
| &nbsp;↓&nbsp;&nbsp;&nbsp;&nbsp;↓&nbsp;&nbsp;&nbsp;&nbsp;↓&nbsp; | &nbsp;↓&nbsp;&nbsp;↓&nbsp;&nbsp;↓&nbsp; | &nbsp;↓&nbsp;&nbsp;&nbsp;↓&nbsp;&nbsp;&nbsp;↓  |
| &nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7  | &nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;1  | &nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5  |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↓ | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↓ | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↓     |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;777 | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;421 | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;765 |
<br>
表の真ん中の列を見てもらえればわかりやすいですが、`rwx`はそれぞれナンバリングがされています。
<ul>
<li>`r`は 4
<li>`w`は 2
<li>`x`は 1
</ul>
そのため、`rwx`にしたい場合は <b>4+2+1</b> で <b>7</b> と計算することができます。
そして`rwxrwxrwx`にしたい場合は <b>7</b> と <b>7</b> と <b>7</b> で <b>777</b> と数字を打ち込めばOKです。
<br>
<font color="red" ">※ただし、上記で紹介している <b>777</b> は、<b>誰でも読み込み、書き込み、実行ができてしまう</b>と言う、セキュリティ上では<b>非常に危険な状態</b>となってしまう為、<b>非推奨</b>となります。</font>
<br>
また、`Permission`は作成者によって、何かしら必要な意味のある状態で保存されていることが多いので、試しに変更した場合は再度`chmod`を使用して、元の`Permission`に戻しておくと良いでしょう。
<br>
<br>

##Permissionの変更方法(指定したファイルのみ)
カレントディレクトリ下の全ての`Permission`を変更するのではなく、こちらで指定して任意のディレクトリ、もしくはファイルのみの`Permission`を変更したい場合は、以下のようなコマンドを実行します。

```
$ chmod 765 example.html
```
この場合、カレントディレクトリ下の`example.html`の`Permission`を <b>765</b> に変更することになります。

僕の場合は、このように1つだけファイルの`Permission`を変更して、今回の問題だった`file_put_contents()`と`file_get_contents()`の実行をできるようにして、解決することができました。
<br>
<br>

##まとめ
今回ご紹介したコマンドの一覧です。

```
$ ls -la
$ chmod 765
$ chmod 765 example.html
```
また繰り返しになりますが、`Permission`の設定は、<b>セキュリティと関わりのある大事な設定</b>になりますので、<font color=red>変更する際は<b>慎重に</b>行ってください。</font>
<br>
最後まで読んでいただき、ありがとうございました！

筆者：yuki｜学習10日目で初案件獲得→現在はフルスタックエンジニア転職に向けて学習中
Qiita：https://qiita.com/yuki4839
Twitter：https://twitter.com/yuki35522891