【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

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

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

<Set name="renegotiationAllowed">FALSE</Set>

  <Set name="ExcludeCipherSuites">

    <Array type="String">

      <Item>.*CBC.*</Item>

    </Array>

  </Set>

  <Set name="IncludeCipherSuites">

    <Array type="String">

      <Item>.*DHE.*</Item>

    </Array>

  </Set>

  <Set name="IncludeProtocols">

    <Array type="String">

      <Item>TLSv1.2</Item>

      <Item>TLSv1.3</Item>

    </Array>

  </Set>

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


①  禁用服务的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配置文件中证书密码的混淆和反混淆

//www.greatytc.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的安装部署

//www.greatytc.com/p/cfcee37bc71e


【GeoSerer】GeoServer安全加固

//www.greatytc.com/p/24fa9c218e2e


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

//www.greatytc.com/p/01661e8e2a5e


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

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


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

//www.greatytc.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348