Linuxのアカウント管理
Linuxでは、利用者やサービスを識別するためにユーザーアカウントを使用します。また、複数のユーザーをまとめて権限を管理するためにグループを使用します。
アカウント管理では、主に次の操作を行います。
- ユーザーアカウントの作成・変更・削除
- グループの作成・変更・削除
- パスワードの設定とロック
- パスワードやアカウントの有効期限の設定
- UID、GID、ホームディレクトリ、ログインシェルの管理
これらの情報は、主に次のファイルに保存されます。
| ファイル | 保存される主な情報 |
|---|---|
/etc/passwd | ユーザー名、UID、GID、ホームディレクトリ、ログインシェル |
/etc/shadow | パスワードハッシュ、パスワードやアカウントの有効期限 |
/etc/group | グループ名、GID、所属ユーザー |
/etc/gshadow | グループパスワードやグループ管理者など |
/etc/skel | 新しいユーザーのホームディレクトリへコピーするひな型ファイル |
ユーザーアカウントとUID
Linuxはユーザーを、ユーザー名ではなくUID(User ID)で識別します。
例えば、taroというユーザー名を変更しても、UIDが変わらなければファイルの所有者としては同じユーザーとして扱われます。
現在のユーザーのUIDや所属グループは、idコマンドで確認できます。
id特定のユーザーを指定することもできます。
id taro実行結果の例は次のとおりです。
uid=1001(taro) gid=1001(taro) groups=1001(taro),10(wheel)uid:ユーザーのUIDgid:プライマリグループのGIDgroups:所属しているすべてのグループ
UIDの割り当て範囲はディストリビューションや設定によって異なるため、「一般ユーザーは必ず1000以上」などと断定しないように注意してください。
プライマリグループと補助グループ
ユーザーには、次の2種類のグループがあります。
プライマリグループ
ユーザーが必ず1つ所属する基本グループです。
プライマリグループのGIDは、/etc/passwdの第4フィールドに記録されます。ユーザーがファイルを新規作成したとき、そのファイルのグループ所有者として通常使用されます。
補助グループ
プライマリグループ以外に追加で所属するグループです。
補助グループの所属情報は、主に/etc/groupの第4フィールドに記録されます。
ユーザーアカウントを管理するコマンド
useradd――ユーザーの作成
useraddコマンドは、新しいユーザーアカウントを作成します。
useradd ユーザー名代表的なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
-u UID | UIDを指定する |
-g グループ | プライマリグループを指定する |
-G グループ一覧 | 補助グループを指定する |
-d ディレクトリ | ホームディレクトリを指定する |
-m | ホームディレクトリを作成する |
-s シェル | ログインシェルを指定する |
-c コメント | コメント欄を設定する |
-e 日付 | アカウントの有効期限を指定する |
-r | システムアカウントを作成する |
-D | useraddのデフォルト値を表示・変更する |
例えば、ホームディレクトリを作成し、ログインシェルと補助グループを指定する場合は次のように実行します。
useradd -m -s /bin/bash -G developers tarouseraddによってホームディレクトリを自動作成するかどうかは、ディストリビューションや設定によって異なります。確実に作成する場合は、-mを明示します。
ユーザー作成後は、passwdコマンドでパスワードを設定します。
passwd tarousermod――ユーザー情報の変更
usermodコマンドは、既存のユーザーアカウントを変更します。
usermod オプション ユーザー名代表的なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
-l 新ユーザー名 | ログイン名を変更する |
-u UID | UIDを変更する |
-g グループ | プライマリグループを変更する |
-G グループ一覧 | 補助グループを変更する |
-a -G グループ一覧 | 既存の所属を維持したまま補助グループへ追加する |
-d ディレクトリ | ホームディレクトリのパスを変更する |
-m | -dと併用してホームディレクトリの内容を移動する |
-s シェル | ログインシェルを変更する |
-L | パスワードをロックする |
-U | パスワードのロックを解除する |
ユーザーを補助グループへ追加する場合は、次のように実行します。
usermod -aG developers taro特に重要なのが、-aGと-Gの違いです。
usermod -G developers taro-aを付けずに-Gを使用すると、現在の補助グループ一覧が指定した内容に置き換えられます。既存の所属グループを維持して追加する場合は、-aGを使用します。
ホームディレクトリの名前と内容を変更する場合は、次のように実行します。
usermod -d /home/jiro -m taroなお、-lでユーザー名を変更しただけでは、ホームディレクトリの名前は自動的には変更されません。
userdel――ユーザーの削除
userdelコマンドは、ユーザーアカウントを削除します。
userdel taro通常、オプションなしではホームディレクトリやメールスプールなどは残ります。
ホームディレクトリなどもあわせて削除する場合は、-rオプションを使用します。
userdel -r taroただし、そのユーザーが所有しているすべてのファイルが自動的に削除されるわけではありません。ホームディレクトリ以外に残った所有ファイルは、必要に応じてfindコマンドなどで確認します。
グループを管理するコマンド
groupadd――グループの作成
新しいグループを作成します。
groupadd developersGIDを指定する場合は、-gオプションを使用します。
groupadd -g 2000 developersgroupmod――グループ情報の変更
既存のグループを変更します。
groupmod オプション グループ名代表的なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
-n 新グループ名 | グループ名を変更する |
-g GID | GIDを変更する |
グループ名を変更する例は次のとおりです。
groupmod -n development developersgroupdel――グループの削除
グループを削除します。
groupdel developers通常、既存ユーザーのプライマリグループとして使用されているグループは、そのままでは削除できません。先にユーザーのプライマリグループを変更する必要があります。
gpasswd――グループパスワードの管理
gpasswdは、グループのメンバーや管理者、グループパスワードを管理するコマンドです。設定は主に/etc/groupと/etc/gshadowへ反映されます。
書式: gpasswd [オプション] グループ名
| オプション | 説明 | 実行例 |
|---|---|---|
-a ユーザー | ユーザーをグループへ追加 | gpasswd -a user1 sales |
-d ユーザー | ユーザーをグループから削除 | gpasswd -d user1 sales |
-A ユーザー一覧 | グループ管理者を設定 | gpasswd -A user1 sales |
-M ユーザー一覧 | グループメンバーを一括設定 | gpasswd -M user1,user2 sales |
| オプションなし | 指定グループのパスワードを設定 | gpasswd sales |
通常、メンバーの追加・削除には管理者権限が必要です。-Mは既存のメンバー一覧を置き換える点に注意します。
newgrpコマンド――プライマリグループを一時的に変更
newgrpは、新しいシェルを起動し、そのシェルで使用するプライマリグループを一時的に変更するコマンドです。
書式: newgrp [-] [グループ名]
| 指定例 | 動作 |
|---|---|
newgrp developers | プライマリグループをdevelopersへ変更 |
newgrp - developers | ログイン時のように環境を初期化して変更 |
newgrp | ログイン時のプライマリグループへ戻す |
変更後は、原則として新規作成するファイルのグループ所有者にも反映されます。
所属していないグループへ変更する場合、/etc/gshadowに設定されたグループパスワードを要求されることがあります。
起動したシェルをexitで終了すると、変更前のグループ環境へ戻ります。
パスワードの管理
passwdコマンド
passwdコマンドは、ユーザーのパスワードを設定・変更するために使用します。
一般ユーザーが引数なしで実行すると、自分自身のパスワードを変更します。
passwd管理者は、ユーザー名を指定してほかのユーザーのパスワードを変更できます。
passwd taro代表的なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
-l | パスワードをロックする |
-u | パスワードのロックを解除する |
-S | パスワードの状態を表示する |
-e | パスワードを直ちに期限切れにする |
パスワードをロックする場合は、次のように実行します。
passwd -l taro解除する場合は、次のように実行します。
passwd -u taropasswd -lやusermod -Lは、基本的にパスワードを使用した認証をロックする操作です。SSH公開鍵認証など、パスワード以外のログイン方法まで必ず無効になるわけではありません。
パスワードとアカウントの有効期限
chageコマンド

