ユーザーを追加する

目次

Unknown programmer's programming note.

<2022-01-09 日>

1 はじめに

Hello Worldを動かすという最初の目標は達成しました。 次はただ動かすだけでなく、プログラミング言語のルールを覚えて、自分が何を書いたのかを理解した上でプログラムを動かせるようになることを目標とします。

その前にやっておくべきことがあります。 今まで、FreeBSD上ですべての作業をrootユーザーで行なってきました。 仮想マシンだし、スナップショットを作っておけばシステムが壊れてもいつでも復元できるし、別にいいじゃない、と考えるべきではないです。 本当にrootでログインすることが正しいと確信がある場合を除いて、rootでログインすることは避けるべきです。

プログラミングの実験をrootでやるなど、全然ダメです。 全く話になりません。

もし自身のシステムに対する破壊的な行為や、危険な綱渡りを楽しみたいというのであるなら、話は別です。

じゃあ何で今までrootでログインしてきたんだ、ということですが、理由は2つあります。

一つは、訳の分からないコマンドを入力させられる苦痛をなくしたかったからです。 FreeBSDでユーザー追加するのはとても簡単な作業です。 しかし、最初はコマンドラインでの作業をしたことがないという想定でした。 つまり、cdやlsといったコマンドを一度もやったことがないということです。 そんな段階でユーザーを追加するなど難しそうな作業を要求するのはいかがなものだろうと考えて、避けてきました。

もう一つは、こんなにHello Worldを動かすまでこんなに時間が掛かるとは思っていなかったためです。 さくっとUNIXコマンドを紹介して、ちょいちょいとコードを書いて、コンパイルして、3日くらいでできるだろうと思ってました。 ユーザーがどうこうとかよりも、何とかHello Worldを動かすことを優先したかったのです。 さらに、そのために必要なUNIXのコマンドを覚えて、とやってたらこんなに先延しになってしまいました。

以上がどうでもいい、言い訳でした。

2 ユーザーとは

FreeBSDのシステムを利用するためには、ログインする必要があります。 ユーザーがログインするには、そのユーザーのアカウントがシステムに登録されている必要があります。

ユーザーとアカウントと言う用語を区別するために例を挙げてみます。 銀行でお金を預けるとき、預けにきたその人がユーザーであり、預金残高などの情報を管理している口座がアカウントと言えます。 ユーザー(お金を預ける人)が、システム(銀行)を利用するためには、アカウント(口座)が必要となる、ということです。

アカウントには種類があります。 FreeBSDには、システムアカウント、スーパーユーザーアカウント、ユーザーアカウント、と大きく分けるとこの三種類があります。

  • システムアカウントは、システムのサービスのためのアカウントで、ユーザーが直接ログインして利用するためのアカウントではありません。
  • スーパーユーザーアカウントはこれまで使ってきたrootユーザーのためのアカウントです。 スーパーユーザーはシステムに対してあらゆる変更が可能で、誤った操作でシステムを壊してしまうと危険なので、通常はログインして作業をするべきではありません。
  • ユーザーアカウントは、通常のユーザーに与えるべきアカウントです。 パーミッションと呼ばれるファイルやディレクトリの設定によって禁止されていたら、その資源にはアクセスすることができません。 パーミッションによってシステム全体影響を与えるような操作は保護されていて、ユーザーアカウントではシステム全体の変更を行うことができません。 他のユーザーの所有するファイルなどへのアクセスも、パーミッションによって禁止されていたら、アクセスすることはできません。

今追加しようとしているのはユーザーアカウントです。 ユーザーアウントを追加することによって、そのアカウントに紐付けられたユーザーでログインしてシステムを利用できるようになります。 一つのユーザーアカウントに紐付けられるのはただその一人のユーザーだけであり、一人のユーザーが持つことのできるアカウントは一つだけです。 したがって、ユーザーアカウントを追加することは、ユーザーを追加することとほぼ同じ意味になります。

