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
Debian
FreeBSD
実際の運用について
Debian系での uid, gid の管理方法
9.2.2. UID and GID classes
adduser では1000番以降(USER_MIN)、最初の空いている uid が使われる。
FreeBSD
最新の Porter's handbook からは削除されている。どうしたらいいのか分からない。
adduser では、最大 uid の次の番号が使われる。
Windows (参考)
コマンドプロンプト
net user コマンドで操作できる。
PowerShell
New-LocalUser
New-LocalGroup