Linux学習 第11章 ユーザーアカウントの管理

📢 この記事は gemini-3-flash-preview によって翻訳されました

第11章 ユーザーアカウントの管理

ユーザーアカウントは、システムを利用する人間と、システム内で動いているプロセスの間の境界線を守るものなんだ。そしてグループっていうのは、システムの権限を一度に複数のユーザーへ割り当てるための方法だよ。

11.1 ユーザーアカウントの作成

Linuxシステムを使う人は、みんな自分専用のアカウントを持つべきなんだ。アカウントがあれば、ファイルを保存するための自分だけの場所が持てるし、GUIやパス、環境変数なんかを自分好みにカスタマイズして、使いやすく調整することもできるからね。

CockpitっていうGUIを使ってアカウントを作ることもできるよ。もしインストールされてなかったら、こんな感じで入れられる:

1
2
yum install cockpit -y
systemctl enable --now cockpit.socket

それから、ブラウザで localhost:9090 を開けば操作できるよ。

11.1.1 useradd コマンドでユーザーを追加する

多くの場合、GUIを使うのはちょっと面倒だから、useradd コマンド(root権限が必要)でユーザーを追加するのが一般的だね。必須の引数はユーザーのログイン名だけで、他にも色々なオプションがあるよ:

オプション説明
-c “comment”新しいアカウントの説明を入れる。普通はユーザーのフルネームだね。
-d home_dirホームディレクトリを設定する。デフォルトはログイン名で /home の中に作られるよ。
-Dアカウントを作るんじゃなくて、指定した情報をデフォルト設定として保存する。
-e expire_dateYYYY-MM-DD 形式でアカウントの有効期限を決める。例:-e 2024-08-01
-f -1パスワードが切れてから何日後にアカウントを完全にロックするか。-1 は無効設定だよ。
-g groupプライマリグループを設定する(/etc/group に存在する必要あり)。指定しないとユーザー名と同じ名前のグループが作られて、それがプライマリになるよ。
-G grouplistユーザーをサブグループに追加する。カンマ区切りで指定するんだ。例:-G wheel, sales, tech
-k skel_dirホームディレクトリにコピーするファイルの雛形ディレクトリを指定する。デフォルトは /etc/skel
-mホームディレクトリを自動で作る。FedoraやRHELではデフォルトだけど、Ubuntuだとそうじゃないこともあるよ。
-Mホームディレクトリを作らない。-m オプションがあっても無視する。
-nユーザー名と同じグループを自動で作る機能を無効にする。
-o-u uid と一緒に使って、他のユーザーと同じUIDを持つアカウントを作れるようにする。
-p passwdパスワードを設定する(MD5などでハッシュ化されたもの)。指定しない場合は後で passwd user で設定できる。ハッシュ化には openssl passwd とかが使えるね。
-s shellデフォルトのシェルを設定する。例:-s /bin/csh
-u user_idユーザーIDを指定する。指定しなければ自動で割り振られるよ(普通のユーザーは1000から始まる)。

よく使うのはこんな感じ:

1
2
3
# root権限で
useradd yexca
passwd yexca

yexca というアカウントを作る時、useradd コマンドは裏でこんなことをやってるんだ:

  1. /etc/login.defs/etc/default/useradd を読み込んで、デフォルト値を確認する。

  2. コマンドライン引数をチェックして、どのデフォルト値を上書きするか決める。

  3. デフォルト値と引数に基づいて、/etc/passwd/etc/shadow に新しいユーザーのエントリを作る。

  4. /etc/group に新しいグループのエントリを作る。

  5. /home ディレクトリの中に、ユーザー名のホームディレクトリを作る。

  6. /etc/skel ディレクトリの中身を新しいホームディレクトリにコピーする。これにはログインスクリプトとか設定ファイルが含まれてるよ。

/etc/passwd ファイルの中身はこんな風になってる:

yexca:x:1001:1001::/home/yexca:/bin/bash

コロンで区切られていて、左から:ログイン名、パスワード、ユーザーID、プライマリグループID、コメント、ホームディレクトリ、デフォルトシェル、だよ。

パスワード欄が x になってるのは、実際の中身が暗号化されて /etc/shadow に保存されてるからなんだ。

/etc/group ファイルはこんな感じ:

yexca:x:1001:

これもコロン区切りで、グループ名、グループパスワード、グループID、そのグループに属するユーザーリスト、という順番だよ。

11.1.2 ユーザーのデフォルト値を設定する

useradd コマンドは /etc/login.defs/etc/default/useradd を見てデフォルト値を決めてるから、このファイルをいじればデフォルトを変えられるよ。

Linuxの種類によって login.defs の中身は違うけど、一部を紹介するね:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
PASS_MAX_DAYS    99999
PASS_MIN_DAYS    0
PASS_MIN_LEN    5
PASS_WARN_AGE    7
UID_MIN    1000
UID_MAX    60000
SYS_UID_MIN    200
SYS_UID_MAX    999
GID_MIN    1000
GID_MAX    60000
SYS_GID_MIN    201
SYS_GID_MAX    999
CREATE_HOME    yes

その他の設定は /etc/default/useradd で確認できる。useradd -D を叩けば今の設定が見れるよ。

-D と他のオプションを組み合わせれば、/etc/default/useradd の中身を書き換えることもできるんだ:

  • -b default_home — ホームディレクトリを作る親ディレクトリを設定する(普通は /home)。

  • -e default_expire_date — アカウントが無効になるデフォルトの期日を設定する(YYYY-MM-DD)。

  • -f default_inactive — パスワード期限が切れてから何日でアカウントを無効にするか。

  • -g default_group — デフォルトのグループ。

  • -s default_shell — デフォルトのシェル。

