【GeoServer】基于CentOS7.x构建GeoServer安全加固镜像

GeoServer是一个用Java编写的开源软件服务器,允许用户共享和编辑地理空间数据。

为实现互操作性而设计,它使用开放标准发布来自任何主要空间数据源的数据。作为一个社区驱动的项目,geoserver由来自世界各地的不同个人和组织开发、测试和支持。

GeoServer于2001年由位于纽约的非盈利技术孵化器开放计划项目(Topp)启动。Topp正在创建一套工具,以实现开放的民主,并帮助使政府更加透明。其中第一个是 GeoServer ,它认识到,通过共享空间数据的能力,可以大大提高公民参与政府和城市规划的一套工具。

GeoServer 的创始人设想了一个地理空间网络,类似于万维网。通过万维网,人们可以搜索和下载文本。通过地理空间网络,人们可以搜索和下载空间数据。数据提供者可以直接将他们的数据发布到这个网站,用户可以直接访问它,而不是现在的间接和繁琐的数据共享方法。

GeoTools 项目,一个开源的GIS Java工具包。通过geotools,增加了对shapefiles、Oracle数据库、ArcSDE集成等的支持。

现在,geoserver可以从十几个空间数据源读取数据,并输出到许多不同的格式。现在,在其第二个十年中,GeoServer 正在继续其任务,使所有人都能更容易地访问空间数据。


一、实验环境


操作系统: CentOS7.5 Minimal

GeoServer服务器:    192.168.1.101


二、软件包准备


jre-8u212-linux-x64.tar.gz

https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

geoserver-2.14.2-bin.zip

https://versaweb.dl.sourceforge.net/project/geoserver/GeoServer/2.14.2/geoserver-2.14.2-bin.zip

jetty-distribution-9.2.13.v20150730.tar.gz

https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.2.13.v20150730/jetty-distribution-9.2.13.v20150730.tar.gz


三、在构建镜像的服务器


创建项目目录用户

#  mkdir  /root/GeoServer

# groupadd -g 2020 geoserver 

# useradd -u 2020 -g  geoserver geoserver 

将 准备的软件包上传到 工作目录  /root/GeoServer

#    ll  /root/GeoServer

geoserver-2.14.2-bin.zip

jetty-distribution-9.2.13.v20150730.tar.gz

jre-8u212-linux-x64.tar.gz


#  cd   /root/GeoServer

#  unzip geoserver-2.14.2-bin.zip  

#  tar  -zxf jetty-distribution-9.2.13.v20150730.tar.gz  

#  mv   geoserver-2.14.2    geoserver 



从jetty解压包中拷贝ssl模块配置文件到geoserver目录

# cp jetty-distribution-9.2.13.v20150730/modules/ssl.mod geoserver/modules/

# ll geoserver/modules/


三、修改配置文件


# vim geoserver/modules/ssl.mod

注释或者删除标注的几行,此处配置重复,我们将在其他配置文件中配置。

# vim geoserver/etc/jetty-ssl.xml

将此配置文件中配置,修改为标注所示

#######################################################

FALSE

 

   

      .*CBC.*

   

 

 

   

      .*DHE.*

   

 

 

   

      TLSv1.2

      TLSv1.3

   

 

#######################################################


①  禁用服务的SSL重协商机制

② 禁用不够安全算密码套件,只启用安全密码套件

③ 只启用TLSv1.2和 TLSv1.3 版本



# vim geoserver/start.ini

将此配置文件中配置,修改为标注所示:

① 禁用http模块

② 启用 https 和ssl 模块



四、重新生成证书文件


GeoServer默认的证书keysize为1024 强度不够,需要重新生成。

# keytool \

-genkeypair \

-keystore keystore \

-alias mykey \

-keypass keypwd \

-storepass storepwd \

-keyalg RSA \

-keysize 2048 \

-validity 3650 \

-dname "CN=Jetty Server,OU=Open Source Development,O=Mort Bay Consulting,L=Unknown,ST=Unknown,C=Unknown"

将新生成的证书拷贝到原证书目录覆盖

# mv keystore geoserver/etc/

这里我们只是更新了默认证书的的强度,没有更改 keypass(默认值为keypwd)和 storepass (默认值为storepwd)

如果要更新keypass和 storepass的值 :

# keytool \

-genkeypair \

-keystore keystore \

-alias mykey \

