第11章 ユーザーアカウントの管理
ユーザーアカウントは、システムを利用する人間と、システム内で動いているプロセスの間の境界線を守るものなんだ。そしてグループっていうのは、システムの権限を一度に複数のユーザーへ割り当てるための方法だよ。
11.1 ユーザーアカウントの作成
Linuxシステムを使う人は、みんな自分専用のアカウントを持つべきなんだ。アカウントがあれば、ファイルを保存するための自分だけの場所が持てるし、GUIやパス、環境変数なんかを自分好みにカスタマイズして、使いやすく調整することもできるからね。
CockpitっていうGUIを使ってアカウントを作ることもできるよ。もしインストールされてなかったら、こんな感じで入れられる:
| |
それから、ブラウザで localhost:9090 を開けば操作できるよ。
11.1.1 useradd コマンドでユーザーを追加する
多くの場合、GUIを使うのはちょっと面倒だから、useradd コマンド(root権限が必要)でユーザーを追加するのが一般的だね。必須の引数はユーザーのログイン名だけで、他にも色々なオプションがあるよ:
| オプション | 説明 |
|---|---|
| -c “comment” | 新しいアカウントの説明を入れる。普通はユーザーのフルネームだね。 |
| -d home_dir | ホームディレクトリを設定する。デフォルトはログイン名で /home の中に作られるよ。 |
| -D | アカウントを作るんじゃなくて、指定した情報をデフォルト設定として保存する。 |
| -e expire_date | YYYY-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から始まる)。 |
よく使うのはこんな感じ:
| |
yexca というアカウントを作る時、useradd コマンドは裏でこんなことをやってるんだ:
/etc/login.defsと/etc/default/useraddを読み込んで、デフォルト値を確認する。コマンドライン引数をチェックして、どのデフォルト値を上書きするか決める。
デフォルト値と引数に基づいて、
/etc/passwdと/etc/shadowに新しいユーザーのエントリを作る。/etc/groupに新しいグループのエントリを作る。/homeディレクトリの中に、ユーザー名のホームディレクトリを作る。/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 の中身は違うけど、一部を紹介するね:
| |
その他の設定は /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 と一緒に使う)。 |
| -o | UIDの重複を許可する(-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番目のフィールドにある数字で決まってるんだ。
それ以外に「サブグループ(増補グループ)」にも所属できるよ。もし yexca が yexca グループと 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) | 4 | u+s |
| セットグループID (SGID) | 2 | g+s |
| スティッキービット | 1 | o+t |
- グループ共同作業ディレクトリを作る(SGIDを設定)
| |
これで、ユーザー yexca が /mnt/co-tmp 内でファイルを作ると、そのファイルのグループは自動的に cooperation になるんだ。自分のプライマリグループにならないから共有が楽になるよ。
- 削除制限付きディレクトリを作る(スティッキービット)
コマンド: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 なんかが有名だね。