AuthorizedKeysCommand를 사용할 때 Selinux로 인해 sshd가 실패함

AuthorizedKeysCommand를 사용할 때 Selinux로 인해 sshd가 실패함

저는 승인된 SSH 키를 빠르게 조회할 수 있도록 Gitlab의 가이드를 따르고 있습니다. 가이드에서는 AuthorizedKeysCommand를 사용하도록 지시합니다. 인증 명령이 로컬 https 서버를 호출하고 있습니다. 이 명령 체인은 SELinux 정책 위반을 초래합니다.

내가받는 오류는 다음과 같습니다.

type=AVC msg=audit(1559126095.648:64173782): avc:  denied  { name_connect } for  pid=13839 comm="gitlab-shell-au" dest=8081 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket permissive=0

기억이 정확하다면 맞춤 SELinux 정책이 필요합니다. 그러나 내가 찾은 모든 가이드는 지나치게 복잡했습니다. 이 예외를 허용하는 정책 파일을 작성하는 것은 간단한 작업입니다.

sshd_t 프로세스가 transproxy_port_t를 사용하도록 허용하는 정책(.te) 파일이 어떤 모습인지 알고 계십니까?

편집하다. Gitlab은 표준 포트(8080)에서 unicorn을 실행할 때 필요한 정책을 구성합니다.

답변1

다음을 수행할 수 있습니다.

# generate the policy .te file
echo "type=AVC msg=audit(1559126095.648:64173782): avc:  denied  { name_connect } for  pid=13839 comm="gitlab-shell-au" dest=8081 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket permissive=0" | audit2allow -m gitlabfix1 > gitlabfix1.te

# create a module from the .te file
checkmodule -M -m -o gitlabfix1.mod gitlabfix1.te

# package it
semodule_package -o gitlabfix1.pp -m gitlabfix1.mod

# install it
semodule -i gitlabfix1.pp

더 짧은 방법이 있지만 중간 .te 파일을 생성하지 않습니다. .te 파일은 보관 및 이해 목적에 편리합니다 :-).

더 짧은 방법은 다음과 같습니다.

# generate the policy module package in one go
echo "type=AVC msg=audit(1559126095.648:64173782): avc:  denied  { name_connect } for  pid=13839 comm="gitlab-shell-au" dest=8081 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket permissive=0" | audit2allow -M gitlabfix2

# and load it
semodule -i gitlabfix2.pp

교육 목적으로 .te 파일은 다음과 같습니다.

module gitlabfix1 1.0;

require {
        type transproxy_port_t;
        type sshd_t;
        class tcp_socket name_connect;
}

#============= sshd_t ==============
allow sshd_t transproxy_port_t:tcp_socket name_connect;

관련 정보