Linuxユーザ作成
Linuxのユーザ作成
by nmin
Linux ユーザー作成方法
基本ユーザ
通常のログイン用ユーザーを作成する。
コマンドライン
sudo useradd -m testuser
sudo passwd testuser
-m:ホームディレクトリを作成するpasswd:ユーザーのパスワードを設定する
作成結果は以下で確認できる。
getent passwd testuser
例:
testuser:x:1001:1001::/home/testuser:/bin/bash
Ansible
- name: 基本ユーザーを作成
ansible.builtin.user:
name: testuser
create_home: true
shell: /bin/bash
state: present
パスワードも設定する場合:
- name: パスワード付きユーザーを作成
ansible.builtin.user:
name: testuser
password: "{{ 'Password123!' | password_hash('sha512') }}"
create_home: true
shell: /bin/bash
state: present
Ansibleの
passwordには、原則として平文ではなくハッシュ化されたパスワードを指定する。
パスワード期限付き
パスワード自体に有効期限を設定する。
例えば「90日ごとにパスワード変更を要求する」といった設定が可能。
コマンドライン
ユーザー作成:
sudo useradd -m testuser
sudo passwd testuser
パスワードの最大有効日数を90日に設定:
sudo chage -M 90 testuser
設定確認:
sudo chage -l testuser
主なオプション:
| オプション | 意味 |
|---|---|
-M 90 | パスワードの最大有効日数を90日にする |
-m 1 | パスワード変更後、最低1日は再変更不可 |
-W 7 | 期限切れ7日前から警告 |
-d 0 | 次回ログイン時にパスワード変更を強制 |
例えば、初回ログイン時にパスワード変更を強制する場合:
sudo chage -d 0 testuser
Ansible
90日でパスワードを期限切れにする場合:
- name: パスワード期限付きユーザーを作成
ansible.builtin.user:
name: testuser
create_home: true
shell: /bin/bash
password_expire_max: 90
state: present
初回ログイン時にパスワード変更を強制する場合:
- name: 初回ログイン時にパスワード変更を強制
ansible.builtin.command:
cmd: chage -d 0 testuser
有効期限あり
アカウントそのものに有効期限を設定する。
パスワード期限とは異なり、有効期限を過ぎると、そのユーザーアカウント自体が使用できなくなる。
パスワード期限
└─ パスワードの交換期限
アカウント有効期限
└─ ユーザー自体の利用期限
コマンドライン
2026年12月31日を有効期限に設定:
sudo useradd -m -e 2026-12-31 testuser
既存ユーザーに設定する場合:
sudo chage -E 2026-12-31 testuser
確認:
sudo chage -l testuser
Ansible
- name: 有効期限付きユーザーを作成
ansible.builtin.user:
name: testuser
create_home: true
shell: /bin/bash
expires: 1798646400
state: present
expires にはUnixエポック秒を指定する。
例えばLinuxでエポック秒を確認する場合:
date -d '2026-12-31' +%s
Ansibleでは日付文字列ではなくエポック秒を指定するため、変数化して管理する場合は可読性に注意する。
非対話シェル指定
SSHログインやターミナルからの対話操作をさせたくないユーザーには、ログインシェルとして /usr/sbin/nologin または /sbin/nologin を設定する。
主に以下のようなユーザーで利用する。
- WebサーバーやDBなどのミドルウェア実行ユーザー
- バッチ処理専用ユーザー
- 監視エージェント用ユーザー
- サービスアカウント
通常ユーザー
│
▼
/bin/bash
│
└── 対話ログイン可能
サービス用ユーザー
│
▼
/usr/sbin/nologin
│
└── 通常の対話ログイン不可
コマンドライン
sudo useradd -m -s /usr/sbin/nologin testuser
既存ユーザーのシェルを変更する場合:
sudo usermod -s /usr/sbin/nologin testuser
確認:
getent passwd testuser
例:
testuser:x:1001:1001::/home/testuser:/usr/sbin/nologin
/usr/sbin/nologinと/sbin/nologinのパスはディストリビューションによって異なる場合があるため、which nologinや/etc/shellsで確認する。
Ansible
- name: 非対話ログインユーザーを作成
ansible.builtin.user:
name: testuser
create_home: true
shell: /usr/sbin/nologin
state: present
ホームディレクトリも不要なサービスユーザーなら:
- name: サービス専用ユーザーを作成
ansible.builtin.user:
name: appuser
create_home: false
shell: /usr/sbin/nologin
system: true
state: present