CentOS 7配置开源堡垒机jumpserver(1) jumpserver+openldap

CentOS 7配置开源堡垒机jumpserver(1) jumpservr+openldap

一、架构与场景说明

1.1 jumpserver结合openldap配置架构图

说明:

  1. OpenLDAP用来管理产线服务器账号与密码,主机登录权限以及sudo权限
  2. 在企业中CAS一般由信息化部门(而非运维技术部门)单独构建,管理组织人员以及内部信息化服务权限认证等,这里作为测试就不单独部署CAS了而是统一使用产线的OpenLDAP服务器
    在这里插入图片描述

1.2 组件服务器信息

主机名称地址版本角色备注
sysldap-shylf-110.116.72.11CentOS7.6 minopenLdap, httpd, phpldapadmin
sysldap-shylf-210.116.72.12CentOS7.6 minopenLdap, httpd, phpldapadmin
systerm-shylf-110.116.72.13CentOS7.6 minjumpserver
systerm-shylf-110.116.72.15CentOS7.6 minlinux跳板机terminal
syswterm-shylf-110.116.72.16windows 2012windows跳板机terminal

1.3 前置配置

二、Jumpserver配置

这里jumpserver配置使用官方配置步骤进行配置(我们当前使用的是二次开发的版本),官方配置文档
安装文档 » 一站式、分布式安装文档 » CentOS 7 安装文档

本文档主要是记录我的配置过程,官方文档已经很详细了,我这里也几乎没有改动,照着命令执行。

2.1 组件说明

  • Jumpserver 为管理后台, 管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作, 用户可以通过 Web 页面进行资产登录, 文件管理等操作
  • coco 为 SSH Server 和 Web Terminal Server 。用户可以使用自己的账户通过 SSH 或者 Web Terminal 访问 SSH 协议和 Telnet 协议资产
  • Luna 为 Web Terminal Server 前端页面, 用户使用 Web Terminal 方式登录所需要的组件
  • Guacamole 为 RDP 协议和 VNC 协议资产组件, 用户可以通过 Web Terminal 来连接 RDP 协议和 VNC 协议资产 (暂时只能通过 Web Terminal 来访问)
    各个组件默认使用的端口信息,默认端口可以在相应的配置文件更改
ProtocolServer namePort
TCPJumpserver8080
TCPcoco2222, 5000
TCPGuacamole8081
TCPDb3306
TCPRedis6379
TCPNginx80

备注:jumpserver当前最新版本是1.5.1

2.2 组件jumpserver配置

我这里关闭了firewalld,禁用了selinux,如果需要启用的情况下配置,可以参考官方文档。我是在root账户下配置的。

$ yum -y install epel-release
$ yum -y update 
$ yum -y install wget gcc

# 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke
$ yum -y install redis
$ systemctl enable redis
$ systemctl start redis