-keypass Keystore@1234567\

-storepass Keystore@7654321\

-keyalg RSA \

-keysize 2048 \

-validity 3650 \

-dname "CN=Jetty Server,OU=Open Source Development,O=Mort Bay Consulting,L=Unknown,ST=Unknown,C=Unknown"



同步更新配置文件 geoserver/etc/jetty-ssl.xml 中的keypass和storepass,并用GeoServer自带的混淆工具将其混淆。


① KeyStorePassword 对应 storepass

② KeyManagerPassword 对应 keypass

③ TrustStorePassword 对应 storepass

【jetty】关于jetty配置文件中证书密码的混淆和反混淆

https://www.jianshu.com/p/02b6225e96c3


# java -cp geoserver/lib/jetty-util-9.2.13.v20150730.jar org.eclipse.jetty.util.security.Password "Keystore@1234567"

# java -cp geoserver/lib/jetty-util-9.2.13.v20150730.jar org.eclipse.jetty.util.security.Password "Keystore@7654321"


五、GeoServer 安装包的目录文件权限加固


# vim geoserver/bin/startup.sh

设置进程启动的umask,使得服务器启动后生成服务目录文件权限的最小化。

##########################

# Set umask

umask 0077

##########################


删除windows bat脚本

#  rm  -rf   geoserver/bin/*.bat



#   find  geoserver/  -type d  -exec chmod 750 {} \;

#  find  geoserver/  -type f  -exec chmod 640 {} \;

#  chmod  550  geoserver/bin/*.sh

# chmod 700 geoserver/etc

# chmod 400 geoserver/etc/keystore


将整改好的geoserver 目录打包,用于下面docker镜像的构建

# tar -zcf geoserver-2.14.2-bin.tar.gz geoserver


六、构建GeoSever镜像


编写Dockerfile  

#  vim Dockerfile 

#############################################################

FROM centos:centos7.5.1804

ADD jre-8u212-linux-x64.tar.gz /usr/local

ADD geoserver-2.14.2-bin.tar.gz  /usr/local

ENV JAVA_HOME="/usr/local/jre1.8.0_212" \

    PATH="$JAVA_HOEM/bin:$PATH" \

    GEOSERVER_VERSION="2.14.2" \

    GEOSERVER_HOME="/usr/local/geoserver" \

    GEOSERVER_DATA_DIR="/usr/local/geoserver/data_dir"

RUN yum clean all && \

    rpm --rebuilddb && \

    yum -y install fontpackages-filesystem fontconfig xorg-x11-font-utils && \

    groupadd -g 2020 geoserver && \

    useradd -u 2020 -g  geoserver geoserver && \

    chown -R geoserver:geoserver /usr/local/geoserver

#ADD truetype.tar.gz  /usr/share/fonts

#RUN cd /usr/share/fonts && \

#    mkfontscale && \

#    mkfontdir && \

#    fc-cache

WORKDIR /home/geoserver

USER  geoserver

EXPOSE 8443

CMD ["sh","/usr/local/geoserver/bin/startup.sh"]

#############################################################

① 如果有字体文件需要添加到镜像中,将 ttf字体文件放入 truetype 目录中,打包为 truetype.tar.gz

# docker build -f Dockerfile  -t  geoserver:2.14.2  .



#  docker  images  



七、用构建的镜像启动一个容器测试


# mkdir  -p  /opt/geoserver/data_dir

# chown  -R  geoserver:geoserver  /opt/geoserver/data_dir

# chmod 750   /opt/geoserver/data_dir

#  docker run -it -d   --name  geoserver   -v /opt/geoserver/data_dir:/usr/local/geoserver/data_dir -p 8443:8443 geoserver:2.14.2

#  docker logs   -f   geoserver

浏览器访问测试: 

https://192.168.1.101:8443/

https://192.168.1.101:8443/geoserver

默认WEB管理登录用户名密码:

admin/geoserver



八、安全加固效果验证


目录文件权限


宿主机目录文件权限

# ll /opt/geoserver/data_dir/

# ll /opt/geoserver/data_dir/styles/

容器目录文件权限

# docker exec -it geoserver  ls -l /usr/local/geoserver

# docker exec -it geoserver  ls -l /usr/local/geoserver/etc


查看进程所有者

# docker exec -it geoserver ps aux


查看自签名证书强度

# docker exec -it geoserver bash

