ユーザの種類
Linuxにおいて、ユーザはsystem user
とnormal user
の2種類に分けることができます。
system user
人間が直接ログインするためのユーザではなく、デーモンプロセスやサービスの実行のために使われるユーザです。
nginxのwoker processを実行する際に慣習的に使われるwww-data
や、mysqldを実行する際に使われるmysql
などがこれに該当します。
normal user
人間が対話的に使用する際に使うユーザです。
カーネルから見たユーザ
ユーザはwww-data
, mysql
などのユーザ名を持っていますが、カーネルはこのユーザランドで使われているユーザ名を認識していません。
カーネルが認識しているのは、ユーザID(UID
)です。
このUID
はユーザの種類によって割り当てられる範囲が決まっています。
割り当ての範囲は、ディストリビューションによって異なります。
例としてsystemdのドキュメントを参照すると、以下のようなUIDの範囲の割り当てになっています。
-
0
- root user
-
1…999
- system user
-
1000…65533
,65536…4294967294
- normal user
-
65534
- nobody user
カーネルはユーザ名を認識していないため、ユーザランドからカーネルとやりとりする際にはUIDを特定する必要があります。
/etc/passwd
ユーザ名とUIDを対応づけているファイルが/etc/passwd
です。
ユーザ名とUIDを1:1で対応づけているのではなく、その他のメタ情報も含まれます。
ファイルの中身は以下のようになっています。
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
# ...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
# ...
tsuzuki-takaaki:x:1000:1000:tsuzuki takaaki:/home/tsuzuki-takaaki:/bin/bash
各レコードが1ユーザを表しており、1レコードに7つのフィールドが含まれています。
各フィールドは以下を意味します。
<username>:<password>:<UID>:<GID>:<real_name>:<home_dir>:<shell>
-
username
: ユーザ名 -
password
: パスワード-
x
が入っていますが、ここに平文でパスワードが保存されることはほとんどなく、/etc/shadow
に暗号化されて保存されます。
-
UID
-
GID
: グループID -
real_name
: フルネームや連絡先 -
home_dir
: 対象ユーザのホームディレクトリ -
shell
: シェル- loginを許可しない、システムユーザなどは
/usr/sbin/nologin
が指定されます。
- loginを許可しない、システムユーザなどは
/etc/group
/etc/passwd
でユーザが管理されている一方で、/etc/group
では、グループが管理されています。
$ cat /etc/group
root:x:0:
daemon:x:1:
# ...
sudo:x:27:tsuzuki-takaaki
# ...
フィールドが4つ含まれており、フォーマットは以下です。
<groupname>:<password>:<GID>:<other_member>
新たなユーザを追加するごとに、そのユーザと同名のグループが自動的に追加されます。
仮にhoge
という名前のユーザを追加すると、デフォルトでhoge
という名前のグループが作成されて、そのグループに属することになります。
root@bc9413b0bcf2:/# adduser hoge
info: Adding user `hoge' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `hoge' (1001) ...
info: Adding new user `hoge' (1001) with group `hoge (1001)' ...
info: Creating home directory `/home/hoge' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for hoge
Enter the new value, or press ENTER for the default
Full Name []: hoge
Room Number []: 999
Work Phone []: 999
Home Phone []: 999
Other []: 999
Is the information correct? [Y/n] y
root@bc9413b0bcf2:/# tail -n 1 /etc/passwd
hoge:x:1001:1001:hoge,999,999,999,999:/home/hoge:/bin/bash
root@bc9413b0bcf2:/# tail -n 1 /etc/group
hoge:x:1001:
参考