Linuxのパスワード設定は、一見シンプルですが、特殊文字の扱いやPAMのポリシー、レスキュー環境特有の問題など、ハマりやすいポイントが複数あります。
この記事では、Linuxにパスワードを設定する際の注意点を、特殊文字の挙動・pam_pwqualityのルール・レスキュー環境での落とし穴の3つの視点から整理します。RHEL10 / Rocky Linux 10 を主な対象としますが、基本的な考え方はRHEL9・Ubuntuにも共通します。
・@始まりパスワードはcracklibが「記号を除去」して辞書照合する
・pwscoreコマンドで設定前にパスワード強度をテストできる
・レスキュー環境はUSキーボード配列がデフォルト(jp106要loadkeys)
・特殊文字は「途中か末尾」に入れると辞書ヒットを回避しやすい
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
特殊文字を使ったパスワードの注意点
特殊文字を使えばパスワードが強くなる、というのは半分正解です。特殊文字の「位置」と「種類」によって、意図した強度が得られないケースがあります。
1. @始まりはcracklibに辞書として照合される
RHEL系でデフォルト有効なcracklibは、パスワードの強度をチェックする際に記号を取り除いてから辞書照合を行います。たとえば
@linux2024 というパスワードを設定しようとすると、・cracklib が先頭の @ を除去
・
linux2024 → さらに末尾の数字も除去して linux と照合・辞書ワードと判定 → 「パスワードが簡単すぎます」で拒否
という流れになります。
$ passwd 新しいパスワード: @linux2024 BAD PASSWORD: The password is based on a dictionary word
特殊文字は単語の途中や末尾に挟むのが基本です。
2. ! はbashの履歴展開に干渉する
!(エクスクラメーション)はbashの履歴展開のトリガーです。シングルクォートで囲んでいる場合は問題ありませんが、ダブルクォートや引数としてそのまま渡す場合に予期しない展開が起きます。
# 対話的に passwd を実行する場合は問題なし(シェル展開が入らない) $ passwd 新しいパスワード: P@ssw0rd!2024 ← 直接入力なら安全 # echo等のコマンドでパイプする場合は注意 $ echo "P@ssw0rd!2024" | passwd --stdin ← !2024が履歴展開される可能性あり
!を含まないパスワードを使うのが安全です。3. $はシェル変数展開の対象
$もシェルの特殊文字です。ダブルクォートで囲んだ文字列中では変数として解釈されます。# NG: $HOMEが展開されてしまう echo "P@$$HOME!x" | passwd --stdin # OK: シングルクォートで展開を抑止 echo 'P@$HOME!x' | passwd --stdin
pam_pwqualityのデフォルトルール(RHEL10)
RHEL10ではpam_pwqualityがパスワードポリシーの主体です。デフォルトの設定ファイルは
/etc/security/pwquality.conf にあります。# /etc/security/pwquality.conf(RHEL10デフォルト抜粋) # minlen = 8 最低文字数(デフォルト8) # dcredit = 0 数字の最低要求数(0=要求なし) # ucredit = 0 大文字の最低要求数 # lcredit = 0 小文字の最低要求数 # ocredit = 0 記号の最低要求数 # dictcheck = 1 辞書チェック有効 # maxrepeat = 0 同一文字の連続上限(0=無制限) # maxsequence = 0 順次文字(abcdef等)の連続上限
1. minlen(最低文字数)
デフォルトは8文字です。実運用ではセキュリティポリシーに合わせて12文字以上に変更することが多いです。設定変更は
/etc/security/pwquality.conf の minlen 行のコメントアウトを外して数値を変更します。# /etc/security/pwquality.confを編集 minlen = 12
2. dictcheck(辞書チェック)
デフォルトで有効(1)です。英単語辞書と照合し、単純な単語ベースのパスワードを拒否します。先述の通り、特殊文字や数字は除去して照合されるため、単語の前後に記号を付けるだけでは回避できません。
3. maxrepeat(同一文字の連続上限)
デフォルトは0(無制限)ですが、3~4以上に設定するのが一般的なセキュリティ要件です。maxrepeat = 3 に設定すると、aaaa や 1111 のような4文字以上の連続が拒否されます。4. pwscoreコマンドで事前テストする
実際にpasswdを実行する前に、pwscoreコマンドでパスワードの強度スコアを確認できます。rootであってもポリシーに引っかかるパスワードを事前に確認するのに有効です。
# パスワードをパイプで渡してスコアを確認(0~100) $ echo "テストしたいパスワード" | pwscore 78 # 弱いパスワードの場合はエラーが返る $ echo "linux" | pwscore Password quality check failed: The password is based on a dictionary word
100に近いほど強度が高く、80以上を目安にするとよいでしょう。
また、maxrepeatはデフォルト0(無制限)ですが、設定変更した環境では「3~4文字以上の同一文字連続」が拒否されます。pwscoreはこの点も含めて総合判定してくれます。
なお、
pwscoreはrootでの実行でも辞書チェックが走ります。rootはpasswdの実行時にポリシーの警告を無視して設定できますが、pwscoreは警告どおりにエラーを返します。
レスキュー・chroot環境での落とし穴
RHEL10でrootパスワードを忘れた場合は、レスキューモードで起動してパスワードをリセットする手順が標準的です。詳しい手順は「RHEL10でrootパスワードを復旧する方法」を参照してください。
このレスキュー環境で特に注意が必要なのがキーボードレイアウトです。
1. レスキュー環境のキーボードはUSデフォルト
GRUBのレスキューモードやrd.breakで起動したinitramfsシェルは、キーボードレイアウトがUSキーボード(US QWERTY)のままです。日本語キーボード(JISキー配列)を使っている場合、記号キーの位置がUSと異なるため、入力したつもりの文字と実際に入力された文字が違うことがあります。
代表的なずれの例を示します。
| JISキーボードで押したキー | US配列で入力される文字 |
|---|---|
| @ キー | `(バッククォート) |
| [ キー | [(同じ) |
| : キー | ;(セミコロン) |
| ] キー | ](同じ) |
| \ キー(円マーク) | \(バックスラッシュ) |
@を使ったパスワードを設定しようとすると、実際にはバッククォートが入力されてしまいます。2. loadkeys jp106 でJIS配列に切り替える
レスキューシェルに入ったら、パスワードを変更する前に必ずloadkeysコマンドでキーボードレイアウトを設定してください。# JIS(日本語)キーボードに切り替え # loadkeys jp106 # 設定後にpasswdを実行 # passwd root
loadkeys jp106 を先に実行することで、JISキーボードの通りに文字が入力されるようになります。この手順を省略したまま記号を含むパスワードを設定すると、次回ログイン時に正しいパスワードを入力しても認証が通らないという事態になります。
3. chroot環境でのpwqualityチェック
rd.breakでinitramfsシェルに入り、chroot /sysrootでシステムをマウントした後にpasswdを実行する場合、pam_pwqualityがロードされているかどうかはchroot先の設定次第です。RHEL10では通常、chroot後もpam_pwqualityが有効であるため、弱いパスワードはrootでも警告が出る(警告は無視できますが、確認が必要)場合があります。
辞書ヒットを回避する推奨パスワードパターン
以上の注意点を踏まえた上で、実務で使いやすい安全なパスワードの作り方を紹介します。1. 特殊文字は「途中か末尾」に配置する
先述のとおり、cracklibは先頭の記号を除去して照合します。特殊文字は単語の途中に挿入するか、末尾に付けることで辞書ヒットを防げます。
・NG:
@linux2024(先頭の@を除去→linux→辞書ヒット)・OK:
lin@ux2024(途中に@→単語として照合できない)・OK:
linux@2024(末尾側に@→単語から離れるため有効)2. 辞書ヒットしにくいパスワード構成例
以下はpwscoreで80以上を取りやすい構成パターンです。| パターン | 例 | 特徴 |
|---|---|---|
| 略語+記号+数字 | Srv#Admin99 |
略語は辞書にない、記号で分断 |
| フレーズの頭文字+記号 | ImA$ysadm24 |
頭文字列は辞書ヒットしにくい |
| 数字+記号で単語を挟む | 24Lin#ux99 |
前後の数字で照合対象から外れやすい |
pwscoreで確認してから使用するのが安全です。
3. シェル特殊文字を避けるか、正しくエスケープする
スクリプトからpasswdを操作する場合は、以下の文字に注意が必要です。・!: bash履歴展開(ダブルクォート内で展開される)
・$: シェル変数展開(ダブルクォート内で展開される)
・`: コマンド置換(バッククォート)
・\: エスケープ文字
これらを含むパスワードをスクリプトで扱う場合は、必ずシングルクォートで囲むか、
printf '%s'を使ってエスケープを回避してください。
本記事のまとめ
Linuxのパスワード設定でよくある落とし穴をまとめます。| 場面 | 注意点 | 対策 |
|---|---|---|
| @始まりパスワード | cracklibが@を除去して辞書照合 | 記号は単語の途中か末尾に配置 |
| !や$を含むパスワード | シェルが変数・履歴として解釈 | シングルクォートで囲む |
| 設定前の強度確認 | passwdを実行して弾かれると時間ロス | pwscoreで事前テスト(80以上を目安) |
| レスキュー環境 | キーボードがUSデフォルト | loadkeys jp106 を先に実行 |
| maxrepeat | 同一文字の連続が制限に引っかかる | aaaaやxxxxは避ける |
/etc/security/pwquality.conf で確認・変更できます。セキュリティ要件に合わせて
minlenやmaxrepeatを適切に設定してください。なお、RHEL10でrootパスワードを完全に忘れてしまった場合の復旧手順については、「RHEL10でrootパスワードを復旧する方法」で詳しく解説していますので、合わせてご参照ください。
パスワード設定でつまずいているなら、基礎から体系的に学ぶほうが早いです
PAMの設定やレスキュー環境の操作は、現場で初めて直面すると焦ります。
20年以上Linuxサーバーを運用してきた経験をもとに、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます