Repository navigation
fix(nginx): Shibboleth ログインスクリプトを login.py に戻し、PHP を取り除く(arm64 対応を含む) - #1936
Conversation
d6d92a5 / 3de23b2(fix build error)で nginx/Dockerfile が旧 nginx/Dockerfile.arm64 と同じ内容に置き換わり、7e536799c で行った login.php → login.py の切り替えが失われていた。weko.conf の /secure/、 supervisord.conf の fcgiwrap、WEKO_ACCOUNTS_SHIB_IDP_LOGIN_URL は login.py を前提にしているため、このままでは Shibboleth でログインできない。 - nginx/Dockerfile, Dockerfile.arm64: fcgiwrap と python3-requests を入れ、 secure/login.py を配置する - login.php による運用は終わっているので PHP を取り除く - php-fpm / php-curl のインストールと php-fpm の設定書き換えを削除 - supervisord.conf の php-fpm を削除 - weko-ams.conf / weko-ams-restricted.conf の .php 用 location と、 weko.conf のコメントアウト済みの同 location を削除 - nginx/login.php, index.php, phpinfo.php を削除 - login.py が使う requests は pip ではなく apt の python3-requests で入れる (Dockerfile.ams の python3-pip / pip3 install requests も置き換え) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
supervisord.conf は shibauthorizer / shibresponder を /usr/lib/x86_64-linux-gnu/shibboleth/ から起動するが、arm64 では /usr/lib/aarch64-linux-gnu/shibboleth/ にあるため FATAL になり、 /secure/ の shib_request が通らず Shibboleth でログインできなかった。 supervisord.conf は Dockerfile と Dockerfile.arm64 で共有しているので、 ビルド時に uname -m でパスを書き換える。x86_64 では書き換わらない。 両 Dockerfile は同じ内容に保つ。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewer's guide (collapsed on small PRs)Reviewer's GuideShibboleth ログインを login.py + fcgiwrap に戻し、PHP 実行経路を完全に削除するとともに、supervisord の Shibboleth バイナリパスをビルドアーキテクチャに応じて調整して arm64 でも認証サービスが起動するようにした。 Sequence diagram for Shibboleth login through login.pysequenceDiagram
participant Client
participant Nginx
participant Shibauthorizer
participant Fcgiwrap
participant LoginPy
participant IdP
Client->>Nginx: GET /secure/login.py
Nginx->>Shibauthorizer: shib_request /shibauthorizer
Shibauthorizer-->>Nginx: Authentication result
Nginx->>Fcgiwrap: FastCGI request
Fcgiwrap->>LoginPy: Execute login.py
LoginPy->>IdP: Redirect to SSOService
IdP-->>Client: 302 SSO redirect
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Hey - I've reviewed your changes and they look great!
Fixed security issues:
- SSL verification is disabled but should not be (currently CURLOPT_SSL_VERIFYPEER= false) (link)
- The 'phpinfo' function may reveal sensitive information about your environment. (link)
Sourcery assessment
Needs a human reviewer. The deployed authentication path changes from PHP-FPM to fcgiwrap running login.py, while also changing the Shibboleth module library path and Python dependency. If the new handler or architecture-specific configuration is wrong, users could be unable to log in or authorization-related attributes could be mishandled; reverting restores the previous PHP path, but any incorrect authentication or access decisions made before the revert would not be undone.
- incubator-pagespeed-ngx は x86_64 用の PSOL (1.13.35.2-x64) を取り込む ため arm64 ではコンパイルできない。weko-ams.conf などでも使っていない ので、Dockerfile と同じく組み込まないようにする - ビルドした .deb を focal_amd64.deb と決め打ちせず、ワイルドカードで取る - supervisord.conf の shibauthorizer / shibresponder のパスを、Dockerfile と 同じくビルド時に uname -m で書き換える - nginx 1.18.0 時代のコメントアウト行を削除する Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔍 Claude レビュー統合指摘はありません。 次にすること: 自分で挙げる指摘はありません。既存レビューのうち、スレッド ID を持つものは無く、裁定の対象はありませんでした。Sourcery が挙げた SSL 検証無効と phpinfo の2件は、login.php と phpinfo.php を削除したことで解消しています。nginx 配下に php や pagespeed を参照する設定が残っていないことも確認しました。マージ前に、arm64 と amd64 で実際にビルドして Shibboleth ログインが通ることを確かめてください。 モデル sonnet / 2 回実行して和集合 / コスト $0.3230。同じ入力でも結果が揺れるため複数回まわし、一部のパスでしか挙がらなかったものには回数を添えています 他レビューを踏まえた自動レビューです。誤りが含まれることがあります。 |
|
x86 64でのビルドおよびプロセス起動に問題ないことを確認した。 |
API インベントリ差分(件数のみ)
ベースラインとの差分(生成されませんでした) 台帳との突き合わせ(生成されませんでした) ソース由来の経路検知(生成されませんでした) |
API インベントリ差分(件数のみ)
ベースラインとの差分API インベントリ差分レポート
判定: ❌ FAIL (FAIL 1 / WARN 2)サマリ
[FAIL] G2 認証系デコレータが削除された — 3件
[WARN] W2 実装本体が変化(data_op / 情報露出を再確認) — 8件
[WARN] W5 監視対象 config が変化した — 2件
台帳との突き合わせ(生成されませんでした) ソース由来の経路検知(生成されませんでした) |
概要 (Summary)
develop_v2.1.0 の nginx イメージでは Shibboleth でログインできない。原因は2つあり、この PR で両方を直す。あわせて、AMS 用の nginx イメージ(
nginx/Dockerfile.ams)を arm64 でビルド・起動できるようにする(3.)。1. ログインスクリプト login.py が配置されていない
nginx/Dockerfileだけで、nginx/Dockerfile.arm64は login.php のまま残っていた。nginx/Dockerfileが v2.0.4 のnginx/Dockerfile.arm64と同じ内容に置き換わり、login.py への切り替えが失われた。/secure/login.pyが動かない。weko.confの/secure/(fcgiwrap で .py を実行)supervisord.confの fcgiwrapWEKO_ACCOUNTS_SHIB_IDP_LOGIN_URLの既定値(secure/login.py)2. arm64 で shibauthorizer / shibresponder が起動しない
supervisord.confは shibauthorizer と shibresponder を/usr/lib/x86_64-linux-gnu/shibboleth/から起動する。arm64 では実体が/usr/lib/aarch64-linux-gnu/shibboleth/にあるため、2つとも FATAL になる。/secure/のshib_requestが通らない。2021 年からある問題で、1. とは別件。3. AMS 用イメージ(
nginx/Dockerfile.ams)が arm64 でビルドできない1.13.35.2-x64)を取り込むため、arm64 ではコンパイルできない。.debをfocal_amd64.debという名前で決め打ちしているため、arm64 では COPY に失敗する。supervisord.confを使うので、2. と同じ問題もある。変更内容
nginx/Dockerfileとnginx/Dockerfile.arm64secure/login.pyを配置する(chmod 755)。uname -mを使って、supervisord.confの shibboleth のパスを実行環境のアーキテクチャに合わせて書き換える。x86_64 では何も変わらない。supervisord.confから[program:php-fpm]を削除する。weko-ams.confとweko-ams-restricted.confから.php用の location を削除する。weko.confのコメントアウト済みの同じ location も削除する。nginx/login.php、index.php、phpinfo.phpを削除する。python3-requestsで入れる。python3-pip は不要になる。Dockerfile.amsのpip3 install requestsも同じ方法に置き換える。nginx/Dockerfile.ams(3.)Dockerfileからはすでに外されている。.debをワイルドカード(nginx_1.20.1-1~focal_*.deb)で取得する。Dockerfileと同じく、ビルド時にsupervisord.confの shibboleth のパスを書き換える。関連Issue / チケット (Related Issues)
変更タイプ (Type of Change)
🤖 0. CI 自動チェック (API Inventory Drift)
API を追加・変更した場合(必須)
対象外。nginx イメージの構成だけの変更で、WEKO の API(Blueprint・View・REST)は変更していない。
🔒 1. セキュリティ & API アクセス制御チェック (必須)
対象外(WEKO の API に変更はない)。
/secure/は従来どおりshib_request /shibauthorizerを通る。arm64 では、この PR で初めて shibauthorizer が動く。🧪 2. テストコード観点チェック
対象外(Python コードに変更はない)。
🛡️ 3. データ保護 & 破壊的変更防止チェック
対象外。
⚙️ 4. マイグレーション & システム影響チェック
weko.confなどを環境ごとに変更している場合は、.php用 location の削除を反映すること(残っていても、.phpファイルが無いので動作に影響はない)。📚 5. ドキュメント・仕様書更新チェック (weko-document)
📋 6. 動作検証エビデンス (Verification Evidence)
aarch64(arm64)の機械で、キャッシュを使わずに(
--no-cache)ビルドして確認した。nginx 1.20.1 のソースからのコンパイルも、実際に実行している。nginx/Dockerfile.arm64(修正後のnginx/Dockerfileも同じ内容)nginx_1.20.1-1~focal_arm64.debとnginx-dbg_1.20.1-1~focal_arm64.debが作られた。nginx -V:headers-more、nginx-http-shibboleth、http-auth-digest、ngx_cache_purge の4モジュールが組み込まれている。/usr/share/nginx/html/secure/login.pyが-rwxr-xr-xで配置されている。/usr/sbin/fcgiwrapがある。php-fpm は入っていない。import requests(2.22.0)と urllib3・http.cookiejarが読み込める。--add-hostでダミーにした)nginx -tは成功した。curl -k https://127.0.0.1/secure/login.py?next=%2Fは、shibauthorizer を経由して IdP の SSOService への 302 になった。Permission is invalid)が返った。nginx/Dockerfile.ams.debで作られ、AMS フロントエンドのnpm installとnpm run buildも通った。nginx -tは成功した。http://127.0.0.1:3000/は 200。/secure/login.py?next=amsは IdP への 302。secure/には login.py だけが置かれ、php-fpm は入っていない。未確認
🤖 Generated with Claude Code