🤔

Gitlabでclone(ssh)するとパスワードを聞かれたので調べた話

2021/12/05に公開

未だに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