QA@IT

【FreeRADIUSについて教えてください】mschapモジュールのlocal_cpwを使って、特殊な記号を含むパスワードを設定する方法を教えてください。

7861 PV

環境
OS:RHEL7.2
RADIUS:FreeRADIUS (3.0.13)
ユーザー管理DB:openLDAP (2.4.44)

FreeRADIUSとopenLDAPを使ってVPNのユーザー認証用サーバーを構築しました。
/etc/raddb/mods-available/mschapのlocal_cpwを使用し、対象ユーザーのパスワード有効期限切れの際に、パスワード更新要求画面を出力するようにしています。

local_cpw = "%{exec:/usr/local/script/passwd_update.sh %{mschap:User-Name} %{MS-CHAP-New-Cleartext-Password}}"

上記のシェルは、ldappasswdコマンドで%{mschap:User-Name}のパスワードを%{MS-CHAP-New-Cleartext-Password}に変更する処理をしています。

【困っていること】
パスワード更新の際に「&や$」などの記号が入ったパスワードを指定すると、パスワードに\が付与されて更新されてしまいます。
Ex) 「abc$def」を設定した場合 → 「abc\$def」

【やりたいこと】
パスワードに&などの記号を使用した際に、\が付与されていないパスワードに更新したいです。

設定方法についてご教示お願いいたします。

回答

【困っていること】
パスワード更新の際に「&や$」などの記号が入ったパスワードを指定すると、パスワードに\が付与されて更新されてしまいます。
Ex) 「abc$def」を設定した場合 → 「abc\$def」

記号の前に\を付与するのはシェル・エスケープ機能で、そういう「仕様」だと思います。これは主にセキュリティ上の理由だと思います。

【やりたいこと】
パスワードに&などの記号を使用した際に、\が付与されていないパスワードに更新したいです。

設定方法についてご教示お願いいたします。

設定では変えられないと思いますが、passwd_update.shの中で単に\を取り除けばいいのではないかと思います。例えば\&なら&に、\$なら$にするということです。

エスケープされる特殊文字の一覧。

static char const special[] = "\\'\"`<>|; \t\r\n()[]?#$^&*=";

引用元
rlm_exec.c

編集 履歴 (0)
  • ご回答ありがとうございます。
    やはりシェルの中で取るしかないんですね。
    因みにですが、mods-available/execのshell_escapeは、何のための設定かわかりますか?
    https://networkradius.com/doc/3.0.10/raddb/mods-available/exec.html
    -
  • やりたいことがこれで実現できるかと思い、shell_escapeをyesからnoに変更して試したのですが、結果は特に変わりませんでした。 -
  • 自分の理解ではshell_escapeのyes/noは環境変数の書式みたいな話で全然別の話だと思います。詳しくはmods-available/execと
    mods-available/echoのコメントを見てください。

    -
  • コメント見てみましたが、エスケープ文字の件とは別のようですね。
    シェルでの実現を検討してみます。
    ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。