ユーザーに関連してグループというのもあります。 ユーザーは複数のグループに所属することができます。 そして、グループに対しても権限を設定することができます。 これにより、あるグループに所属するユーザーにまとめて権限を設定することができます。 例えば、ユーザー1がグループAに所属して、ユーザー2がグループAとグループBに所属するとします。 さらに、部屋AにはグループAに使用権が与えらていて、部屋BにはグループBに使用権が与えられていたとします。 このとき、ユーザー1は部屋Aのみが使用できて、ユーザー2は部屋Aと部屋Bの両方が使用できます。

3 adduser: ユーザーを追加する

ユーザーを追加するコマンドは2つ用意されています。 一つはadduserで、もう一つはpwというコマンドです。

簡単なのはadduserの方で、質問に答えながら情報を入力しく形で追加できます。 質問は結構数があるのですが、ほとんどスキップできるので、Enterを連打していても完了できます。

柔軟なのはpwの方の方で、質問形式ではなく、コマンドラインで指定して一発で作成します。 追加のためにだけでなく、追加した後に情報の表示や、訂正、削除もできます。

ここではadduserの方を使います。

adduserを起動するには、rootでログインした状態でadduserと入力します。

root@freebsd:~ # adduser⏎

ユーザー名を入力するように求められている状態になります。

Username: ▋

ユーザー名はログインするときに使う名前です。 英数字だけを使用します。 空白文字や記号は使えません。

今回は「上条当麻 (Toma Kamijyo)」というユーザーを追加することにします。 なのでユーザー名は「toma」とします。

Username: toma⏎

次は、フルネームを入力します。 フルネームはログインするときに使う名前ではありません。 空白文字や英数字以外の文字を使うこともできます。 この情報を利用するアプリケーションもありますが、空のままEnterを叩いて先にすすむこともできます。 ここではちゃんと入力しておきます。

Full name: Toma Kamijyo⏎

次は、ユーザーに割り当てる番号UIDを指定できます。 空にすると、1000番以降の空いている番号を順番に自動で割り振ってくれます。 通常はそれでいいでしょう。 空にしておきます。

Uid (Leave empty for default): ⏎

次は、ユーザーのログイングループを指定します。 ログイン後に行う作業のグループは、このグループで行なったことになります。 例えば、ログイングループがgggであるユーザーaaaでログインしてファイルを作成したとします。 そうすると、そのファイルの所有者は、ユーザーaaa、グループgggになります。 デフォルトではユーザー名と同じ名前のグループになります。 ここでは空のままにしてデフォルトにしておきます。

Login group [toma]: ⏎

次は、追加のグループを指定します。 ここでのお勧めは、もし、このユーザーでソフトウェアのインストールやシステムの管理を行うようにできるようにしたいのであれば、「wheel」というグループに加えることです。 ここでは、wheelに加えることにします。 こうしておくと「sudo」というコマンドを導入して、それを使えば、一時的にroot権限でコマンドを実行することが可能になります。

Login group is toma. Invite toma into other groups? []: wheel⏎

次はログインクラスです。 ログインクラスを利用すると、グループよりも細かな制御ができるのですが、利用方法はややこしいです。 よく分からないので、空にしてデフォルトを使用しておきます。

Login class [default]: ⏎

次はシェルの指定です。 ここで指定したシェルはログインシェルに使われます。 ログインシェルは、ログイン後に利用し続けるシェルで、そのシェルを終了するとログアウトします。 デフォルトではshになってますが、tcshというのに変更しておきます。 後で変更するのは簡単です。

Shell (sh csh tcsh nologin) [sh]: tcsh⏎

次はホームディレクトリの場所の指定です。 デフォルトでは /home/ユーザー名 となっています。 しかし /home/usr/home/ へのリンクとなります。 通常はこれで問題ありません。 しかし、VirtualBoxのファイルマネージャーという機能でホームボタンが効かなくなるというちょっとした面倒が発生します。 とはいえ、大したことではないのでこのままにしておきます。

