Linux初級では、ファイルやディレクトリを操作するコマンドや、 パーミッションの基本について学習しました。
特にパーミッションでは、 「誰がファイルを操作できるのか」 という考え方が重要でした。
では、この「誰が」にあたる Linuxのユーザは、 どのように管理されているのでしょうか。
useraddでユーザを作ると、Linux内部では何が起きるのか?
rootは一般ユーザと何が違うのか?
Linuxサーバを管理するうえで、 ユーザ管理は必須となる基本操作です。
この記事はLinux中級講座の一部です。 Linux初級で学んだ基本操作から一歩進み、 Linuxサーバの管理に必要な知識を学習します。
Linux中級講座を見る →
Linuxのユーザ・UID・root・/etc/passwdの関係を理解し、
useradd・passwd・usermod・
userdelを使った基本的なユーザ管理ができる状態を目指します。
Linuxのユーザとは?
Linuxでは、 「誰がLinuxを操作しているのか」 をユーザによって識別しています。
たとえば、1台のLinuxサーバを 田中さんと佐藤さんが利用するとします。
Linuxは、 「田中さん」「佐藤さん」という人間の名前ではなく、 tanaka・satoなどのユーザアカウント として利用者を識別します。
ファイルへのアクセス、コマンドの実行、プロセスの起動など、 Linux上のさまざまな操作には 「どのユーザが実行したのか」 という情報が関係します。
なぜユーザを分ける必要がある?
全員が同じユーザを利用してしまうと、 誰が何をしたのか分からなくなり、 アクセス制御も難しくなります。
ユーザごとにアクセスできるファイルや ディレクトリを制御できます。
どのユーザとして処理が実行されているかを 区別できます。
一般ユーザと管理者を分け、 必要以上の権限を持たせないようにできます。
現在のユーザを確認してみよう
現在ログインしているユーザは、
whoami
で確認できます。
whoami
$ whoami
infrauser
この場合、 現在のユーザは infrauser です。
より詳しいユーザ情報を確認したい場合は、
id
を利用します。
id
$ id
uid=1000(infrauser) gid=1000(infrauser) groups=1000(infrauser)
ここで登場する uidとgidは、 Linuxのユーザ管理を理解するうえで重要です。
Linuxはユーザ名ではなくUIDでユーザを識別する
私たちが普段見るのは
infrauser
のようなユーザ名ですが、
Linux内部では
UID(User ID)
という数値によってユーザを識別しています。
つまり、
というイメージです。
Linuxの権限管理では、 実際にはUIDなどの数値情報を利用して ユーザを識別しています。
rootユーザとは?
Linuxには、 root と呼ばれる特別な管理者ユーザがあります。
Linuxシステム全体に対して 非常に強い権限を持つ管理者ユーザ
rootのUIDは、 0 です。
# id root
uid=0(root) gid=0(root) groups=0(root)
rootはシステム設定の変更やユーザ管理など、 一般ユーザでは実行できない多くの管理操作を実行できます。
rootは非常に強い権限を持つため、 操作ミスの影響も大きくなります。 通常は一般ユーザを利用し、 必要な管理操作だけsudoなどで実行する運用が基本です。
Linuxにはどのようなユーザが存在する?
Linuxのユーザは、 大きなイメージとして次のように考えると分かりやすいです。
システム管理を行う 特別な管理者ユーザ。
人がLinuxへログインして 操作するためのユーザ。
サービスやプロセスを 動作させるために利用されるユーザ。
Linuxでは、 人間がログインするためだけにユーザが存在するわけではありません。
Webサーバなどのサービスを 専用ユーザの権限で動作させる こともあります。
ユーザ情報は/etc/passwdで確認できる
Linuxの基本的なユーザ情報は、 /etc/passwd に記録されています。
cat /etc/passwd
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
infrauser:x:1000:1000:Infra User:/home/infrauser:/bin/bash
webuser:x:1001:1001:Web User:/home/webuser:/bin/bash
一見すると分かりにくいですが、 1行が1ユーザを表しています。
/etc/passwdの1行を読み解いてみよう
次の行を例に見てみましょう。
infrauser:x:1000:1000:Infra User:/home/infrauser:/bin/bash
パスワードそのものは/etc/passwdに保存されていない
先ほどの
/etc/passwd
を見ると、
パスワード部分には
x
と表示されていました。
infrauser:x:1000:1000:Infra User:/home/infrauser:/bin/bash
現在の一般的なLinuxでは、 パスワードのハッシュ情報は /etc/shadow に保存されます。
ユーザ名・UID・GID・ Home Directory・Shellなど
Password Hashや Password有効期限など
パスワード関連情報を保護するため、 /etc/shadowには厳しいアクセス権が設定されています。
ホームディレクトリとは?
一般ユーザには通常、 そのユーザが利用する ホームディレクトリ が用意されます。
ユーザがログインすると、 基本的には自分のホームディレクトリを中心に作業します。
$ cd ~
$ pwd
/home/infrauser
useradd:Linuxユーザを作成する
新しいユーザを作成するときに利用する代表的なコマンドが、 useradd です。
sudo useradd tanaka
基本形は、
useradd [オプション] ユーザ名
です。
$ sudo useradd tanaka
$ id tanaka
uid=1001(tanaka) gid=1001(tanaka) groups=1001(tanaka)
これで tanaka というユーザがLinuxへ登録されました。
useraddだけではホームディレクトリが作られない場合がある
ここは初心者が混乱しやすいポイントです。
useradd
の動作はLinuxディストリビューションや設定によって違いがあります。
環境によっては、
sudo useradd -m tanaka
のように -mオプション を指定してホームディレクトリを作成します。
-m
ユーザ作成時に、 /home/ユーザ名 のホームディレクトリを作成します。
Linuxではディストリビューションや
/etc/login.defsなどの設定によって、
ユーザ作成時の既定動作が異なることがあります。
ログインシェルも指定できる
ユーザ作成時に ログインシェル を指定することもできます。
sudo useradd -m -s /bin/bash tanaka
-s
ユーザが利用するShellを指定します。
作成後、
/etc/passwd
を確認すると、
$ grep '^tanaka:' /etc/passwd
tanaka:x:1001:1001::/home/tanaka:/bin/bash
ホームディレクトリとログインシェルが確認できます。
passwd:ユーザのパスワードを設定する
ユーザを作成したら、 必要に応じて passwd でパスワードを設定します。
sudo passwd tanaka
$ sudo passwd tanaka
New password:
Retype new password:
passwd: password updated successfully
useraddはユーザを作成し、
passwdはパスワードを設定・変更するためのコマンドです。
usermod:既存ユーザの設定を変更する
すでに存在するユーザの情報を変更するときは、 usermod を利用します。
usermod [オプション] ユーザ名
たとえば、 tanakaというユーザ名を tanaka01へ変更する場合、
sudo usermod -l tanaka01 tanaka
とします。
$ sudo usermod -l tanaka01 tanaka
$ id tanaka01
uid=1001(tanaka01) gid=1001(tanaka) groups=1001(tanaka)
ホームディレクトリやグループなど、 関連する設定は別途確認する必要があります。 「名前だけ変更すれば全部変わる」と考えないことが重要です。
userdel:Linuxユーザを削除する
不要になったユーザを削除するときは、 userdel を利用します。
sudo userdel tanaka
ただし、 これだけではホームディレクトリなどが残る場合があります。
ホームディレクトリなども削除する場合は、
sudo userdel -r tanaka
とします。
-r
ユーザ削除と同時に、 Home DirectoryやMail Spoolなども削除します。
ホームディレクトリに必要なデータが残っていないか、 所有ファイルがほかに存在しないかなどを確認してから削除します。
Linuxユーザ管理の流れを整理しよう
ここで実際に試してみよう:Linuxユーザ管理シミュレーター
ここまで学習したコマンドを、 疑似Linux環境で実際に操作してみましょう。
このシミュレーターでは、 ユーザを作成 → 確認 → パスワード設定 → 削除 という一連の流れを体験できます。
Linux User Management
まずユーザを作成してみましょう
useradd → id → passwd → userdelの順に操作すると、 ユーザ管理の流れを理解しやすくなります。
理解度チェック:/etc/passwdを読んでみよう
次のユーザ情報を確認してください。
webuser:x:1005:1005:Web User:/home/webuser:/bin/bash
このユーザの UID はどれでしょうか?
/etc/passwdは「:」で項目を区切って読みます。
ユーザだけではLinuxの権限管理は完結しない
ここまでで、 Linuxがユーザをどのように識別し、 管理しているのかが分かりました。
しかし、実際のLinuxサーバでは、 ユーザ1人ずつに権限を設定するだけでは管理が大変 です。
たとえば、次の3人がWebサーバを管理するとします。
このように複数ユーザをまとめて管理する仕組みが、 Linuxのグループ です。
初級で学習した owner / group / others の「group」が、ここにつながります。
確認問題:Linuxユーザ管理を理解できたか確認しよう
Linux内部でユーザを識別する番号はどれですか?
Linux内部ではUID(User ID)によって ユーザを識別します。
Linuxで新しいユーザを作成する代表的なコマンドはどれですか?
useraddは新しいLinuxユーザを作成するための 代表的なコマンドです。
rootユーザのUIDはどれですか?
rootのUIDは0です。 rootはLinuxで非常に強い権限を持つ特別なユーザです。
3問に挑戦してみましょう。
まとめ
Linuxでは ユーザによって「誰が操作しているか」を識別 する
Linux内部ではユーザを UID によって識別する
/etc/passwd にはユーザ名・UID・GID・Home Directory・Shellなどが記録される
useradd・passwd・
usermod・userdel
で基本的なユーザ管理ができる
rootはUID 0を持つ特別な管理者ユーザであり、 必要以上にroot権限を利用しない ことが重要
次は「Linuxグループ管理」を学びましょう
Linuxでは複数ユーザをグループとしてまとめることで、 ファイルやディレクトリへのアクセス権を効率的に管理できます。
次の記事では、 GID・プライマリグループ・補助グループの仕組みから、 groupadd・usermodなどを使ったグループ管理まで学習します。
Linuxグループ管理を理解する →