chageコマンドは、パスワードの有効期限やアカウントの有効期限を確認・変更するために使用します。
現在の設定を確認するには、-lオプションを使用します。
chage -l taro代表的なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
-d 日付 | パスワードの最終変更日を設定する |
-m 日数 | パスワードを再変更できるまでの最短日数を設定する |
-M 日数 | パスワードの最長有効日数を設定する |
-W 日数 | 期限切れ前の警告日数を設定する |
-I 日数 | パスワード期限切れ後にアカウントを無効にするまでの日数を設定する |
-E 日付 | アカウント自体の有効期限を設定する |
-l | 現在の設定を一覧表示する |
次回ログイン時にパスワード変更を要求する場合は、最終変更日を0に設定します。
chage -d 0 taroパスワードの有効期限と、アカウント自体の有効期限は別の設定です。
-M:パスワードの有効期限-E:アカウント自体の有効期限
この違いは試験でも重要です。
アカウント情報を保存するファイル
/etc/passwd
/etc/passwdは、ユーザーアカウントの基本情報を保存するファイルです。
1行につき1ユーザーが記録され、コロン(:)で区切られた7個のフィールドで構成されます。
taro:x:1001:1001:Taro User:/home/taro:/bin/bash| 番号 | フィールド | 説明 |
|---|---|---|
| 1 | ユーザー名 | ログインに使用する名前 |
| 2 | パスワード | 通常はxが入り、実際の情報は/etc/shadowに保存される |
| 3 | UID | ユーザーID |
| 4 | GID | プライマリグループのGID |
| 5 | コメント | 氏名や説明など |
| 6 | ホームディレクトリ | ログイン後のホームディレクトリ |
| 7 | ログインシェル | ログイン時に起動するシェル |
シャドウパスワードを使用する一般的な環境では、第2フィールドにはxが入ります。ただし、環境やアカウントの状態によっては、必ずしもxとは限りません。
/etc/shadow