Home directory [/home/toma]: ⏎

次は、ホームディレクトリのパーミッションを指定します。

パーミッションとは、ファイルやディクレトリに付加されるアクセス権を制御する情報です。 基本的には、所有者、所有者のグループ、その他のユーザーの3つのカテゴリがあります。 そして、それぞれのカテゴリに対して、読み取り(r)、書き込み(w)、実行(x)の3種類の操作を許可するかどうかを設定します。 所有者に全て、グループに読み取りと実行、その他には何も許可しない、とする場合 rwxr-x--- のようになります。 これは ls -l で表示される情報の書式です。 別の表し方もあります。 3桁の8進数で各ビットをそれぞれのrwxに対応させる表し方です。 先の場合 rwxr-x---750 となります。 これだけでは分かりづらいと思いますが、ここで詳細に解説すると脱線してしまうので、この辺にしておきます。

ここでのパーミッションの指定のルールはちょっと分かりづらいです。 何も、指定しなければデフォルトの755が使われます。 これを変更して、777にしたいと思ってもできません。 デフォルトの755よりも緩い設定はできないようです。 例えば、067のようにしても、作成されるホームディレクトリに設定されるのは、045になります。 とはいえ、通常はこのような変なパーミッションにすることはないのであまり問題にはならないでしょう。 せいぜい 700750 といったところかと思います。

今回はデフォルトのままにしておきます。

この場合、ホームディレクトリのパーミッションは755になります。

Home directory permissions (Leave empty for default): ⏎

次は、パスワードによる認証を行うかどうかを指定します。 もし、noと答えてパスワードによる認証をしないようにすると、このマシンで直接ログインできなくなります。

SSHなどによるログインのみに制限して、さらにパスワードによる認証を禁止する場合、noとしておくと良いかもしれません。

ここでは、このマシンに直接ログインして利用するので、デフォルトのままyesとしておきます。

Use password-based authentication? [yes]: ⏎

次は、初期パスワードを空にするかどうかです。 空にしておくと誰でもログインできる状態となっています。 ここではパスワードを設定しておきたいので、デフォルトのままnoとしておきます。

Use an empty password? (yes/no) [no]: ⏎

次は、ランダムなテキストのパスワードを自動で作成して、それを使用するようにするかどうかです。 ここでyesとすると、完了時に推測しにくい適当なパスワードが表示されます。 それを記憶しておけば使用することができます。 ここではもっと覚えやすいものを使いたいので、デフォルトのままnoとしておきます。

Use a random password? (yes/no) [no]: ⏎

次は、実際に使用するパスワードを入力します。 パスワードを打ち込んでいる最中、画面には何も表示されません。 もし打ち間違えたらCtrl+Uで消去できます。 ただし、画面上では分かりません。

Enter password: (適当な新しいパスワードを入力する…)⏎

次は、確認のためもう一度さっき入力したパスワードを打ち込みます。

Enter password again: (さっき入力したパスワードをもう一度入力する…)⏎

次は、このユーザーアカウントが作成されると同時にロックしておくかどうかを指定します。 ロックしておくとアンロックするまで使えません。 アンロックするには pw unlock ユーザー名 とします。 ここではロックする必要はないので、デフォルトのままnoとしておきます。

Lock out the account after creation? [no]: ⏎

次に、これまで入力した内容が表示され、確認を求められます。

Username   : toma
Password   : *****
Full Name  : Toma Kamijyo
Uid        : 1001
Class      : 
Groups     : toma wheel
Home       : /home/toma
Home Mode  : 
Shell      : /bin/tcsh
Locked     : no
OK? (yes/no): ▋

間違いなければ、yesと打ち込みます。

OK? (yes/no): yes⏎

正常に追加できれば、次のようなメッセージが表示されます。 「Successfully (正常に) added (追加された)」というのを確認できます。

adduser: INFO: Successfully added (toma) to the user database.

