uidとgidの管理方法
どうするのが望ましいのかを考える。(これはここでの考えで、規格などではない。)
user name == group name, uid == gid にしておくと管理しやすい。
そのユーザー専用のグループとして管理できる。ユーザーが関連ユーザーに許可を与えやすくなる。
複数のシステム間で user name, group name, uid, gid を共通化しておくと管理しやすい。
ファイルシステムを差し替えた時に uid, gid 違いのトラブルが起こらない。
クラウドなどでは、ユーザーが別途管理されていることがあり、同一にしておかないとそもそも動かない。
999番まではシステム用に予約しておくのが一般的になっている。
このため、最初のユーザーは1000番になっている。
Ubuntu だと /etc/adduser.conf に設定がある。
システムの uid, gid はサービスのポート番号と同じにするのが一般的。
例えば www ユーザーの uid, gid を 80 にするなど。
本当の理想は uid, gid をランダム番号で作ること。
次の id の予測を不可能にする。
id の判明でできる、悪意ある操作は、ほぼ root でしかできないことなので、そこまでする必要性は低いかもしれない。
Debian 系の adduser コマンドは、1000番以降、空いている番号を先頭から順に使う方式になっている。
空いている番号を先頭から使う方式だと、ユーザーを削除した後、再度新しいユーザーを追加した時に id の衝突がある。
FreeBSD の adduser コマンドは、現在使用中のuidの最大値+1を使う方式になっている。
レガシーなシステムでは uid, gid が 16bitだったため、最大で65535になっている。
ダメなアプリケーションでは 16bit と仮定している可能性がある。安全性を考えると16bit以上の値を使わない方がよい。
そもそも1つのホストとして直接65535のユーザーがいることはまずあり得ない。
OSのユーザー管理を使わず、アプリケーションでユーザー管理を作るのが一般的。
ユーザー、グループ管理のコマンドは、困ったことにいずれも POSIX 標準ではない。
useradd コマンド
adduser コマンド
pw コマンド
ユーザーの管理を正しくできるのは、OS付属のコマンドのみ。自力でエントリを変更するプログラムは作ってはならない。メタコマンド(外部コマンドからOS付属のコマンドを呼び出す)にすることはできる。
コマンドの説明
Linux
https://linuxjm.osdn.jp/html/shadow/man8/useradd.8.html
Debian
https://manpages.debian.org/jessie/adduser/adduser.8.en.html
FreeBSD
https://www.freebsd.org/cgi/man.cgi?pw(8)
https://www.freebsd.org/cgi/man.cgi?adduser(8)
実際の運用について
Debian系での uid, gid の管理方法
https://www.debian.org/doc/debian-policy/ch-opersys.html#uid-and-gid-classes
9.2.2. UID and GID classes
https://askubuntu.com/questions/368974/reserved-uids-gids-and-semi-reserverd-uids-gids
adduser では1000番以降(USER_MIN)、最初の空いている uid が使われる。
RHEL 7 第4章 ユーザーとグループの管理 https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-managing_users_and_groups
FreeBSD
http://www.freebsd.no/doc/ja/books/porters-handbook/book.html#dads-uid
最新の Porter's handbook からは削除されている。どうしたらいいのか分からない。
adduser では、最大 uid の次の番号が使われる。
Windows (参考)
コマンドプロンプト
net user コマンドで操作できる。
参考 https://www.atmarkit.co.jp/ait/articles/0609/02/news014.html
PowerShell
New-LocalUser
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.localaccounts/new-localuser?view=powershell-5.1
New-LocalGroup
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.localaccounts/new-localgroup?view=powershell-5.1