Linuxでの権限確認について

#introduction
Linuxの基礎を学習中にパーミッションエラーに悩まされて勉強した際に学んだことを整理します。実際に開発の現場で使っているわけではなく自身のPCのDockerを用いて構築したubuntu:18.04の環境で操作しています。 

#Linuxの権限とは
ファイルやディレクトリを開いたり編集したりするときに設定される権限のことです。誰に何の作業を許可するかという認識がわかりやすいと思います。

Linuxでは複数人で開発を行うためにすべてのファイルやディレクトリにはどのユーザーに対してどのような操作が行えるのかというアクセス権（パーミッション）が設定されます。

アクセス権を正しく設定することにより、システムのセキュリティを確保し安全に運用することができるようになります。

#権限の確認方法
カレントディレクトリ上で ls -al のコマンドを行います。
私はhome ディレクトリ上で行いました。
その結果が以下のようになります。

```
:/home# ls -al
total 16
drwxr-xr-x 1 root root 4096 Sep 17 19:49 .
drwxr-xr-x 1 root root 4096 Sep 17 19:26 ..
-rw-r--r-- 1 root root    6 Sep 17 19:49 hello.txt
drwxr-xr-x 2 root usr  4096 Sep 17 19:46 ubuntu-app
```
以下一番下の行に注目して解読していきます。

```
drwxr-xr-x 2 root usr 4096 Sep 17 19:46 ubuntu-app
```

左から順に示す内容を記述します。後ほど詳しく説明していきます。

d:ファイルタイプ
rwxr-xr-x:パーミション(ここに権限の内容が書かれている）
2:ハードリンクの数
root:オーナー名（一番右端に書かれているディレクトリ名やファイル名の所有者）
usr:グループ名（一番右端に書かれているディレクトリ名やファイル名を所有するグループ）
4096:バイトサイズ
Sep 17 19:46:タイムスタンプ
ubuntu-app:ファイル名



以上を参考にするとls -alの結果、homeディレクトリにはhello.txtファイルとubuntu-appディレクトリが存在することがわかります。
#ファイルとディレクトリの判別方法

```
drwxr-xr-x 2 root usr 4096 Sep 17 19:46 ubuntu-app
```

この行の左端に注目します。
ここで左端のdや-は

| 文字| 内容 | 
|:-----------:|:------------:|
| d| ディレクトリ |  
| - | ファイル |
を示しています。

```
drwxr-xr-x 2 root usr 4096 Sep 17 19:46 ubuntu-app
```

一番右のubuntu-appという部分ではファイル名やディレクトリ名を示しており、以下でこのファイルやディレクトリに対して自分がどのような権限が与えられているかを確認して行きます。

#権限の種類
権限には種類があります。


```
rwxr-xr-x 2 root usr
```
左から２文字目以降の部分を参照します。
ここで左からrwx が　root(権限者）に与えられた権限
その次のr-x がusrグループに与えられた権限
その次のr-x がその他のユーザーに与えられた権限（その他のユーザーに対するグループ名は省力されている。）

ここで数字の２はこのディレクトリのハードリンク数を示すので一旦無視してください。

それぞれr,w,x,- が何を示すかを下の表にまとめました。

| 文字| 内容 | 
|:-----------:|:------------:|
| r | 読み込み可能 | 
| w | 書き込み可能| 
| x | 実行可能 | 
| - | 可能ではない | 

#所属グループの確認方法
ここまでではどのファイル、ディレクトリに対してどのような権限が与えられているかを確認してきました。そこで自分がどのグループに所属しているかを確認しましょう。

groups コマンドを行うことで自分がどのグループに所属しているのかを確認することができます。下の場合だとuserというグループに所属していることがわかります。この操作はどのディレクトリにいるかは依存しません。

```
# groups
user
```
先ほどのubuntu-appの権限の内容に戻ってみると

```
drwxr-xr-x 2 root usr 4096 Sep 17 19:46 ubuntu-app
```


自分が権限者（root）ではなくusrグループの一員であるので、usrグループに与えられた権限を得ていることがわかります。

つまりusrグループの人は
d以降の左から４文字目から６文字目までのr-xが与えられた権限であります。
読み込み可、書込み不可、実行可
という内容が読み取れます。（この場合その他のグループの人も７文字目から９文字目でr-xが与えられているので混乱してしまうかも知れません。）

結果として自分（usrグループの一員）がubuntu-appディレクトリに対して持っている権限を確認することができました。

#その他のファイル、ディレクトリの権限の確認
ここでubuntu-appディレクトリ以外に関しても権限の確認を行いましょう。
homeディレクトリの一覧に戻ると

```
:/home# ls -al
total 16
drwxr-xr-x 1 root root 4096 Sep 17 19:49 .
drwxr-xr-x 1 root root 4096 Sep 17 19:26 ..
-rw-r--r-- 1 root root    6 Sep 17 19:49 hello.txt
drwxr-xr-x 2 root usr  4096 Sep 17 19:46 ubuntu-app
```



```
-rw-r--r-- 1 root root    6 Sep 17 19:49 hello.txt
```

この1行に注目してみると自分はroot（権限者）でなくusrグループの一員なのでその他のグループの権限が与えられます。
つまりr--が与えられた権限で読み込みのみ可能です。


```
drwxr-xr-x 1 root root 4096 Sep 17 19:49 .
drwxr-xr-x 1 root root 4096 Sep 17 19:26 ..
```

この部分についても見て行きます。
.はカレントディレクトリを示しており、
読み解くとusrグループである私に与えられた権限はその他のユーザーに与えられた権限であるので、r-xの部分を参照します。
カレントディレクトリに対して読み込み可能、実行可能であることがわかります。

..の場合はカレントディレクトリの一つ上の親ディレクトリの権限を示しています。
親ディレクトリの場合も同様に参照することができます。

#まとめ
今回はファイル、ディレクトリの権限の確認方法を記述しました。
以上のように確認していくことで自分がどのグループでどの権限が可能かを参照することができました。
私自身は自分がどのグループに所属していて、どこを参照すればそのグループの権限を確認できるかを理解するのに苦労しました。
そのような方の手助けとなれば嬉しいです。