最後に、続けて別のユーザーを追加するかどうか尋ねられます。 今はもう追加しないので、noと答えます。

Add another user? (yes/no): no⏎

終了前に「Goodbye! (さようなら!)」とメッセージが表示されます。

Goodbye!

これで新しいユーザーの追加は完了です。 今追加したユーザーが使えるようになっているかどうか確認するために、いったんログアウトして、そのユーザーでログインしてみると良いです。

全体は次のようになっています。

Username: toma                                                ▹ログインに使うユーザー名を入力
Full name: Toma Kamijyo                                       ▹フルネームを入力。省略可能
Uid (Leave empty for default): 
Login group [toma]: 
Login group is toma. Invite toma into other groups? []: wheel ▹追加のグループ。wheel に追加
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh                        ▹使用するシェル。tcsh を使用
Home directory [/home/toma]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: 
Enter password:                                               ▹パスワードを入力 
Enter password again:                                         ▹パスワードを再入力 
Lock out the account after creation? [no]: 
Username   : toma
Password   : *****
Full Name  : Toma Kamijyo
Uid        : 1001
Class      : 
Groups     : toma wheel
Home       : /home/toma
Home Mode  : 
Shell      : /bin/tcsh
Locked     : no
OK? (yes/no): yes                                             ▹これで良いか。yes と入力
adduser: INFO: Successfully added (toma) to the user database. 
Add another user? (yes/no): no                                ▹別のユーザーを追加するか。no と入力
Goodbye!

たくさんあったように思えるかもしれませんが、ほとんどはデフォルトのままです。 慣れてしまえば、数十秒でできるようになります。

4 rmuser: ユーザーを削除する

間違って登録したユーザーや、実験のために追加したユーザーを削除できないと困ると思うので、削除する方法も書いておきます。

ユーザーの削除は、追加より簡単です。 削除には、rmuserというコマンドを使います。 rmuserを実行するには、rootユーザーでrmuserと入力します。

root@freebsd:~ # rmuser⏎
Please enter one or more usernames: toma⏎     ▹削除したいユーザー名を入力
Matching password entry:

toma:$6$DskxFOnyMNnhyMlf$J29FDWR5sgk80hTZOo0XKVT9pw44d7QWqTaFKq2G7KvrdkrcTatV/S9
pvodnOLfR9woC7jUWROjBCqjmv/m9d0:1001:1001::0:0:Toma Kamijyo:/home/toma:/bin/tcsh

Is this the entry you wish to remove? y⏎      ▹本当にこのエントリを削除して良いか。yと入力
Remove user's home directory (/home/toma)? y⏎ ▹ホームディレクトリを削除して良いか。良ければyと入力
Removing user (toma): mailspool home passwd.
root@freebsd:~ # ▋

ホームディレクトリを削除すると、ホームディレクトリの中にあったものはすべて消えます。 もう取り戻すことはできません。 本当に削除しても良いかどうか、よく考えてから実行する必要があります。

5 su: ユーザーを切り替える

あるユーザーで作業していて、別のユーザーに切り替えたいということが、しばしばあります。 その多くはrootに切り替えたいというケースです。 いったんログアウトしてから、そのユーザーでログインし直してもいいのですが、ちょっと面倒です。

現在ログインしているユーザーのセッションを終了せずに、別ユーザーに切り替えることができます。 それがsuです。

今、さっき追加したユーザーtomaでログインしているとします。 削除してしまっている場合は、もう一度追加してください。

このとき su - と入力すると、rootに切り替えることがきます。 suは Switch User の略です。

toma@freebsd:~ % su -⏎
Password:               ▹rootのパスワードを入力
toma@freebsd:~ % ▋

ハイフン「-」は、切り替え先のユーザーのログインをシミュレートすることを指定するためのものです。 なくても大丈夫な場合がほとんどですが、一応付けた方が予想しない事態がおこる可能性を下げることができます。

