FessのFileSearchでフォルダーツリーの起点を指定する

共有サーバー全体を展開せず、部門のフォルダーから探し始めたいときに使える設定です。Fess 15.10の開発版と、対応するFileSearchテーマのmainに変更が入りました。

テーマ設定にURLの接頭辞を入力する

管理画面の「システム → 全般 → テーマ設定」に、たとえば filesearch.roots=smb://server/share/Main Repository/Documents/|file:/data/My%20Docs/ と1行で入力します。区切りは | です。接頭辞は検索結果の url フィールドに合わせ、SMBの空白やファイルURLの %20 をそのまま使います。保存後に検索画面を開き直して確認します。Fessの再起動は不要です。初期値は未設定で、従来どおりホストが起点です。

ホームと検索結果のツリーが指定先から始まります。最大20件、各500文字、URLエンコード後の合計は2048バイトまでです。重複や親の起点に含まれる指定は整理され、検索条件が長すぎる指定も除外されます。検索結果の件数が0と判明した起点は表示されません。起点は表示の設定なので、検索の閲覧権限はロールで管理します。

Fess #3730 / fess-themes #97 / 15.10ドキュメント #626

Fessの監査ログでパスワード変更と管理APIの拒否を追う改善案

Fessの監査ログに、パスワード変更の実行者と対象、管理APIでのトークン拒否、アクセスのHTTPメソッドと対象IDを残す改善が提案されています。SSO失敗の記録も含め、運用時の確認点を整理します。

パスワードを変更した人と対象を区別する

PR #3723では、パスワード変更の成功時にUPDATE_PASSWORDを記録します。userが実行者、targetが変更対象のユーザー名で、パスワードやハッシュは含めません。共通のipとtimeも付与されます。

対象はログイン画面からの変更、POST /api/v2/auth/password、管理画面でのユーザー更新、管理REST APIのユーザー更新です。管理者の更新では、パスワード欄に空白以外の入力がある場合だけ記録します。新規ユーザー作成や変更失敗は、この新しい成功イベントの対象ではありません。

これにより、管理者によるリセットと本人による変更を実行者・対象の組み合わせで調べやすくなります。ログにユーザー名が残るため、閲覧権限と保存期間も運用に合わせて確認します。

管理APIのトークン拒否も調査対象にする

PR #3722では、/api/admin/*へのリクエストがアクセストークンの欠落・不明・権限不足で拒否された際に、ACCESS_DENIEDとパスを記録します。HTTP応答は引き続き401で、トークンそのものやそのパラメーターをログへ追加する変更ではありません。セッションがなければuserは「-」です。

以前紹介した管理画面のアクセス拒否から、管理REST APIのトークン確認へ記録対象を広げる提案です。一般のAPIすべてに同じ監査を追加するものではありません。

ACCESSにメソッドと対象IDを加える

PR #3724は、従来のpathとexecuteにmethodを追加し、リクエストパラメーターに空白以外のidがある場合はidも残します。たとえば削除操作なら、POSTかどうかと対象エントリーのIDを確認しやすくなります。フォーム全体を保存することはありません。

idはリクエストパラメーターから読み取ります。JSON本文の任意のIDまで抽出する仕組みではなく、multipartのアップロードではidの読み取りを省略します。リクエストが関連付いていない場合は従来の項目だけです。

ACCESSは処理の前に出るため、更新や削除が成功した証拠にはなりません。入力エラーやCSRF拒否まで含めた結果判定は、このPRの対象外です。対象IDと操作の試行を調べ、実際の成否は画面・API応答や別の記録と照合します。

SSO失敗は記録される経路を確認する

マージ済みのPR #3720では、SSOが設定され、認証処理がSsoLoginExceptionを投げた経路にLOGIN_FAILUREを追加します。SsoStateExceptionも対象ですが、認証ユーザーを取得できないためuserやclassはなく、例外メッセージや資格情報も入りません。

資格情報なしのアクセスや、IdPへのリダイレクト・SPNEGOの401チャレンジは失敗イベントにしません。SAMLやOIDCのプラグインが拒否をnullで返す経路も対象外なので、「すべてのSSO失敗を数えられる」とは扱わないでください。

初期値と確認手順

これらのPRはイベントごとの有効化スイッチを追加しません。変更を含むビルドと、監査ロガーの出力設定が必要です。ソースの標準設定ではfess.log.auditはINFOでaudit.logへ出力します。

app.audit.log.formatの初期値は空です。この場合、FESS_APP_TYPE=dockerならECS形式、それ以外ならLTSV形式になります。明示的にecsを指定した場合もECSです。ECSではlabels.action、labels.user、labels.targetなどの項目を確認し、LTSVではaction、user、targetなどのフィールドを確認します。script.audit.log.enabledはスクリプト実行用で、今回のイベントを切り替える設定ではありません。

検証環境で、本人のパスワード変更と管理者のリセット、無効なトークンによる管理APIアクセスを順に試し、期待するイベントと対象が記録されることを確認します。ACCESSの集計処理は追加フィールドと、idが存在しないレコードの両方を扱えるようにします。既存環境で出力を変更している場合は、標準値だけで判断せず実際のログを確かめてください。

関連PR

Fessの英単語検索で大文字と語尾を考慮する曖昧検索の修正案

Fessで英単語の入力ミスを含む検索をすると、小文字なら見つかるのに先頭を大文字にすると見つからない場合があります。PR #3726は、通常の検索に自動で加わる曖昧検索を、検索語の解析後に行う修正案です。

入力した文字列と索引の語をそろえる

従来の処理では、索引側で小文字化や語尾処理を受けた語に対して、入力した文字列をそのまま使って編集距離を計算していました。修正案は検索解析器を通してから曖昧一致させます。PRの検証用索引では、fabianに対するFbian、onboardingに対するOnbordingのような入力で改善が報告されています。件数や改善幅は索引と解析器によるもので、すべての環境で同じ結果になる保証はありません。

foo-barのように複数のトークンへ分かれる入力は、曖昧検索部分でもすべてのトークンを要求します。一部だけの一致によって候補が広がりすぎることを抑えるためです。

設定の初期値は変わらない

新しい有効化設定はありません。修正を含む検証ビルドで、既存のquery.boost.fuzzy.*を引き続き使います。標準値は次のとおりです。

query.boost.fuzzy.min.length=4
query.boost.fuzzy.title=0.01
query.boost.fuzzy.content=0.005
query.boost.fuzzy.title.fuzziness=AUTO
query.boost.fuzzy.content.fuzziness=AUTO

titleとcontentの両方で、prefix_lengthは0、expansionsは10、transpositionsはtrueです。最小長4の判定は入力文字列の長さですが、AUTOが許す編集距離は解析後の各トークンの長さに応じて決まります。短くなった語では許される編集回数も変わりえます。

日本語の誤字訂正を追加する変更ではない

漢字・ひらがな・カタカナ・ハングルを含む入力には、この暗黙の曖昧検索を追加しません。日本語などの誤字訂正を新たに提供する機能ではありません。明示的なfoo~1の構文、フレーズ検索、言語別フィールドの処理も今回の変更対象外です。解析後にストップワードだけになる入力は、この部分から近似語のヒットを得ません。

検証時は同じ索引で、小文字と大文字、語尾変化、ハイフン入り、正しく綴った単語を比較します。通常の単語にも低スコアの候補が増える可能性があり、上位順位が常に同じとは限りません。適合率と検索結果の順序も確認してから導入を判断します。

関連PR