Linuxの権限確認・変更とスーパーユーザ

## ファイルのオーナーとグループ

### catコマンド（既存コマンド）のオーナーの確認

```
$ ls -l /bin/cat
-rwxr-xr-x  1 root root 54160 Nov 30 15:16 /bin/cat
```

最初の`root`はファイルの所有者、2つ目の`root`はファイルが所属するグループを意味します。
**→`/bin/cat`ファイルは、`root`ユーザがオーナーで、`root`グループに属しています。**


### 新規作成したファイルのオーナーの確認

```
$ touch test.txt
$ ls -l test.txt
-rw-rw-r--  1 banri banri 54160 Nov 30 15:16 test.txt
```

以上の例では、`test.txt`というファイルを作成し、そのオーナーを確認しています。
**→ユーザ`banri`がファイルを作成したため、`banri`がオーナーになっています。**


### グループ

グループとは、ユーザの集合を意味します。
自分がどこにグループに属しているかは以下のコマンドで確認できます。

```
$ groups
banri wheel
```

banriは`banri`と`wheel`というグループに属しています。


## ファイル権限（パーミッション）確認

### ファイルタイプ

```
$ ls -l /bin/cat
-rwxr-xr-x  1 root root 54160 Nov 30 15:16 /bin/cat
```

もう1度、catコマンドの例を挙げます。`-rwxr-xr-x`の箇所に注目です。
一番左の`-`はファイルタイプの一種で、ファイルを意味します。以下はファイルタイプとそれらの意味となる対応表です。

| ファイルタイプ | 意味 |
|:--|:--|
| - | ファイル |
| d | ディレクトリ |
| l | シンボリックリンク |


ファイルタイプを除いた部分`rwxr-xr-x`の部分に注目です。
これら9文字はファイルモードを意味し、`rwx`、`r-x`、`r-x`と3文字ごとのブロックに分けられます。
catコマンドでは、以下のようになります。

| オーナー | グループ |その他ユーザ |
|:--|:--|:--|
| rwx | r-x | r-x |


ファイル権限の記号と意味は以下のようになります。

| 記号 | 意味 |
|:--|:--|
| r | 読み取り(read) |
| w | 書き込み(write) |
| x | 実行(execute) |

なお、`-`となっているところは、権限がないという意味です。
そして、ファイル権限の記号はディレクトリ関しにも同様です。

| 記号 | 意味 |
|:--|:--|
| r | 読み取り→ディレクトリに含まれるファイル一覧取得 |
| w | 書き込み→ディレクトリ下にあるファイル・ディレクトリの作成・削除 |
| x | 実行(execute)→ディレクトリをカレントディレクトリにする |



## ファイル権限（パーミッション）変更

ファイル権限の変更方法は以下の2つです。

### 1.シンボルモード

シンボルモードは、変更対象にどのような権限を追加・禁止するかが明確です。

```
chmod [ugoa] 　[+-=] 　[rwx]  <file name>
　　　 ------ 　----- 　-----  -----------
      変更対象  演算子  　権限  　ファイル名
```

変更対象はそれぞれ以下のような意味になります。

| 記号 | 意味 |
|:--|:--|
| u | ユーザ(=オーナー)（user） |
| g | グループ(group) |
| o | その他(others) |
| a | すべて(all) |


演算子はそれぞれ以下のような意味になります。

| 記号 | 意味 |
|:--|:--|
| = | 指定した権限と等しくする |
| + | 権限を付与する |
| - | 権限を禁止する |

先ほど、作成した`test.txt`のファイルの権限を変更してみます。オーナーやグループと同様に、その他ユーザへファイルの書き込み権限を付与します。

```
$ ls -l test.txt
-rw-rw-r--.  1 banri banri 54160 Nov 30 15:16 test.txt
$ chmod o+w test.txt
$ ls -l test.txt
-rw-rw-rw-.  1 banri banri 54160 Nov 31 02:16 test.txt
```

その他ユーザの権限`r--`が`rw-`に変更されましたね。

次に、グループのファイルへの書き込み権限を禁止します。

```
$ ls -l test.txt
-rw-rw-rw-.  1 banri banri 54160 Nov 31 02:16 test.txt
$ chmod g-w test.txt
$ ls -l test.txt
-rw-r--rw-.  1 banri banri 54160 Nov 31 02:17 test.txt
```

グループの権限`rw-`が`r--`に変更されましたね。

複数のユーザの権限を一括指定する場合は以下のようにします。

```
$ ls -l test.txt
-rw-rw-rw-.  1 banri banri 54160 Nov 31 02:17 test.txt
$ chmod ug=x test.txt
$ ls -l test.txt
---x--xrw-.  1 banri banri 54160 Nov 31 02:18 test.txt
```


### 2.数値モード

```
chmod <8進数の数値> <file name>
```

| 数字 | 意味 |
|:--|:--|
| 4 | 読み取り(**r**ead) |
| 2 | 書き込み(**w**rite) |
| 1 | 実行(e **x** ecute) |

権限は以上の8進数の足し算で決定できます。例えば`rwxr-xr-x`のような権限を一括指定したい場合は以下のようになります。権限の一括指定には、シンボルモードより数値モードの方が利用されるそうです。私も権限設定で「700」や「754」などをよく使用します。

| オーナー | グループ |その他ユーザ |
|:--|:--|:--|
| rwx | rw- | r-x |
| 4+2+1 | 4+2 | 4+1 |
| 7  | 6  |  5  |

以上のように、それぞれの足し算の結果を繋げた765が権限の数値となります。　

```
$ ls -l test.txt
-rwxr-xrw-.  1 banri banri 54160 Nov 31 02:17 test.txt
$ chmod 765 test.txt
$ ls -l test.txt
-rwxrw-r-x.  1 banri banri 54160 Nov 31 02:18 test.txt
```

## スーパーユーザ

スーパーユーザは、あらゆる権限が付与されたユーザのことで、システムの設定ファイルの変更やアプリケーションをインストールする権限を持っています。rootユーザとも呼ばれています。スーパーユーザに対して、ユーザ`banri`などは一般ユーザに分類されます。以下はスーパーユーザになる方法とスーパーユーザで実行する方法です。

### 1.スーパーユーザになる - suコマンド

```
[banri@localhost]$ su
Password:
[root@localhost]#
```

一般ユーザからスーパーユーザになる（ログインする）と、プロンプトが`$`から`#`に変更されます。

```
[root@localhost]# exit
exit
[banri@localhost]$
```

スーパーユーザから一般ユーザに戻る（ログアウトする）には、`exit`コマンドを入力します。プロンプトが`#`から`$`に戻りました。

### 2.スーパーユーザで実行する - sudoコマンド

sudoは設定ファイルを実行したい時やアプリケーションをインストール・起動したい時など、アプリケーションのインストール・起動などに利用されます。以下は、sudoを使用したnginxのインストールと起動に関するコマンドです。

```
# nginxをインストール
$ sudo yum install nginx

# nginxを起動
$ sudo systemctl start nginx