切り替えた後は、rootでログインしたのと同じ環境で作業ができるようになります。

root以外のユーザーに切り替えることもできます。 その場合は su - ユーザー名 とします。

suで切り替えたあと、切り替え先のユーザーでexitあるいはlogoutを実行すると、元のユーザーに戻ってきます。

5.1 rootに切り替えられない場合

現在のログインユーザーが、グループwheelに入っていないと、suしたときSorry(ごめんなさい)というメッセージが返ってきて失敗します。

toma@freebsd:~ % su -⏎
su: Sorry
toma@freebsd:~ % ▋

この場合、現在のユーザーをグループwheelに追加する必要があります。

まず一旦ログアウトして、rootでログインし直します。 そして pw groupmod wheel -m toma というコマンドを実行します。

root@freebsd:~ # pw groupmod wheel -m toma⏎
root@freebsd:~ # ▋

何やら複雑なコマンドに思えるかもしれません。

  • pwは、コマンド。
  • groupmodは、pwのサブコマンド。グループを修正する機能はここにまとめられている。
  • wheelは、修正する対象のグループ名
  • -m は次に続くものが、追加するユーザー名であると指定するためのオプション。

pwは他にも多くの仕事こなすことができます。 しかし、使いこなせるようになるまでは、時間が必要かもしれません。 必要になるまで無理して覚える必要はないです。

5.2 sudo: ユーザーを切り替えずにroot権限でコマンドを実行する

suさえあれば、現在のユーザーからログアウトせずに、一時的にrootになってコマンドを実行できます。 そしてやることを終えたら、exitあるいはlogoutして、元のユーザーに戻ってくることができます。 これでも、やってやれないことはないです。

しかし、何かちょっとしたことがあるたびにrootにsuしないといけないのは面倒です。 その結果、結局rootになったまま作業してしまうという状況ができてしまうようになります。

たかだかコマンドを一つ二つ実行するためだけであれば、sudoというのを使うのが便利です。 便利なだけでなく、suで操作をrootを切り替えるよりも、安全なことが多いです。 なぜならsuしてしまうと、その間はあらゆる操作ができてしまいます。 コマンド一つだけにrootの権限を与えるなら、続けて行う操作にも意図してsudoで実行しない限り、誤って操作してしまうことはありません。 また、suのように、rootのパスワードを入力する必要がないので、肩越しにrootのパスワードが盗み取られるという最悪の事態になる可能性は、いくぶんか下がるでしょう。

sudoの使い方は簡単です。 実行したいコマンドの前に、sudoを置くだけです。 例えば、ユーザーがsudoを使ってadduserでユーザーを追加するには、次のようにします。

toma@freebsd:~ % sudo adduser⏎

すると、rootではなく、現在のユーザーのパスワードが尋ねられます。 一回sudoを実行して、パスワードを入力したら、それ以降しばらくの間は、再度sudoで何かするときにパスワードを尋ねられません。

sudoは大変便利です。 しかし、今の仮想マシンのFreeBSDにはインストールされていません。 手前で追加インストールする必要があります。

次回にFreeBSDでソフトウェアを追加する方法を書きますので、そのときに、まずsudoをインストールすることにします。

6 まとめ

ちょっと長くなってしまいましたが、やっていることは簡単です。

  • ユーザーがシステムにログインするためには、アカウントが必要である。
  • ユーザーを追加するには adduser を使う。
  • ユーザーを削除するには rmuser を使う。
  • 現在ログインしているユーザーから別のユーザーに切り替えるには su を使う。 sudoはより使いやすいが、まだインストールされていない。

次回以降は、rootで作業をするのでなく、今回作成したtomaというユーザーを使うようにします。 もちろん、ユーザー名をこちらに合わせる必要はありません。 本名でも、架空の名前でも好きなものにしてもらって全然OKです。

著者: watercat

Created: 2023-03-19 日 01:33

Emacs 27.1 (Org mode 9.3)

Validate