LoginSignup
2
4

More than 5 years have passed since last update.

素のGitでBASIC認証(LDAP)を利用する

Last updated at Posted at 2018-02-06

Gitサーバを構築することになったのだが、要望としてLDAPに登録したユーザーで認証したい、ということだった。
ネット上にはあまり詳しい情報がなかったのでメモを残しておく。

今回はGitのフロントにhttpdを配置し、mod_ldapで認証をすることにした。
httpd, git共にパッケージマネージャーからインストールしたものを使用した。

環境情報

# cat /etc/redhat-release                                                                                
CentOS Linux release 7.3.1611 (Core) 

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 14 2016 18:04:44

# git version
git version 1.8.3.1

必要なパッケージのインストール

# yum install httpd mod_ldap git

Apache設定の追加

# vim /etc/httpd/conf.d/git.conf

SetEnv GIT_PROJECT_ROOT /var/lib/git
SetEnv GIT_HTTP_EXPORT_ALL

ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthLDAPBindDN             example@example.local
    AuthLDAPBindPassword       1000000000
    AuthLDAPUrl                "ldap://192.168.1.20:389/OU=01.example,DC=example,DC=local?sAMAccountName?sub?(objectClass=user)"
    AuthLDAPBindAuthoritative  off
    AuthBasicProvider          ldap
    AuthLDAPGroupAttribute     "member"
    AuthLDAPSubGroupClass      "group"
    AuthLDAPSubGroupAttribute  member
    AuthLDAPGroupAttributeIsDN on
    AuthLDAPMaxSubGroupDepth   10
    Require valid-user
</Files>

※LDAPサーバの設定は環境によって異なるので適宜読み替える必要がある。

中央リポジトリの作成

# cd /var/lib/git
# git init --bare --shared sandbox.git
# cd sandbox.git
# git update-server-info
# mv hooks/post-update.sample hooks/post-update
# chown -R apache.apache /var/lib/git

トラブルシューティング

ApacheからLDAPサーバに接続できない

上記の設定を反映すると、認証ダイアログが表示されるようになる。
正しい情報を入力してもログインエラーになるので原因を調べたらSELINUXによってLDAPサーバへのアクセスがブロックされていた。

# less  /var/log/audit/audit.log

type=AVC msg=audit(1517891103.877:367): avc:  denied  { name_connect } for  pid=2981 comm="httpd" dest=389 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ldap_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1517891103.877:367): arch=c000003e syscall=42 success=no exit=-13 a0=13 a1=7f49b83bd8c0 a2=10 a3=0 items=0 ppid=2975 pid=2981 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

要は、httpd_tからldap_port_tへ接続する際に適用されるSELINUXのポリシーを確認すると、

# sesearch -A -C -s httpd_t -t ldap_port_t -c tcp_socket
Found 7 semantic av rules:
   allow httpd_t port_type : tcp_socket { recv_msg send_msg } ; 
DT allow httpd_t port_type : tcp_socket name_connect ; [ httpd_can_network_connect ]
DT allow nsswitch_domain ldap_port_t : tcp_socket name_connect ; [ authlogin_nsswitch_use_ldap ]
DT allow nsswitch_domain ldap_port_t : tcp_socket { recv_msg send_msg } ; [ authlogin_nsswitch_use_ldap ]
DT allow nsswitch_domain port_type : tcp_socket { recv_msg send_msg } ; [ nis_enabled ]
DT allow httpd_t ldap_port_t : tcp_socket name_connect ; [ httpd_can_connect_ldap ]
DT allow nsswitch_domain reserved_port_type : tcp_socket name_connect ; [ nis_enabled ]

下から2番目、httpd_can_connect_ldapで拒否されている。

# setsebool -P httpd_can_connect_ldap on

# sesearch -A -C -s httpd_t -t ldap_port_t -c tcp_socket
Found 7 semantic av rules:
   allow httpd_t port_type : tcp_socket { recv_msg send_msg } ; 
DT allow httpd_t port_type : tcp_socket name_connect ; [ httpd_can_network_connect ]
DT allow nsswitch_domain ldap_port_t : tcp_socket name_connect ; [ authlogin_nsswitch_use_ldap ]
DT allow nsswitch_domain ldap_port_t : tcp_socket { recv_msg send_msg } ; [ authlogin_nsswitch_use_ldap ]
DT allow nsswitch_domain port_type : tcp_socket { recv_msg send_msg } ; [ nis_enabled ]
ET allow httpd_t ldap_port_t : tcp_socket name_connect ; [ httpd_can_connect_ldap ]
DT allow nsswitch_domain reserved_port_type : tcp_socket name_connect ; [ nis_enabled ]

setseboolコマンドでセキュリティポリシーを変更すると問題なく接続出来た。
※環境によっては yum install setools-console が必要。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4