Gitlabでclone(ssh)するとパスワードを聞かれたので調べた話
未だにSELinux良く分かってないけど、とりあえず解決したのでメモ
問題
CentOS 7にインストールしているプライベートGitLabに対して、
SSH接続のgit clone
しようとするとkeyを設定しているのにパスワードを聞かれる。
原因
SELinuxの設定が適切に設定されていなかったのが原因だったらしい。
(本当は無効化すればいいと思った、、でもダメだっていう自分が勝ったので戦ってみた)
解決方法
chcon -R -t ssh_home_t /var/opt/gitlab/.ssh
解決まで
特定の値は<内容>で置き換えてます
SELinuxにたどり着くまでは省略、、
(いろいろ調べたら.ssh/authorized_keysが機能してなさそうってことが分かった。)
以下のコマンドでSELinuxを無効化するとgitに対して ssh接続できるようになった。
無効化
# setenforce 0
接続確認(クライアント側)
# ssh -T git@<IP>
有効化
# setenforce 1
ls -ZでSELinuxのラベル(パーミッション?)を確認すると、
root(正常にssh keyで接続できるアカウント)と
git(git接続するときに使用するアカウント)
では異なっていることが分かった。
# ls -Z ~/.ssh
unconfined_u:object_r:ssh_home_t:s0 authorized_keys
# ls -Z /var/opt/gitlab/.ssh
unconfined_u:object_r:var_t:s0 authorized_keys system_u:object_r:var_t:s0 authorized_keys.lock
ここまで来る前に
# restorecon -R -v /var/opt/gitlab/.ssh
を実行しているのでls -Z /var/opt/gitlab/.sshの結果は本来の状態から異なっているかもしれない、、、
rootの.ssh/authorized_keysはssh_home_t
gitの.ssh/authorized_keysはvar_t
となっていた。
SELinuxのログを確認してみると、
# cat /var/log/audit/audit.log | grep denied
...
type=AVC msg=audit(<time?>): avc: denied { read } for pid=<pid> comm="sshd" name="authorized_keys" dev="dm-0" ino=<ino> scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:var_t:s0 tclass=file permissive=0
...
やっぱりauthorized_keysが問題そう、、、
ということで、
gitの.ssh/authorized_keysのラベルをssh_home_t
に変更すれば行けるんじゃないか?ってなって設定した。
# chcon -R -t ssh_home_t /var/opt/gitlab/.ssh
# ls -Z /var/opt/gitlab/.ssh
unconfined_u:object_r:ssh_home_t:s0 authorized_keys system_u:object_r:ssh_home_t:s0 authorized_keys.lock
設定したら接続できるようになった。
# ssh -T git@<IP>
Welcome to GitLab, @<name>!
今のところ再起動しても、SSH接続出来ているので問題なさそう、、
参考
【ausearch】SELinuxのログの見方とトラブルシュート, 監査設定, tail リアルタイム表示~
【ざっくりと理解する】SELinuxとは?
Discussion