11.1.3 usermod を使ってユーザー情報を変更する

usermod コマンドを使えば、既存のアカウントの設定を簡単に変えられるよ。

オプション説明
-c “username”コメント(説明)を変える。
-d home_dirホームディレクトリを変える。
-e expire_date新しい有効期限(YYYY-MM-DD)を設定する。
-f -1パスワード期限切れ後のロックまでの日数を変える。
-g groupプライマリグループを変える(存在するグループに限る)。
-G grouplistサブグループを上書きする。今のグループを残したいなら -Ga を使うんだ。
-l login_nameログイン名を変える。
-Lアカウントをロックする(/etc/shadow のパスワードの前に「!」がつくよ)。
-m元のホームディレクトリの中身を新しい場所へコピーする(-d と一緒に使う)。
-oUIDの重複を許可する(-u と一緒に使う)。
-s shellシェルを変える。
-u user_idユーザーIDを変える。
-Uロックを解除する(「!」を消す)。

11.1.4 userdel でユーザーを削除する

例えば userdel -r yexca と打てば、yexcaというユーザーを /etc/passwd から消せるよ。-r をつければホームディレクトリの /home/yexca も一緒に消してくれるんだ。

ユーザーを消す前に、そのユーザーが残したファイルを find で探しておくといいかもね。 例:find / -user yexca -ls とか find / -uid 1001 -ls

持ち主がいないファイルが残ってるとセキュリティのリスクになることもあるから、実在するユーザーに持ち主を変えるか、find / -nouser -ls で持ち主不明のファイルを探して整理するのがおすすめだよ。

11.2 グループアカウントを理解する

複数のユーザーでファイルを共有したい時、グループアカウントはすごく便利なんだ。

chgrp グループ名 ファイル名orディレクトリ名 で、持ち主グループを変えられるよ。

11.2.1 グループアカウントの使い方

全てのユーザーは一つの「プライマリグループ」に属してる。これは /etc/passwd の4番目のフィールドにある数字で決まってるんだ。

それ以外に「サブグループ(増補グループ)」にも所属できるよ。もし yexcayexca グループと hi グループの両方のメンバーなら、/etc/group はこんな感じになる:

yexca:x:1001:yexca

hi:x:1002:yexca

グループの変更ができるのはroot権限がある人だけ。普通のユーザーは自分のグループを変えたり、誰かを自分のグループに入れたりはできないんだ。

もし一時的に特定のグループとしてファイルを作りたいなら、newgrp コマンドで一時的にそのグループに切り替えることができるよ。

root権限があれば、gpasswd コマンドでグループにパスワードを設定することもできる。

11.2.2 グループアカウントの作成

作成:groupadd グループ名

グループIDを指定して作成:groupadd -g gid グループ名

既存のグループ情報を変える時は:

groupmod -g gid ユーザー名

groupmod -n グループ名 ユーザー名

サブグループの変更は、さっきの usermod を使ってね。

11.3 企業でのユーザー管理

ACL(アクセス制御リスト)という技術を使えば、特定のユーザーやグループに対して、ファイルやディレクトリの権限を細かく設定できるんだ。

11.3.1 ACLで権限を設定する

使うのは setfacl(設定)と getfacl(確認)の2つ。

設定する時は -m(修正・追加)や -x(削除)を使うよ。例えば:

setfacl -m u:ユーザー名:rwx ファイル名

11.3.2 共同作業用のディレクトリを作る

chmod で権限を変える時、普段はあんまり気にしないけど、特殊な3つの権限ビットがあるんだ。これを使うと便利なことができるよ。

例えば chmod 775 /home/yexca/tmp.txt は、実は 0775 っていう意味なんだ。

名前数値記号
セットユーザーID (SUID)4u+s
セットグループID (SGID)2g+s
スティッキービット1o+t
  1. グループ共同作業ディレクトリを作る(SGIDを設定)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 共同作業用のグループを作る
groupadd -g 301 cooperation
# ユーザーをグループに入れる
usermod -aG cooperation yexca
# ディレクトリを作る
mkdir /mnt/co-tmp
# グループをcooperationに変える
chgrp cooperation /mnt/co-tmp
# 権限を設定(2はSGIDのこと)
chmod 2775 /mnt/co-tmp
# 権限を確認すると rwxrwsr-x になってるはず

これで、ユーザー yexca/mnt/co-tmp 内でファイルを作ると、そのファイルのグループは自動的に cooperation になるんだ。自分のプライマリグループにならないから共有が楽になるよ。

  1. 削除制限付きディレクトリを作る(スティッキービット)

コマンド:chmod 1775 /mnt/tmp

この設定をすると、たとえ書き込み権限があっても、rootユーザーかそのファイルの持ち主以外はファイルを消せなくなるんだ。

/tmp ディレクトリがまさにこれ(権限は rwxrwxrwt)だね。

セットユーザーID (SUID) について

実行ファイルにこれが設定されていると(rwsr-xr-x)、誰が実行しても「そのファイルの持ち主」の権限で動くことになるんだ。

例えば su コマンド。誰でも実行できるけど、動いてるプロセスはrootユーザーのものとして扱われるよ。

11.4 ユーザーアカウントの一元管理

Linuxのデフォルトの認証は /etc/passwd/etc/shadow を使うけど、他にも色々な方法があるよ。

例えば LDAP (Lightweight Directory Access Protocol) や NIS (Network Information Service)、Windowsと連携する Winbind なんかが有名だね。

Visits Since 2025-02-28

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。