技術メモのかけら

内容はもとより調べたことすら忘れてしまうので個人的な技術メモを残しているブログです。とにかく短く、結論だけ書いていきます。

groupaddとuseraddのrオプションでシステムアカウントを作成する

groupaddとuseraddにrオプションを指定するとsystemアカウントになる

-r, --system create a system account

# groupadd -r r_group
# groupadd -r r_group2
# grep r_group /etc/group
r_group:x:998:
r_group2:x:997:

IDが振られる範囲は/etc/login.defsのSYS_GID_MINSYS_GID_MAXで定義されているが、IDは降順に振られるようである

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999

普通のグループはGID_MINGID_MAXで定義されている通り、1000以降が振られる

# groupadd normal_group
# grep group /etc/group
normal_group:x:1000:

ユーザも同じ感じ

# useradd -r -g r_group r_user
# useradd -g normal_group normal_user
# grep user /etc/passwd
r_user:x:999:998::/home/r_user:/bin/bash
normal_user:x:1000:1000::/home/normal_user:/bin/bash

IDが振られる範囲は同じく/etc/login.defsで定義されている。

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999

普通のユーザとの違いは、/etc/shadowを見るとパスワードの有効期限がブランクになっている

r_user:!!:17528::::::
normal_user:!!:17528:0:99999:7:::

また、/etc/login.defsのCREATE_HOMEの設定を無視してホームディレクトリが作成されない

$ ls /home
normal_user

ただ、ログインできてしまう。
システムユーザとして使用するには、ログインシェルは使えないようにしたい。
ログインさせないために/sbin/nologinは知ってたけど、メッセージを返さない/bin/falseというのもあるらしい

# /sbin/nologin
This account is currently not available.
# echo $?
1
# /bin/false
# echo $?
1

本番環境ではメッセージを返さない/bin/falseデバッグ環境は /sbin/nologinとか使い分けると良さそう。

#  useradd -r -g r_group -s /bin/false r_user