如何使用外部nginx为GITLAB配置seLinux

时间:2018-04-05 06:22:16

标签: nginx gitlab selinux

我正在设置我们的Gitlab服务器,当我禁用seLinux时它运行良好。 如何修复seLinux的配置以允许gitlab工作?

Environmnt:

  • CentOS 7.4.1708并更新所有软件包。
  • Gitlab 10.5.2
  • nginx 1.13.10

我已经安装了Gitlab和nginx,并按照此链接进行配置,使Gitlab与已安装的nginx一起工作:

https://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server

当我点击Gitlab的链接时,我无法到达那里,我在/var/log/nginx/error.log中找到了错误消息:

2018/04/05 11:39:27 [crit] 4092#4092: *3 connect() to unix:/var/opt/gitlab/gitlab-workhorse/socket failed (13: Permission denied) while connecting to upstream, client: xx.xx.xx.xx, server: localhost, request: "POST /gitlab/api/v4/jobs/request HTTP/1.1", upstream: "http://unix:/var/opt/gitlab/gitlab-workhorse/socket:/gitlab/api/v4/jobs/request", host: "xx.xx.xx.xx"

在我将seLinux更改为'permissive'模式后,它按预期运行良好。 在/var/log/audit/audit.log文件中,我找到了消息:

type=AVC msg=audit(1522905628.444:872): avc:  denied  { write } for  pid=12407 comm="nginx" name="socket" dev="dm-2" ino=8871 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=sock_file

然后我尝试按照以下说明操作:

https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#selinux-modifications

但是我看不到文件/目录。

setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_network_relay on
setsebool -P httpd_read_user_content on
semanage -i - <<EOF
fcontext -a -t user_home_dir_t '/home/git(/.*)?'
fcontext -a -t ssh_home_t '/home/git/.ssh(/.*)?'
fcontext -a -t httpd_sys_content_t '/home/git/gitlab/public(/.*)?'
fcontext -a -t httpd_sys_content_t '/home/git/repositories(/.*)?'
EOF
restorecon -R /home/git
  • git用户的主目录是/ var / opt / gitlab而不是/ home / git
  • / var / opt / gitlab目录没有gitlab directori或repositories目录。

如何配置seLinux以使用我的环境?

2 个答案:

答案 0 :(得分:0)

我正在搞清楚这一点。该文档是旧信息和新信息的混合,缺乏标准和“Omnibus”安装之间的区别。问题是他们没有正确标记他们的套接字文件以允许Nginx访问。每次运行gitlab-ctl reconfigure后,我都成功运行了这个:

chcon -t httpd_var_run_t /var/opt/gitlab/gitlab-workhorse/socket

并且不要忘记这些设置:

usermod -aG git,gitlab-www nginx
chmod g+rx /var/opt/gitlab/
chown git:git /var/opt/gitlab

同样,我无法让Nginx从提供的配置开始;我不得不创建一个代理缓存目录:

mkdir /usr/share/nginx/proxy_cache
restorecon -vFR /usr/share/nginx
chown nginx /usr/share/nginx/proxy_cache/

答案 1 :(得分:0)

我自己遇到了这个问题(我什至也在使用CentOS服务器),并且能够使用miken32发布的命令来解决此问题

  

chcon -t httpd_var_run_t / var / opt / gitlab / gitlab-workhorse / socket

在我的情况下,我使用Gitlab提供的文档安装了Omnibus gitlab-ce软件包

然后,我按照Using a non-bundled web-server的说明进行操作。如果仔细阅读,您会注意到 5。下载正确的Web服务器配置段落,其中包含链接GitLab recipes repository

点击此链接,您将找到多个不同Web服务器的配置,包括nginx的配置。请注意,因为在nginx Web服务器目录中,您将再次被重定向到GitLab official repository ...

将所需的配置(带有或不带有SSL等)下载到 /etc/nginx/conf.d / 目录(至少对CentOS而言这是特殊的)。请仔细检查下载的文件,因为您需要使用Omnibus软件包的正确路径对其进行修改。

也不要忘记如文档中所述授予Nginx对git group的访问权限。我不确定是否真的有必要,但是我的Nginx用户也是 gitlab-www 组的成员。

毕竟,我仍然无法启动gitlab网站。浏览器刚出现502错误页面。

/var/log/nginx/gitlab-error.log 显示了针对工作马套接字的权限被拒绝错误,该错误将我引导至此页面,并且可以通过(至少在我的情况下)解决miken32提供的命令。