$ /usr/local/jre1.8.0_212/bin/keytool  -v  -list  --keystore  /usr/local/geoserver/etc/keystore  --storepass  "storepwd"


查看服务端是否关闭重协商机制

# openssl s_client -connect 192.168.1.101:8443


查看服务端使用的密码套件

# echo > /dev/tcp/192.168.1.101/8443

# nmap -sV -p 8443 --script ssl* 192.168.1.101


查看服务端支持的TLS版本

# echo > /dev/tcp/192.168.1.101/8443

# openssl s_client -connect 192.168.1.101:8443




九、关于GeoSever安装包和服务启动后数据文件中涉及的明文密码


安装包文件


#  cd  /root/GeoServer

# grep -rin "password" geoserver/


# grep -rin "password" geoserver/

根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:


geoserver/data_dir/security/usergroup/default/users.xml 

geoserver/etc/jdbcRealm.properties

geoserver/etc/jetty-ssl.xml


服务启动后数据文件


# ll /opt/geoserver/data_dir/

# grep -rin "password"  /opt/geoserver/data_dir/

根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:

data_dir/security/masterpw.info

注:根据文本内容提示,这个文件在服务启动后可以删除

data_dir/security/usergroup/default/users.xml

注:这个用户名密码明文默认是 admin/geoserver,GeoServer 管理界面的默认登录用户名密码



十、关于对配置文件中几种密码明文加密方式的选择和处理


GeoServer用户手册:密码

密码是任何安全系统的核心。本节介绍GeoServer如何处理密码。

https://www.osgeo.cn/geoserver-user-manual/security/passwd.html#password-encryption



安装包文件

#  cd  /root/GeoServer


# grep -rin "password" geoserver/


根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:

geoserver/data_dir/security/usergroup/default/users.xml 

此处,密码使用的是摘要式加密,不可逆,符合安全要求。


geoserver/etc/jdbcRealm.properties

This is a sample properties file for the org.eclipse.jetty.security.JDBCLoginService。

此文件为示例配置文件,可以清空或者删除:

#  echo  >  geoserver/etc/jdbcRealm.properties

geoserver/etc/jetty-ssl.xml

此处关于 geoserver/etc/keystore 的 keypass 和 storepass,为混淆加密方式。


服务启动后数据文件


# ll /opt/geoserver/data_dir/

# grep -rin "password"  /opt/geoserver/data_dir/

根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:

data_dir/security/masterpw.info

注:根据文本内容提示,这个文件在服务启动后将密码保存至别处,然后删除。

# rm  -f  data_dir/security/masterpw.info

data_dir/security/usergroup/default/users.xml

注:这个用户名密码明文默认是 admin/geoserver,GeoServer 管理界面的默认登录用户名密码

此处为不安全加密方式,我们在启动GeoServer后,需从界面上设置加密方式:



设置完成后,再查看 data_dir/security/usergroup/default/users.xml 文件中的加密方式:

此时,密码使用的是摘要式加密,不可逆,符合安全要求。


综上所述,关于GeoServer 配置文件中密码加密:


1.  配置文件中关于 keypass storepass 用混淆加密

2. 管理界面的用户名密码使用digest摘要加密,不可逆加密

3. 数据库连接或外部OGC服务(如 cascading WMS 和 cascading WFS ,因此geoserver必须能够解码加密的密码并将其传递给外部服务)需要选用 strong PEB ,可逆加密



十一、参考


【GeoServer】CentOS7.x上GeoServer的安装部署

https://www.jianshu.com/p/cfcee37bc71e


【GeoSerer】GeoServer安全加固

https://www.jianshu.com/p/24fa9c218e2e


【GeoServer】How to specify the TLS version and algorithm type of GeoServer?

https://www.jianshu.com/p/01661e8e2a5e


【HTTPS】SSL/TLS协议安全之:不安全的重协商

https://www.anquanke.com/post/id/82989


【jetty】关于jetty配置文件中证书密码的混淆和反混淆

https://www.jianshu.com/p/02b6225e96c3


【Geoserver】CentOS7 war包部署GeoServer

https://blog.csdn.net/junlong750/article/details/104183621


【GeoServer】GeoServer用户手册

https://www.osgeo.cn/geoserver-user-manual/index.html

你可能感兴趣的:(【GeoServer】基于CentOS7.x构建GeoServer安全加固镜像)