# 安装 MySQL, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置, 支持sqlite3, mysql, postgres等
$ yum -y install mariadb mariadb-devel mariadb-server
$ systemctl enable mariadb
$ systemctl start mariadb
# 创建数据库 Jumpserver 并授权
$ DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`  # 生成随机数据库密码
$ echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m"
$ mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '$DB_PASSWORD'; flush privileges;"

# 安装 Nginx, 用作代理服务器整合 Jumpserver 与各个组件
$ vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

$ yum -y install nginx
$ systemctl enable nginx

# 安装 Python3.6
$ yum -y install python36 python36-devel

# 配置并载入 Python3 虚拟环境
$ cd /opt
$ python3.6 -m venv py3  # py3 为虚拟环境名称, 可自定义
$ source /opt/py3/bin/activate  # 退出虚拟环境可以使用 deactivate 命令

# 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 载入环境后默认以下所有命令均在该虚拟环境中运行
(py3) [root@localhost py3]

# 下载 Jumpserver,官方文档是直接github下载最新版本,我这里从github下固定版本1.5.1
$ cd /opt/
$ wget https://github.com/jumpserver/jumpserver/archive/1.5.1.zip
$ unzip 1.5.1.zip
$ mv jumpserver-1.5.1  jumpserver

# 安装依赖 RPM 包
$ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)

# 安装 Python 库依赖,指定国内源速度快(可以直接写在配置文件里 ~/.pip/pip.conf)
$ pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple --trusted-host  mirrors.aliyun.com
$ pip install -r /opt/jumpserver/requirements/requirements.txt -i https://mirrors.aliyun.com/pypi/simple --trusted-host  mirrors.aliyun.com
# 修改 Jumpserver 配置文件
$ cd /opt/jumpserver
$ cp config_example.yml config.yml

$ SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`  # 生成随机SECRET_KEY
$ echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
$ BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`  # 生成随机BOOTSTRAP_TOKEN
$ echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc

$ sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
$ sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
$ sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
$ sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
$ sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
$ sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml

$ vi config.yml  # 确认内容有没有错误
省略
  • 运行jumpserver
# 运行 Jumpserver
$ cd /opt/jumpserver
$ ./jms start -d  # 后台运行使用 -d 参数./jms start -d
# 新版本更新了运行脚本, 使用方式./jms start|stop|status all  后台运行请添加 -d 参数

2.3 组件coco与guacamole安装,采用docker模式

在docker容器里还没有找到怎么处理ssh-agent (这个功能使用用来无密码访问使用的) ,coco可以从docker里面拿出来,配置ssh-agent代理私钥

$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum makecache fast
$ rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
$ yum -y install docker-ce
$ systemctl enable docker
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
$ systemctl restart docker

# 允许 容器ip 访问宿主 8080 端口, (容器的 ip 可以进入容器查看)
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="8080" accept"
$ firewall-cmd --reload
# 172.17.0.x 是docker容器默认的IP池, 这里偷懒直接授权ip段了, 可以根据实际情况单独授权IP

# 获取当前服务器 IP
$ Server_IP=`ip addr | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
$ echo -e "\033[31m 你的服务器IP是 $Server_IP \033[0m"

# http://<Jumpserver_url> 指向 jumpserver 的服务端口, 如 http://192.168.244.144:8080
# BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN
$ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco:1.5.1
$ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole:1.5.1

2.4 组件Luna(web终端)配置

# 安装 Web Terminal 前端: Luna  需要 Nginx 来运行访问 访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包, 直接解压, 不需要编译
$ cd /opt
$ wget https://github.com/jumpserver/luna/releases/download/1.5.1/luna.tar.gz

# 如果网络有问题导致下载无法完成可以使用下面地址
$ wget https://demo.jumpserver.org/download/luna/1.5.1/luna.tar.gz

$ tar xf luna.tar.gz
$ chown -R root:root luna

2.5 配置nginx

$ rm -rf /etc/nginx/conf.d/default.conf


$ vi /etc/nginx/conf.d/jumpserver.conf

