アカウント管理について
超基礎
/etc/passwd
でデフォルトおよび作成したアカウントは管理されている。
/etc/shadow
にパスワードがハッシュ化されて記載されている。
アカウントの作成・削除・ロック
アカウントの作成
bash
$sudo useradd -m -g "グループ" -s "ログインシェル" -d "ホームディレクトリ" -p $(openssl passwd "パスワード") "ユーザー名"
オプション(注意事項あり)
オプション | 概要 | 例 |
---|---|---|
-m | ホームディレクトリ作成 | -m |
-d | ホームディレクトリの指定 | -d /home/user01 |
-s | ログインシェルの指定 | -s /bin/bash |
-u | ユーザIDを指定 | -u 1500 |
-g | プライマリグループの作成 | -g group01 |
-e | アカウントの有効期限 | -e 2025-12-31 |
-r | システムユーザとして作成 | -r |
-p | 暗号化済みのパスワード指定 | -p $(openssl passwd password) |
"-p"オプションはセキュリティ上非推奨(下記参照)
このオプションの引数に渡すのは「ハッシュ化されたパスワード」です。
非推奨の理由
- コマンド履歴
~/.bash_history
に平文がのこってしまう- 実行中に
ps aux
で他のユーザーから見えてしまう推奨
useradd
コマンド上ではパスワードをせずにpasswd
コマンドを使用するcommand$sudo useradd -m -s /bin/bash user01 $sudo passwd user01
アカウントの削除
bash
sudo userdel -r "ユーザー名"
オプション
オプション | 概要 | 例 |
---|---|---|
-r | ユーザのホームディレクトリごと削除 | -r |
-f | ログイン中でもマウント中でも強制削除 | -f |
アカウントのロック
方法1(passwdコマンド)
bash
$sudo passwd -l "ユーザー名"
オプション
オプション | 概要 | 例 |
---|---|---|
-l | アカウントのロック | -l |
-u | ロック解除 | -u |
ロック確認
/etc/shadow
の対象ユーザが以下のように!!(エクスクラメーションが2つ)表示されていればロックされている
bash
user1:!!$6$adfsaf7ds858s9d.$fsvHgyiY8YR6...(以降略)
方法2(usermodコマンド)
bash
$sudo usermod -L "ユーザー名"
オプション(infoあり)
オプション | 概要 | 例 |
---|---|---|
-L | アカウントのロック | -L |
-U | ロック解除 | -U |
-s | ログインシェルの変更 | -s /sbin/nologin |
通常のpasswd
やusermod
によるロックだとsu
コマンドでの切り替えは行えてしまう。
ログインシェルの変更が一番安全だと思われる。
ロック確認
/etc/shadow
の対象ユーザが以下のように!(エクスクラメーションが1つ)表示されていればロックされている
/bash
$sudo getent shadow user01
user1:!$6$adfsaf7ds858s9d.$fsvHgyiY8YR6...(以降略)
パスワード管理について
/etc/shadow
について
shadowファイルはハッシュ化されたパスワードが格納されています
ハッシュの種類については$で囲まれた中の数字を見れば判断できる
bash
$sudo getent shadow user01
user1:!$6$adfsaf7ds858s9d.$fsvHgyiY8YR6...(以降略)
ハッシュの種類一覧
数字 | ハッシュアルゴリズム |
---|---|
1 | MD5 |
$5$ | SHA256 |
$6$ | SHA512 |
パスワードの詳細設定
デフォルト値
新規アカウント作成時に/etc/default/useradd
と/etc/login.defs
と/etc/pam.d/system-auth
及び/etc/security/pwquality.conf
のデータをもとにパスワードの詳細設定がなされます。
/etc/default/useradd
項目 | 説明 |
---|---|
GROUP | ユーザ作成時のグループID |
HOME | ホームディレクトリ |
INACTIVE | パスワード使用期限が過ぎてから、BANまでの猶予日数 |
EXPIRE | アカウント失効日 |
SHELL | ログインシェル |
SKEL | ファイルの雛形があるディレクトリ |
CREATE_MAIL_SPOOL | メールスプールの作成 |
/etc/login.defs
項目 | 説明 |
---|---|
PASS_ALWAYS_WARN | パスワードが弱いときの警告の有無 |
PASS_MAX_DAYS | 同じパスワードが使い続けられる最大日数 |
PASS_MIN_DAYS | パスワード変更間隔の最短日数 |
PASS_WARN_AGE | パスワード変更期限の何日前から警告をだすか |
/etc/pam.d/system-auth
項目 | 説明 |
---|---|
minlen | パスワードの最小文字数 |
remenber | 過去何世代と異なるものにするか |
deny | 入力を何回間違えたらアカウントロックするか |
unlock_time | アカウントロックする時間(秒) |
miniclass | パスワードに最低限含めるべき文字の種類 |
maxsequence | '12345', 'abcde'などの連続した並びが何文字以上続いたらパスワードを破棄するかを指定 |
/etc/security/pwquality.conf
項目 | 説明 |
---|---|
difok | 過去何世代と異なるものにするか |
minlen | パスワードの最小文字数 |
dcredit | パスワードに含むべき数字の数(負数で指定) |
ucredit | パスワードに含むべきアルファベットの大文字の数(負数で指定) |
lcredit | パスワードに含むべきアルファベットの小文字の数(負数で指定) |
ocredit | パスワードに含むべき数字・アルファベット以外の数(負数で指定) |
dictcheck | cracklibの辞書に存在するパスワードを設定不可に(1:有効) |
ユーザ毎にパスワード設定する方法
ユーザ毎にパスワードの詳細設定をするにはchage
コマンドを使用します
bash
$chage -l user01
オプション
オプション | 概要 | 例 |
---|---|---|
-l | ユーザのパスワード情報一覧 | -l user01 |
-m | パスワード変更最短日数 | -m 60 |
-M | パスワードの有効期限 | -M 60 |
-W | 有効期限前の警告開始日数 | -W 5 |
-I | パスワード期限切れ後の無効化猶予日数 | -I 3 |
-E | アカウントの有効期限 | -E 2025/12/25 |