Linuxパスワード設定の注意点|特殊文字・PAMルール・レスキュー環境の落とし穴


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxトラブルシューティング > Linuxパスワード設定の注意点|特殊文字・PAMルール・レスキュー環境の落とし穴
「パスワードを設定したのに、ログインできない」「pwqualityに弾かれて、どんなパスワードを設定すればいいかわからない」

Linuxのパスワード設定は、一見シンプルですが、特殊文字の扱いやPAMのポリシー、レスキュー環境特有の問題など、ハマりやすいポイントが複数あります。

この記事では、Linuxにパスワードを設定する際の注意点を、特殊文字の挙動・pam_pwqualityのルール・レスキュー環境での落とし穴の3つの視点から整理します。RHEL10 / Rocky Linux 10 を主な対象としますが、基本的な考え方はRHEL9・Ubuntuにも共通します。
この記事のポイント
・@始まりパスワードはcracklibが「記号を除去」して辞書照合する
・pwscoreコマンドで設定前にパスワード強度をテストできる
・レスキュー環境はUSキーボード配列がデフォルト(jp106要loadkeys)
・特殊文字は「途中か末尾」に入れると辞書ヒットを回避しやすい

Linuxパスワード設定の注意点|特殊文字・PAMルール・レスキュー環境の落とし穴

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

特殊文字を使ったパスワードの注意点

特殊文字を使えばパスワードが強くなる、というのは半分正解です。
特殊文字の「位置」と「種類」によって、意図した強度が得られないケースがあります。

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

スクリプトからpasswdを呼び出す場合は、パスワード文字列は必ずシングルクォートで囲む習慣をつけてください。

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.confminlen 行のコメントアウトを外して数値を変更します。

# /etc/security/pwquality.confを編集 minlen = 12

2. dictcheck(辞書チェック)

デフォルトで有効(1)です。英単語辞書と照合し、単純な単語ベースのパスワードを拒否します。
先述の通り、特殊文字や数字は除去して照合されるため、単語の前後に記号を付けるだけでは回避できません。

3. maxrepeat(同一文字の連続上限)

デフォルトは0(無制限)ですが、3~4以上に設定するのが一般的なセキュリティ要件です。
maxrepeat = 3 に設定すると、aaaa1111 のような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

スコアが50以上であれば、多くのシステムで問題なく設定できます。
100に近いほど強度が高く、80以上を目安にするとよいでしょう。

また、maxrepeatはデフォルト0(無制限)ですが、設定変更した環境では「3~4文字以上の同一文字連続」が拒否されます。pwscoreはこの点も含めて総合判定してくれます。

なお、pwscoreはrootでの実行でも辞書チェックが走ります。rootはpasswdの実行時にポリシーの警告を無視して設定できますが、pwscoreは警告どおりにエラーを返します。

Linuxパスワード設定の注意点|特殊文字・PAMルール・レスキュー環境の落とし穴 - 解説1

レスキュー・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パスワード設定の注意点|特殊文字・PAMルール・レスキュー環境の落とし穴 - まとめ

本記事のまとめ

Linuxのパスワード設定でよくある落とし穴をまとめます。
場面 注意点 対策
@始まりパスワード cracklibが@を除去して辞書照合 記号は単語の途中か末尾に配置
!や$を含むパスワード シェルが変数・履歴として解釈 シングルクォートで囲む
設定前の強度確認 passwdを実行して弾かれると時間ロス pwscoreで事前テスト(80以上を目安)
レスキュー環境 キーボードがUSデフォルト loadkeys jp106 を先に実行
maxrepeat 同一文字の連続が制限に引っかかる aaaaやxxxxは避ける
パスワードポリシーの詳細設定は /etc/security/pwquality.conf で確認・変更できます。
セキュリティ要件に合わせてminlenmaxrepeatを適切に設定してください。

なお、RHEL10でrootパスワードを完全に忘れてしまった場合の復旧手順については、「RHEL10でrootパスワードを復旧する方法」で詳しく解説していますので、合わせてご参照ください。

パスワード設定でつまずいているなら、基礎から体系的に学ぶほうが早いです

PAMの設定やレスキュー環境の操作は、現場で初めて直面すると焦ります。
20年以上Linuxサーバーを運用してきた経験をもとに、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。