server {
    listen 80;

    client_max_body_size 100m;  # 录像及文件上传大小限制

    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改
    }

    location /media/ {
        add_header Content-Encoding gzip;
        root /opt/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改
    }

    location /static/ {
        root /opt/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改
    }

    location /socket.io/ {
        proxy_pass       http://localhost:5000/socket.io/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location /coco/ {
        proxy_pass       http://localhost:5000/coco/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location /guacamole/ {
        proxy_pass       http://localhost:8081/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


# 运行 Nginx
$ nginx -t   # 确保配置没有问题, 有问题请先解决
$ systemctl start nginx

# 访问 http://192.168.244.144 (注意 没有 :8080 通过 nginx 代理端口进行访问)
# 默认账号: admin 密码: admin  到会话管理-终端管理 接受 coco Guacamole 等应用的注册
# 测试连接
$ ssh -p2222 admin@10.116.72.13
$ sftp -P2222 admin@10.116.72.13          #注意这里是大写字母P
  密码: admin

# sftp默认上传的位置在资产的 /tmp 目录下
# windows拖拽上传的位置在资产的 Guacamole RDP上的 G 目录下

2.6 coco和guacamole支持多组件负载

coco /guacamole服务默认运行在单核心下面, 当负载过高时会导致用户访问变慢, 这时可运行多个 docker 容器缓解. 我这里测试没有配置这个,可以参考官方文档配置 http://docs.jumpserver.org/zh/master/setup_by_centos7.html 官方文档处理的已经相当简单。

三、Jumpserver的使用

上面已经配置好了Jumpserver套件,openldap服务,也准备好了跳板机。现在可以配置使用了。jumpserver初始登录账户为admin/admin。进去后将密码修改掉
在这里插入图片描述
配置流程,

  1. 配置CAS/openLDAP认证登录
  2. 创建管理用户 --> 创建系统用户 --> 创建相应的节点 --> 指定节点创建资产 --> 资产授权 --> 查询用户授权的资产
  3. 普通用户登录,使用Web终端

3.1 配置OpenLDAP登录认证

openldap有2台服务器镜像模式,不知道这里配置多台的语法结构是什么,先配置了1台。
用户过滤器,根据实际情况配置,我这里将cn修改为了uid(这是我的Ldap目录结构属性)
在这里插入图片描述
然后测试连接,提交,并可以一键导入ldap里面的账户。

可以看到除了可以配置CAS/LDAP之外,还可以配置邮件,终端,安全等。根据实际情况配置。

3.2 配置资产

创建管理用户 --> 创建系统用户 --> 创建相应资产的节点 --> 指定节点创建资产 --> 资产授权 --> 查询用户授权的资产

  • 管理用户:
    linux管理用户使用拥有 NOPASSWD: ALL sudo权限的用户,我这里直接配置root,,可以配置账户密码格式,或者秘钥方式。这里配置密码模式
    windows随便配置一个就可以,反正不起作用。
    在这里插入图片描述

  • 系统用户,
    这个是用来登录跳板机的账户。可以登录授权的资产。我这里实际情况是使用ldap账户登录,每个人的账户不同需要每个单独都设置,比较麻烦,我们二次开发的版本会自动处理这一步。这里开源版本的配置。登录模式:自动登录,和手动登录。根据需要配置即可
    在这里插入图片描述

  • 配置资产节点,并在相应的节点下创建资产
    在这里插入图片描述

  • 资产授权
    授权用户或者用户组具有哪些资产或者节点的权限,才能再用户列表里面查询到相关资产。
    在这里插入图片描述

  • 查询指定用户资产
    在这里插入图片描述

3.3 普通用户登录

普通用户登录,选择web终端如下,可以登录指定的跳板机,然后可以通过跳板机访问具体的产线服务器。
在这里插入图片描述

  • windows跳板机同样的操作(也可以全屏)
    全屏存在分辨率的问题,可以使用跳板机的 <-- 重新连接会自动调整分辨率
    在这里插入图片描述
    到这里已经完成了。

四、遇到的问题或者场景

4.1 系统账号录入场景

企业内部LDAP服务很多账号,在运维或者产品开发人员登录服务器一般使用自己的账户,这种情况下需要为每个登录人员单独配置系统用户与资产授权。
在我所处的环境里对Jumpserver进行了二次开发,账户在第一次登陆jumpserver后会自动为该账户添加同名系统账号(工号),并自动加载生成ssh登录的秘钥,私钥导入jumpserver并推送到ssh-agent加载,公钥记录保存(可以API获取)

4.2 windows跳板机复制粘贴问题

这个jumpserver使用是web terminal(Guacamole )解决方案,复制粘贴比较麻烦 CTRL+ Alt + SHIFT 调出剪贴板,将要粘贴到windows跳板机的内容放进去,然后再CTRL+ Alt + SHIFT 隐藏剪贴板,之后可以通过CTRL+v将内容粘贴到windows跳板机。

4.3 windows跳板机不支持windows下的mstsc客户端

由于采用的web terminal(Guacamole )解决方案,windows跳板机不支持windows下的mstsc客户端,只能使用web方式,当然现在可以全屏了,但是分辨率问题也挺曲折。
可以使用跳板机的 <-- 重新连接会自动调整分辨率

4.4 从跳板机采用秘钥无密码访问产线服务问题。

登录产线服务器使用的是基于LDAP的账户(各自工号),如果采用ldap保存公钥,那么需要在跳板机上保存一堆的私钥,很危险。员工可能难道别人的私钥。而且我们的秘钥是每天重新生成。这里我们采用的是ssh-agent方案解决的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值