Envaderでユーザー管理してみた

### ユーザー管理って知っていますか？

この記事では、以下の様なことについてざっくり話していきたいと思います。

- なんでユーザー管理が必要なのか
- どうやってユーザー管理をするのか
- そもそもユーザー管理とはなんなのか

この記事は[Envader](https://envader.plus/)というインフラ学習サイトの[Linux基礎コース](https://envader.plus/courses)を参考に作っています。

今回のシナリオはこちら

[Envader](https://envader.plus/course/1/scenario/1013)

### 結論　ユーザー管理とは
---

３つ意味があります。

1. **ユーザを追加したり、減らしたりして、パスワードの管理なども行う事。**
2. 一人のユーザーが「管理者ユーザー」と「一般ユーザー」という役割を一人二役でこなす事
3. 特定のプログラムを動かすときに「システムユーザー」という専用のユーザーを作り管理することによって「全体のシステムへ影響が出る事」を避ける事

この記事では1つ目の意味をメインに2つ目の意味もちょこっと見ていきたいと思います。

※３つ目は、我々が実際に管理するというよりも知識として「こういう仕組みがあるよ〜」という話なのでこの記事では深く言及はしないでおこうと思います。


<aside>
💡 ちなみに「ユーザ」と「ユーザー」の呼び方ですが、どちらでも正解のようです。ただ、一般的にはユーザーの方が使われているそうですね。

</aside>

### ユーザーを追加してみる

---

**ユーザーを追加する時はsudoコマンドとuseraddコマンドを使います。**以下が書式になります。

```bash
$ sudo useradd　オプション　ユーザ名
```

※$は「プロンプト」と言って『コマンドが打たれるまで待ってるよ〜』という事を表します。

$はコマンドの待機を表している表示なので、打たないでください。

**ユーザーを追加出来るのは管理者ユーザーだけです。**以下のようなエラー画面が出たらコマンドの最初に「sudo」を付け忘れていないか確認してみてください。

```bash
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
```

<aside>
💡 sudoコマンドが付けられたコマンドは管理者ユーザーの権限と同じ力を持って実行できます。一般ユーザーではユーザーの追加は出来ないので、このようにする必要があるのですちなみにsudoコマンドは「super user do」(管理者ユーザーが何かを実行する)の他に　「switch user and do」(ユーザーを切り替えて実行)など由来には諸説あるようです。

</aside>

ここでは、よく利用されるオプション「-m」を使っていきましょう

useraddコマンドに-mオプションを付ける事でユーザーのホームディレクトリも一緒に作る事ができます。

<aside>
💡 ホームディレクトリとはユーザーがログインした時に最初に居る場所のことです。「~」(チルダ)で表されることもあります。

</aside>

それでは、実際にユーザーを作って見ましょう

```bash
$ sudo useradd -m newu
```

本当にユーザーが作れたのか確認したい時はこのように打ちます。「/etc/passwd」にはユーザー名やその情報が書かれています。一番下に新しく作ったユーザー名が書かれています。

※見る時は「sudo」を付ける必要はありません

```bash
$ cat /etc/passwd
```

newuというユーザー名が見つかりましたでしょうか？作ったユーザーがある事が確認できましたら、次へ進んでください。

### ユーザーのパスワードを設定してみる

次に作ったユーザーにパスワードを設定していこうと思います！そのためには

「sudo」コマンドと「passwd」コマンドを使います。書式は以下です

```bash
$ sudo passwd パスワードを設定したいユーザー名
```

実際に上で作ったユーザーである「newu」のパスワードを変更してみましょう！

```bash
$ sudo passwd nuwu
```

上のように打つとパスワードを設定する以下のような表示が出るので設定したいパスワードを入力してEnterキーを押します。（パスワードは設定用と確認用で2回打つ必要があります）

※パスワードは入力しても画面には出ないので、行う場合はしっかり記録を取りましょう！

```bash
#　1回目のパスワード入力
Enter new UNIX password:
#　2回目のパスワードを入力
Retype new UNIX password:
# パスワードの設定に成功しました
passwd: password updated successfully
```

### ユーザーを消してみる

次に作ったユーザーを消してみましょう（~~この字体だけ見ると、なんか危ない人みたいですね~~）

ユーザーを消すには「sudo」コマンドと「userdel」コマンドを使います。以下書式

```bash
$ sudo userdel 消したいユーザー
```

実際にやってみようと思うのですが、このコマンド自体がユーザーを消すという危ないコマンドなので、消す用のユーザーを作ってから行ってみてください。今回は新しく「delu」というユーザーを作ります。

```bash
#　ユーザーを作ります
sudo useradd delu
```

```bash
#　ユーザーを消します
sudo userdel delu
```

出来ましたでしょうか？実際に「ls /etc/passwd」コマンドを実行して「delu」が消えているか確認してみましょう！

### 管理者ユーザーと一般ユーザーを分ける必要性とは？

外部の人が勝手な操作が出来ないように権限を制限するために一般ユーザーでログインしてもらうのです。

しかし、自分も管理者ユーザーでログインはしないのです。何故かというと管理者ユーザーが悪意ある者に乗っ取られてしまった時に全てを奪われてしまうからです。管理者ユーザーは最強です。なんでも出来てしまいます。しかし、強すぎるのです。なので、管理者ユーザーで誤った操作をした場合「取り返しの付かない事になってしまった…。」といった事になってしまいます。

そこで自分も一般ユーザーでログインすることで権限が制限されているので、「一発でパソコンを破壊！」なんてことは避けられますよね。ということで『必要な時だけ管理者ユーザーの力を借りよう』という場面で「sudo」コマンドを使うのです。


<aside>
💡 管理者ユーザーには基本的にパスワードは設定しません。設定してしまうと悪意あるものにパスワードを破られてしまった時には全てを奪われてしまいます。最初からログインできないようにしておけば奪われる心配はないと言うことですね。ちなみに、管理者ユーザーは「スーパーユーザー」や「ルートユーザー」とも呼ばれ、「/」（スラッシュ）で表すこともあります。

</aside>

「ん？一般ユーザーでログイン出来るなら外部からログインした人も「sudo」コマンド使えば好き放題できるのでは？」

ここまで聞いてきた中でこんな疑問を感じた方もいると思います。

一般ユーザーにも2つ種類があります。

1つ目は「一般ユーザー」

主に自分の事です。状況に応じて管理者ユーザーの権限を使い、権限が必要な操作をする事もできます。

2つ目「制限付き一般ユーザー」

主に「外部から入ってきたユーザー」の事です。この外部ユーザーの権限を更に設定することで「全体のシステムに影響を及ぼすこと」を避けているのです。要するに、制限付きユーザーには管理者ユーザーの権限が必要になる操作はできないと言うような感じです。

身近な例では、今この記事を見てくれている方にもこのような制限は起きています。

**実際に作られたウェブサイトに閲覧者が好き放題書き込み**できるわけじゃないですよね。

書き込みできる所と言えば、コメント欄くらいでしょうか。この例でいえば、管理者ユーザーはQiitaの運営者のような気もしますが…ｗ

### ポイント

---

ユーザーの種類には「管理者ユーザー」と「一般ユーザー」と「制限付き一般ユーザー」がある！

大いなる力には大いなる代償が伴うため、自ら制限をかけて必要な時だけ力を解放する。

それぞれが持つ役割を理解する（存在しているからには、理由や意味がある。）

### 最後に問題を出題したいと思います！

---

是非、アウトプットをして知識をお持ち帰りください！

ユーザー管理とは何ですか？意味を一つ説明してください

```bash
#　解答欄

```

ユーザーを作る、消す、パスワードを設定するには権限が必要です。コマンドに一時的な権限を付けるために必要なコマンドは何ですか？一つ答えて下さい

```bash
#　解答欄
```

### 雑感
---

今回のユーザー管理って使おうと思えば、別の意味としても使えそうな言葉なので理解をするなら「一般ユーザー」や「管理者ユーザー」などの「ユーザー管理」という言葉を構成する要素一つ一つの役割に目を向けていくのがいいのかなと思いました。

### 参考にさせて頂いた記事、書籍

---

[入門者のLinux 素朴な疑問を解消しながら学ぶ (ブルーバックス)](https://www.amazon.co.jp/%E5%85%A5%E9%96%80%E8%80%85%E3%81%AELinux-%E7%B4%A0%E6%9C%B4%E3%81%AA%E7%96%91%E5%95%8F%E3%82%92%E8%A7%A3%E6%B6%88%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-%E3%83%96%E3%83%AB%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9-%E5%A5%88%E4%BD%90%E5%8E%9F-%E9%A1%95%E9%83%8E/dp/4062579898)

[https://www.seleqt.net/service/how-to-write-user-katakana/](https://www.seleqt.net/service/how-to-write-user-katakana/)

[https://www.kcct.co.jp/careetec/magazine/column/hishinuma-linux-syoshinnsya8/](https://www.kcct.co.jp/careetec/magazine/column/hishinuma-linux-syoshinnsya8/)

[https://eng-entrance.com/linux-user-add](https://eng-entrance.com/linux-user-add)

[https://wa3.i-3-i.info/word11160.html](https://wa3.i-3-i.info/word11160.html)

[https://technoglitz.com/japan/制限付きシェルを使用してlinuxユーザーが実行でき/](https://technoglitz.com/japan/%E5%88%B6%E9%99%90%E4%BB%98%E3%81%8D%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6linux%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D/)