言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. /etc/passwd と /etc/shadow

/etc/passwd と /etc/shadow

『/etc/passwd』と『/etc/shadow』は、Linux システムにおけるユーザー情報を管理する2つのテキストファイルです。/etc/passwd にはユーザー名・UID・ホームディレクトリなどの基本情報が格納され、すべてのユーザーが読み取れます。パスワードのハッシュは、より厳格な権限で保護された /etc/shadow に分離されています。各ファイルはコロン(:)区切りのフィールドで構成されており、getent passwd コマンドや passwd コマンドから間接的に操作するのが安全です。

構文

/etc/passwd は 7 つのフィールドをコロン(:)で区切った形式です。

ユーザー名:x:UID:GID:GECOS:ホームディレクトリ:ログインシェル

/etc/shadow は 9 つのフィールドをコロン(:)で区切った形式です。

ユーザー名:ハッシュ:最終変更日:最小日数:最大日数:警告日数:非活性日数:有効期限:予約

構文一覧

ファイルフィールド説明
/etc/passwdユーザー名ログイン名です。システム内で一意である必要があります。
パスワードプレースホルダー常に x が格納されます。実際のハッシュは /etc/shadow に保存されています。
UIDユーザーID です。0 が root、1000 以上が一般ユーザーです。
GIDプライマリグループ ID です。/etc/group の対応するグループと紐付きます。
GECOS任意のコメント欄です。フルネームや電話番号などを記載します。空でも構いません。
ホームディレクトリログイン後の作業ディレクトリのパスです。/home/ユーザー名 が一般的です。
ログインシェル起動するシェルのフルパスです。/sbin/nologin を指定するとログインを拒否できます。
/etc/shadowユーザー名/etc/passwd と同じユーザー名です。両ファイルのユーザー名で対応付けされます。
パスワードハッシュ$id$salt$hash 形式です。! または * のときはパスワード認証が無効です。
最終変更日パスワードを最後に変更した日を、1970-01-01 からの経過日数で表します。
最小変更間隔パスワード変更後、次の変更を許可するまでの最小日数です。0 は制限なしを意味します。
最大有効期間パスワードが有効な最大日数です。99999 は事実上の無期限です。
警告日数パスワード期限切れの何日前からユーザーへ警告を表示するかを指定します。
非活性日数期限切れ後、アカウントを無効化するまでの猶予日数です。空の場合は無効化しません。
アカウント有効期限アカウントが利用できる最終日を経過日数で指定します。空の場合は無期限です。

使用例

/etc/passwd の全エントリを表示します。すべてのユーザーが読み取れるファイルです。

cat /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
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
webmaster:x:1001:1001:Web Master,,,:/home/webmaster:/bin/bash
deploy:x:1002:1002:Deploy Account:/home/deploy:/bin/bash

特定ユーザーの行だけを抽出するには grep を使います。

grep '^webmaster:' /etc/passwd
webmaster:x:1001:1001:Web Master,,,:/home/webmaster:/bin/bash

getent passwd でも同じ情報を取得できます。getent/etc/passwd だけでなく LDAP 等の外部ディレクトリも含めて検索します。

getent passwd webmaster
webmaster:x:1001:1001:Web Master,,,:/home/webmaster:/bin/bash

/etc/shadow のパスワードハッシュを確認します。root 権限が必要です。

sudo grep '^deploy:' /etc/shadow
deploy:$6$rounds=5000$nacl8xkP3zQm1w2r$TvjZklM.../0:19800:0:99999:7:::

ハッシュは $id$salt$hash 形式です。上記の出力を分解すると次のようになります。

部分意味
$6$SHA-512ハッシュアルゴリズムの識別子です。
rounds=5000$5000ストレッチング回数です。多いほど総当たり攻撃に強くなります。
nacl8xkP3zQm1w2rソルトランダム文字列です。同じパスワードでも異なるハッシュを生成します。
TvjZklM.../0ハッシュ値パスワードから計算された実際のハッシュです。

useradd でユーザーを作成し、/etc/passwd に反映されたことを確認します。-m はホームディレクトリの同時作成、-c は GECOS フィールド、-s はログインシェルの指定です。

sudo useradd -m -c "System Operator" -s /bin/bash sysop

passwd コマンドでパスワードを設定します。対話的にパスワードの入力を求められます。

sudo passwd sysop
Changing password for user sysop.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

作成されたエントリを確認します。UID と GID は環境によって異なります。

getent passwd sysop
sysop:x:1003:1003:System Operator:/home/sysop:/bin/bash
sudo grep '^sysop:' /etc/shadow
sysop:$y$j9T$saltsaltsalt$hashhashhash:19800:0:99999:7:::

ログインシェルが /sbin/nologin に設定されたシステムアカウントの一覧を表示します。サービス用アカウント(bindaemon 等)は対話ログインを禁止するためにこの設定になっています。

grep '/sbin/nologin$' /etc/passwd
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
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin

usermod で既存ユーザーのログインシェルを /sbin/nologin に変更すると、そのユーザーの対話ログインを無効化できます。

sudo usermod -s /sbin/nologin appuser
getent passwd appuser
appuser:x:1002:1002:Application User:/home/appuser:/sbin/nologin

chage コマンドで /etc/shadow に記録されたパスワードポリシーを確認します。

sudo chage -l user1
Last password change                    : Mar 25, 2026
Password expires                        : never
Password inactive                       : never
Account expires                         : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

パスワードの最大有効期間を 90 日に、期限切れ前の警告を 14 日前からに変更します。

sudo chage -M 90 user1
sudo chage -W 14 user1

変更後のポリシーを確認します。

sudo chage -l user1
Last password change                    : Mar 25, 2026
Password expires                        : Jun 23, 2026
Password inactive                       : never
Account expires                         : never
Minimum number of days between password change : 0
Maximum number of days between password change : 90
Number of days of warning before password expires : 14

概要

『/etc/passwd』と『/etc/shadow』は、Linux のユーザー管理の中心となるファイルです。歴史的には /etc/passwd 単体にパスワードハッシュも格納されていましたが、このファイルはすべてのユーザーに読み取り権限があるため、総当たり攻撃のリスクがありました。現代の Linux ではハッシュを root のみ読み取れる /etc/shadow に分離する「シャドウパスワード」方式が標準になっています。パスワードのハッシュアルゴリズムは $id$ プレフィックスで識別でき、現在は SHA-512($6$)や yescrypt($y$)が広く使われています。これらのファイルを直接編集する場合は vipw / vipw -s コマンドを使うと、ファイルのロックと構文チェックが行われるため安全です。ユーザーの作成・変更には useradd / usermod を、グループ情報については グループ管理(/etc/group) を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。