[メモ]Gitlab手術室:LDAPが配置されているのにずっとInvalid Credentialの解決
先日Gitlab serverで遊んで、他の人に共有するときは直接会社LDAPで認証してログインしたいと思っていました.その後、GitlabはLDAPのsuperuserを提供する必要があります.ログインするたびにsuperuserでfilterクエリーを使用して検証します.私はsuperuserを持っていません.どうすればいいですか?
だから「自分で手を出して、豊衣足食」.
説明はGithubに置いて、興味があれば試してみてください.
まずgitlabのデバッグですが、簡単にするためにGitlab公式のdockerミラーを直接使用しました.
最初は公式サイトに従ってLDAPを配置して、物を配置して、それからenable、それから
Debug Gitlabの検索を開始します.Stackoverflowをクリックすると、初めて結果が出ませんが、infoレベルからdebugレベルにlogを設定する方法が見つかりました.
しばらく使って
@ldap_user_info = @adaptor.bind_as(:filter => filter(@adaptor), :size => 1, :password => request[‘password’])
順藤摸瓜、
Gitlabを再起動し、LDAPログイン--エラー:nilにproviderがありません.何の見当もつかない.たまたまtailのロゴにemail is invalid、grepを発見!見つかった
大喜びして、ついにpassは登録のすべてのステップをしました.私はまずLDAP以外のユーザーを登録しましたが、ユーザー名もメールボックスも自分のものを使っているので、
rootユーザーでログインすると、登録したアカウントがblockされていてLDAP側の情報でしたが、会社の他のappも通常通り使用できます.Gitlabにチェックがあるんだよ.grep block、メインのファイルを見つけた
再起動、ログイン、完了!お茶でも飲めるかと思いきや、
Gitlabはこれで手術を終えた.
だから「自分で手を出して、豊衣足食」.
説明はGithubに置いて、興味があれば試してみてください.
まずgitlabのデバッグですが、簡単にするためにGitlab公式のdockerミラーを直接使用しました.
docker run gitlab
Gitlabができるようになった.以下はLDAPモジュールを手術改造し、まずdocker exec -it gitlab-container-id /bin/bash
Gitlab容器に入ってからにしよう.最初は公式サイトに従ってLDAPを配置して、物を配置して、それからenable、それから
gitlab-ctl reconfigure
、ページを更新して、喜んでログイン画面にLDAP tabがあるのを見ました.ユーザー名とパスワードを入力すると、不思議なことに500エラーが続いています.Debug Gitlabの検索を開始します.Stackoverflowをクリックすると、初めて結果が出ませんが、infoレベルからdebugレベルにlogを設定する方法が見つかりました.
vi $(find /opt/gitlab/embedded/service/gitlab-rails -name production.rb)
.gitlab-ctl restart
後、LDAP登録500のエラーが消えてしまった.Gitlabにはバグがあるに違いない.無視する.しばらく使って
gitlab-ctl
、helpで見つけたgitlab-ctl tail
logの変化を検出できます.やりやすいです.bashを2つ、tail専用を1つ、コードを変更します.500エラーがなくなってから、ずっとInvalid credentials
のエラーを報告しています.grepはどこにいますか:gems/gitlab_omniauth-ldap-1.2.1/lib/omniauth/strategies/ldap.rb
.Gitlabの変なところを発見しました.LDAPにログインするたびに、まず構成のユーザーでログインしたユーザー情報を検索してbindで検証します.ちょっと複雑です.@ldap_user_info = @adaptor.bind_as(:filter => filter(@adaptor), :size => 1, :password => request[‘password’])
順藤摸瓜、
@adaptor.bind_as
、うーん、少なくとも関数名があって、grep後発見gems/gitlab_omniauth-ldap-1.2.1/lib/omniauth-ldap/adaptor.rb
.最初はruby-net-ldapライブラリのバージョンが低すぎると思っていたのでexport GEM_HOME
修正Gemfile.lock
、installは0.15.0を元の0.12.1に置き換え、卵を並べた.それはbind_as
やめて書き直すしかない. def bind_as(args={})
result = {}
result[:uid] = ["#{args[:username]}"]
result[:email] = ["#{args[:username]}@example.com"]
login = "#{args[:username]}@example.com"
password = args[:password]
config = {
:host => @host,
:port => @port,
:encryption => method,
:base => @base
:auth => {}
}
config[:auth][:method] = @bind_method
config[:auth][:username] = login
config[:auth][:password] = password
@connection = Net::LDAP.new(config)
false
result if @connection.bind
end
Gitlabを再起動し、LDAPログイン--エラー:nilにproviderがありません.何の見当もつかない.たまたまtailのロゴにemail is invalid、grepを発見!見つかった
gitlab-rails/lib/gitlab/o_auth/user.rb
.上のコードは最初result[:email] = ["#{args[:username]}@example.com"]
配列ではなくlog.info
毎回のemail発見がusernameの最初の文字であることを出力した.変更してもログインできません.userはsaveの時ずっと間違っていました.gitlab-rails/lib/gitlab/ldap/user.rb
里発見相続o_authのクラス、gl_user
取得時にあったfind_by_uid_and_provider
、あとはfind_by_email
、だったらfind_by_uid_and_provider
を削除しましょう.大喜びして、ついにpassは登録のすべてのステップをしました.私はまずLDAP以外のユーザーを登録しましたが、ユーザー名もメールボックスも自分のものを使っているので、
find_by_email
この登録したユーザーが見つかるはずです.やはり私が予想したように、ログインユーザー名のパスワードの入力が正しいのか、ログインしていないのか、ユーザーがblockされていることを示しています.私のLDAPはすでに会社に閉鎖されています.私はjsスクリプトT_を書いていません.T. rootユーザーでログインすると、登録したアカウントがblockされていてLDAP側の情報でしたが、会社の他のappも通常通り使用できます.Gitlabにチェックがあるんだよ.grep block、メインのファイルを見つけた
gitlab-rails/lib/gitlab/ldap/access.rb
、中のallowedを直接return true
と判断すればよかった.興味のある子供靴なら、コードを書いてLDAP serverに接続し、eeというkeyのようなvalueをsearchで検索してtrueやfalseに戻ることができます.ここは簡単で乱暴です.再起動、ログイン、完了!お茶でも飲めるかと思いきや、
git clone
後git push
また掛けました.エラーメッセージgrepからフローを見つける:gitlab-rails/app/controllers/projects/git_http_controller.rb
=>gitlab-rails/lib/gitlab/auth.rb
=>gitlab-rails/lib/gitlab/ldap/authentication.rb
.filterの残党を発見し、username直接伝に変更した.find_by_uid_and_provider
に変更find_by_email
.再起動、ログイン、プロジェクトの作成、clone、push.Gitlabはこれで手術を終えた.