あいてぃ煮込み

SIer(SE)が、ITインフラをメインに知識や実装手順を紹介するブログです。

CentOS7(RHEL7)ユーザの基本と/etc/passwdと/etc/shadowを解説

f:id:toto-blend:20210420132055p:plain

今回は、Linuxのユーザに関する基本知識と/etc/passwdと/etc/shadowについて解説します。

検証環境 仮想化ソフト:VMware workstation 15 Player
OS:CentOS7.8

ユーザについて

Linux同時に大勢のユーザが利用することを想定したマルチユーザシステムで設計されています。 ユーザの種類は大きく分けて3種類あります。

管理者ユーザ スーパーユーザとも呼ばれるあらゆるコマンドを実行できるユーザです。 Linuxでは、rootに該当します。
一般ユーザシステムにログインする"一般用"のユーザです。 一般ユーザには専用のディレクトリが提供され、制限の範囲内で作業が行えます。 rootとは異なる管理者権限を持った管理者ユーザを作成することもできます。
システムユーザ様々なシステムのプログラムを実行するための専用ユーザです。 ログインには使用しないでください。

LinuxにはUID(ユーザID)と呼ばれるユーザを識別するための一意の番号が ユーザごとに割り当てられます。 スーパーユーザ(root)は、必ず0が割り当てられます。

システムユーザのUID範囲は、OSによって499(RHEL)や999(Debian)で予約されている場合があります。

UID割り当てルール表
管理者ユーザ0
一般ユーザ100以上(CentOS7は1000以上から割り当て)
システムユーザ1~99(100以上が使われる例外もあり)

また、複数のユーザをまとめて管理する「グループ」という仕組みには一意の番号GID(グループID)が存在し ユーザは少なくとも一つのグループに所属する必要があります。

ユーザを作成した際にユーザ名と同じ名前のグループが自動的に作成されプライマリーグループに設定されます。 この仕様をユーザプライベートグループ(UPG)と呼びます。

グループには、プライマリーグループとセカンダリーグループが存在します。

プライマリーグループメインとなるグループで一つだけ設定することができます。
UPGが割り当てられていることが多いです。
セカンダリーグループプライマリー以外に所属するグループです。
複数のグループを設定することができます。

/etc/passwd

ユーザ一情報とユーザ一覧が「/etc/passwd」に記載されています。 /etc/passwdの見方は先頭から順に下記の通りです。

(例)root:x:0:0:root:/root:/bin/bash
:単位(フィールド)で情報が仕切れらています
第1フィールドユーザ名
第2フィールド暗号化パスワード
第3フィールドUID
第4フィールドGID
第5フィールドコメント
第6フィールドこのユーザのホームディレクトリのパス
第7フィールドこのユーザのログインシェル
$ vi /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
~省略~

ユーザ名 命名規則

  • 1文字以上32文字以下
  • 先頭の文字はハイフン(ー)は使用不可
  • 末尾のみ$(ドルマーク)の使用可
  • 大小英文字
  • 数字、ハイフン(ー)、アンダーバー(_)

UIDとGIDの範囲確認

Linuxは、ディストリビューションごとにUIDとGIDの割り当て予約範囲が異なります。 「/etc/login.defs」ファイルからシステムユーザと一般ユーザのUIDとGIDの割り当て範囲を確認することができます。

~省略~
$ vi /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
#
# 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
~省略~

ホームディレクト

ホームディレクトリとは、ユーザ作成時に自動生成されるディレクトリです。 基本的に「/home/ユーザ名」で生成されますが、rootのみ「/root」で生成されます。

自身のホームディレクトリでは、ディレクトリ内に存在するファイルやフォルダを自由に操作することができます。 また、ユーザ固有の設定情報も隠しファイルとして保存されます。

ホームディレクトリが存在しないとそのユーザはログインすることができません。

ログインシェルについて

ログインシェルとは、ログイン時に最初に起動されるシェルです。 Linuxの標準シェルは、bashですが他のシェルへの変更も可能です。

そもそもシェルとは、OSを操作するためのインターフェイスを提供するソフトウェアです。 CLI(コマンドラインインターフェイス)を操作するためのコマンド(コマンドラインシェル)やシェルスクリプトが、 シェルによる操作に該当します。

暗号化パスワードと/etc/shadow/

/etc/passwdは、どのユーザからもアクセス可能なため パスワード記載されている項目には「X」と表記されています。

セキュリティの観点から現在では、「/etc/shadow」というファイルでパスワードが管理されています。

/etc/shadowの見方は先頭から順に下記の通りです。

(例)root:$6$Uu4D6O41VMh/hrz9$SM~::0:99999:7:::
単位は日数
第1フィールドユーザ名
第2フィールド暗号化パスワード
第3フィールド1970/1/1から測定したパスワード最終変更日
第4フィールドパスワード変更可能までの最短期間
第5フィールドパスワードの有効期限。99999が設定されていると無期限。
第6フィールドパスワード期限切れ前警告開始日
第7フィールドパスワード期限切れからアカウント失効までの日数
第8フィールド1970/1/1から測定したアカウント有効期間
第9フィールドフラグ(現在は使用不可)
$ /etc/shadow
root:$6$Uu4D6O41VMh/hrz9$SM5Zoq6NHvKnnOSqNSvzoTWjJXdM19kMB27C3cRaIKXHzU0ICWf9shn
MF2ztIUw9NM4JZHqtB..xJ.UYaT/LP/::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
systemd-network:!!:18322::::::
dbus:!!:18322::::::
polkitd:!!:18322::::::
~省略~

暗号化パスワードについて

第2フィールドは、暗号化されたパスワードが記載されているほかにいくつかの属性があります。

  • * パスワードが設定されておらずログイン不可。主にシステムユーザに設定されています。
  • !! アカウントロック状態でログイン不可。ユーザ作成後にパスワードを設定していない場合も該当。

また、パスワードの暗号化に用いられるハッシュ関数にどれが使用されているか、 第2フィールドに記載されたパスワードの先頭を確認することで判別可能です。

ハッシュ値とは、元のデータから特定の計算方法で求めた固定長の値です。