Table of Contents
LinuxにおけるUser & Group
Linuxでは大きく分けるとユーザーは以下3つあります
ユーザー区分 | 説明 |
---|---|
スーパーユーザー | システム唯一の特権ユーザー,すべてのアクセス制御を無視することができる ユーザー名: root, ユーザーid: 0と決まっている |
システムユーザー | 各種サーバープログラムやシステムプログラムの実行に利用されるユーザー ユユーザーIDは主に1~99の範囲で割り当てられる |
一般ユーザー | システムの一般利用者 ユーザーIDは1000以降が割り当てられる(初めてのユーザーなら1000) |
root以外のuid1000未満のアカウントはデーモンやディレクトリの所有者として利用するシステムアカウントとして用意されています.そのため,100未満のUIDについてシステムによって静的に割り当てられるべきであり,アプリケーションによって作成されるべきではない範囲であると理解できます.一方,100 から 499 は,システム管理者やインストール後のスクリプトが useradd
を使用して動的に割り当てるために予約された領域となります.
一般ユーザーのリストを取得したい場合は,
- 一般ユーザーは1000以上
- 65535はnobodyに予約されている
- ユーザー情報は
/etc/passwd
ファイルに記録されている
以上の3点を踏まえて,以下のようなスクリプトで確認することができます.
1
2
3
4
5
## usernameのみ出力
% awk -F':' '{ if ($3 >= 1000 && $1 != "nobody") print $1; }' /etc/passwd
## comma-separatedでuidと合わせて出力
% awk -F':' '{ if ($3 >= 1000 && $1 != "nobody") print $1","$3 }' /etc/passwd
代表的なユーザー一覧
User | Group | Comments |
---|---|---|
root | root | スーパーユーザー |
bin | bin | Legacy applicationとの互換性を持たせるためのユーザー,基本的には使用されない |
daemon | daemon | daemon用のLegacy UID/GUID |
lp | lp | Printer special privileges |
sync | sync | Login to sync the system |
shutdown | shutdown | Login to shutdown the system |
halt | halt | Login to halt the system |
Mail special privileges | ||
news | news | News special privileges |
uucp | uucp | UUCP special privileges |
man | man | Man special privileges |
nobody | nobody | Used by NFS |
nobodyとは誰か?
Def: Unix systemにおけるnobody
- nobodyに対して,一般的にはuid 65534が割り当てられている
- NFS(Network File System)サーバーがクライアントから提供されたUIDやGIDを信頼できない場合,またはroot-squashオプションが使用されている場合に使用される
- 基本的にはNFS用に用意されたユーザー
注意点として,ネットワークを通じてコンピューター間でファイルを共有するNFS用のユーザーであってその他の目的で使用されることは想定されていません.「nobodyを信頼できないプログラムの実行や信頼できないデータの処理に使用すること」は推奨されません.「あくまで,サービスには専用のユーザーアカウントを持たせるべき」というルールを忘れないようにしましょう.
/etc/shadow
ファイルを見てみると第2フィールドであるpasswordカラムが*
と表現されています
1
2
% sudo cat /etc/shadow | grep nobody
nobody:*:11111:0:99999:7:::
これnobodyユーザーはパスワードが設定されていないことを意味します.
Column: 65535について
- 65535は16bit符号なし整数で表すことのできる一番大きな数字
- 16進数だとFFFFとして表現される
- 以下のように初めの4つのフェルマー数の積で表現できる特徴がある
References
(注意:GitHub Accountが必要となります)