我一直在遵循 Gitlab 的指南来启用授权 SSH 密钥的快速查找。指南指示使用 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) 文件应该是什么样子吗?
编辑。在标准端口(8080)运行 unicorn 时,Gitlab 确实配置了所需的策略
答案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;