/etc/shadowは、パスワードハッシュと、パスワード・アカウントの有効期限を保存するファイルです。
パスワードハッシュを一般ユーザーから保護するため、/etc/passwdよりも厳しいアクセス権が設定されています。
1行につき1ユーザーが記録され、コロン区切りの9個のフィールドで構成されます。
taro:$6$...:20000:0:99999:7:::| 番号 | フィールド | 説明 |
|---|---|---|
| 1 | ユーザー名 | /etc/passwdのユーザー名に対応する |
| 2 | パスワード | パスワードハッシュやロック状態 |
| 3 | 最終変更日 | 1970年1月1日からパスワードを最後に変更した日までの日数 |
| 4 | 最短変更間隔 | 再度パスワードを変更できるまでの日数 |
| 5 | 最長有効日数 | パスワードを使用できる最長日数 |
| 6 | 警告期間 | 期限切れ前に警告を表示する日数 |
| 7 | 非アクティブ期間 | パスワード期限切れ後にアカウントを無効化するまでの日数 |
| 8 | アカウント有効期限 | 1970年1月1日から有効期限までの日数 |
| 9 | 予約フィールド | 将来の拡張用 |
第2フィールドの先頭に!が付いている場合や、*など有効なパスワードハッシュではない値が設定されている場合は、通常、そのパスワードを使った認証はできません。
ただし、これは必ずしもアカウントへのすべてのログイン方法を無効にするという意味ではありません。
/etc/group
/etc/groupは、グループ情報を保存するファイルです。
1行につき1グループが記録され、コロン区切りの4個のフィールドで構成されます。
developers:x:2000:taro,jiro| 番号 | フィールド | 説明 |
|---|---|---|
| 1 | グループ名 | グループの名前 |
| 2 | グループパスワード | 通常はxなどが入る |
| 3 | GID | グループID |
| 4 | メンバー | 補助グループとして所属するユーザーの一覧 |
第4フィールドには、主に補助グループとして所属するユーザーが記録されます。ユーザーのプライマリグループは、/etc/passwdの第4フィールドで確認します。
/etc/gshadow
/etc/gshadowは、/etc/groupに対応するシャドウファイルです。
グループパスワード、グループ管理者、グループメンバーなどの情報を保存します。/etc/shadowと同様に、一般ユーザーからは読み取れないよう厳しいアクセス権が設定されます。
試験対策では、次の対応関係を押さえておきましょう。
- ユーザー情報:
/etc/passwd - ユーザーのパスワード情報:
/etc/shadow - グループ情報:
/etc/group - グループの保護された情報:
/etc/gshadow
アカウント情報の確認
getentコマンド
getentコマンドを使用すると、システムが参照しているアカウントデータベースから情報を取得できます。
ユーザー情報を一覧表示する場合は、次のように実行します。
getent passwd特定のユーザーだけを確認することもできます。
getent passwd taroグループ情報を確認する場合は、次のように実行します。
getent group developersローカルファイルだけを直接確認するcat /etc/passwdとは異なり、getentはシステムに設定されたアカウント情報の参照方法に従って結果を表示します。
新規ユーザー作成時のデフォルト設定
/etc/skel
/etc/skelは、新しいユーザーのホームディレクトリへコピーするひな型ファイルを保存するディレクトリです。
例えば、次のようなファイルが配置されています。
/etc/skel/.bash_profile
/etc/skel/.bashrc
/etc/skel/.bash_logoutuseradd -mなどによってホームディレクトリが作成されると、通常、/etc/skelの内容が新しいホームディレクトリへコピーされます。
/etc/skelを変更しても、すでに存在するユーザーのホームディレクトリには自動反映されません。
/etc/default/useradd
/etc/default/useraddには、useraddが使用するデフォルト値が保存されます。
代表的な設定には、次のようなものがあります。
- ホームディレクトリの基準となるディレクトリ
- デフォルトのログインシェル
- アカウントの有効期限
- パスワード期限切れ後の非アクティブ期間
/etc/skelの場所
現在のデフォルト値は、次のコマンドでも確認できます。
useradd -D/etc/login.defs
/etc/login.defsは、アカウント作成やログインに関する各種デフォルト値を定義するファイルです。
代表的な設定項目は次のとおりです。
| 設定項目 | 説明 |
|---|---|
PASS_MAX_DAYS | パスワードの最長有効日数 |
PASS_MIN_DAYS | パスワードの最短変更間隔 |
PASS_WARN_AGE | 期限切れ前の警告日数 |
UID_MIN、UID_MAX | 一般ユーザーに割り当てるUIDの範囲 |
GID_MIN、GID_MAX | 一般グループに割り当てるGIDの範囲 |
これらは主に、新しいアカウントを作成するときの初期値として使用されます。
/etc/login.defsを変更しても、既存ユーザーの/etc/shadowなどの設定が自動的に変更されるわけではありません。既存ユーザーのパスワード有効期限を変更する場合は、chageなどを使用します。
システムアカウント
Linuxでは、実際の利用者だけでなく、サービスやデーモンを実行するためのシステムアカウントも使用されます。
システムアカウントを作成する場合は、useradd -rを使用します。
useradd -r serviceuserサービス専用アカウントでは、対話的なログインを必要としないことが一般的です。その場合は、ログインシェルとして/usr/sbin/nologinなどを指定します。
useradd -r -s /usr/sbin/nologin serviceuser/usr/sbin/nologinのパスはディストリビューションによって異なる場合があります。
システムアカウントでは、次のような設定が一般的です。
- システムアカウント用のUIDを使用する
- パスワードをロックする
- ログインシェルを
nologinにする - 必要最小限のグループだけに所属させる
UIDの具体的な範囲は環境によって異なるため、固定値ではなく/etc/login.defsなどの設定を確認します。