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