jumpserver部署使用


  一、簡介

  前面我們聊到了openvpn的部署和使用,它能夠實現從互聯網通過openvpn連接到公司內網服務器,從而進行遠程管理;但openvpn有一個缺點它不能記錄哪些用戶在內網服務器上操作了什么,擁有客戶端的證書和私鑰以及ca的證書和客戶端配置,就可以直接連接到公司內網,這從某些角度講不是一個安全的解決方案;有關openvpn的搭建和使用請參考https://www.cnblogs.com/qiuhom-1874/p/13861781.html;今天我們來聊一款和openvpn有類似功能的軟件jumpserver;jumpserver和openvpn都可以讓用戶從互聯網連接公司內網服務器;但通常jumpserver都不會放在互聯網;它主要用作運維、開發、以及測試相關人員來利用它連接公司內網服務器,從而實現集中管理公司內網服務器;同時jumpserver還具有權限管理,用戶管理,以及監控回放等等功能;

  二、jumpserver架構圖

  三、jumpserver服務器安裝

  環境說明

主機名稱 角色 ip地址
node01 jumpserver web 192.168.0.41
node02 mysql/redis 192.168.0.42

 

  

 

 

 

  1、在node02上部署mariadb(版本最低5.5.6,如果是mysql版本最低5.6)

  配置mariadb yum倉庫

[root@node02 ~]# cat /etc/yum.repos.d/mariadb.repo
[mariadb]
name=mariadb repo
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.1.46/yum/centos/7/x86_64/
gpgcheck=0
[root@node02 ~]# 

  安裝MariaDB-server

[root@node02 ~]# yum install -y MariaDB-server

  配置mariadb 忽略名稱解析

  啟動mariadb

  連接mariadb 創建數據庫和用戶

[root@node02 ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.46-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database jumpserver default charset 'utf8' collate 'utf8_bin';
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'%' identified by 'admin123.com';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> 

  驗證:使用jumpserver登錄數據庫

[root@node02 ~]# mysql -ujumpserver -padmin123.com -h192.168.0.42
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.1.46-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jumpserver         |
| test               |
+--------------------+
3 rows in set (0.01 sec)

MariaDB [(none)]> exit
Bye
[root@node02 ~]# 

  ok,到此數據服務就准備好了;

  2、在node02上部署redis

  安裝redis

[root@node02 ~]# yum -y install redis

  配置redis監聽本機所有地址,並設置密碼

[root@node02 ~]# grep -Ei "^(bind|requirepass)" /etc/redis.conf
bind 0.0.0.0
requirepass admin123.com
[root@node02 ~]# 

  啟動redis

  驗證:登錄redis

[root@node02 ~]# redis-cli -h 192.168.0.42
192.168.0.42:6379> KEYS *
(error) NOAUTH Authentication required.
192.168.0.42:6379> AUTH admin123.com
OK
192.168.0.42:6379> KEYS *
(empty list or set)
192.168.0.42:6379> exit
[root@node02 ~]# 

  到此redis就准備好了

  3、在node01上部署jumpserver web 容器

  配置docker-ce的yum源

[root@node01 ~]# cat /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[root@node01 ~]# 

  安裝docker-ce

[root@node01 ~]# yum install -y docker-ce

  啟動docker

[root@node01 ~]# systemctl start docker
[root@node01 ~]# docker info 
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.13
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.781GiB
 Name: node01.test.org
 ID: JQY2:LCCM:EU6J:ARI7:UCEL:5HUV:FGE4:6RTY:PWR3:NKJI:EA3K:BKSA
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

[root@node01 ~]# 

  配置docker加速器

[root@node01 ~]# cat /etc/docker/daemon.json
{
        "registry-mirrors": ["https://registry.docker-cn.com","https://cyr1uljt.mirror.aliyuncs.com"]
}
[root@node01 ~]# 

  重啟docker

[root@node01 ~]# systemctl restart docker

  使用doker info 命令驗證加速器地址是否應用

  下載jumpserver web鏡像

[root@node01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@node01 ~]# docker pull jumpserver/jms_all:v2.4.0
v2.4.0: Pulling from jumpserver/jms_all
75f829a71a1c: Pull complete 
f9c494d6df5d: Pull complete 
5135b4193f02: Pull complete 
918e815b1dc8: Pull complete 
0334369c4479: Pull complete 
64a0f2a7663a: Pull complete 
Digest: sha256:2081c88eca6dffb41bc42d8fe06d18c4379eacdbb354fa56dffd2a918738274d
Status: Downloaded newer image for jumpserver/jms_all:v2.4.0
docker.io/jumpserver/jms_all:v2.4.0
[root@node01 ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
jumpserver/jms_all   v2.4.0              3418bbaaded1        9 days ago          1.54GB
[root@node01 ~]# 

  編寫生成SECRET_KEY和BOOTSTRAP_TOKEN的腳本

[root@node01 ~]# cat key_gen.sh
#!/bin/bash
if [ ! "$SECRET_KEY" ]; then
  SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`;
  echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc;
  echo $SECRET_KEY;
else
  echo $SECRET_KEY;
fi  
if [ ! "$BOOTSTRAP_TOKEN" ]; then
  BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`;
  echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc;
  echo $BOOTSTRAP_TOKEN;
else
  echo $BOOTSTRAP_TOKEN;
fi
[root@node01 ~]# 

  提示:上面腳本主要是判斷是否有SECRET_KEY和BOOTSTRAP這兩個key,如果沒有就生成,並把SECRET_KEY保存到SECRET_KEY並放到當前家目錄的.bashrc中,並打印出來,如果有就直接打印出來;

  運行腳本生成SECRET_KEY和BOOTSTRAP_TOKEN

[root@node01 ~]# bash key_gen.sh
wIUaeZtCbtTNUDL9igEIImALjjaMo9ygPwfMWmPZcyWD0c3K9Q
Lx15DW9xDxqOkiCq
[root@node01 ~]# 

  提示:這兩個隨機密鑰很重要,它用來加密數據庫字段用的,所以在環境遷移和升級都會用到這兩個key;

  創建用戶保存jumpserver容器中的數據目錄

[root@node01 ~]# mkdir /data/jumpserver/ -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/jumpserver/’
[root@node01 ~]# 

  啟動jumpserver/jms_all:v2.4.0鏡像為容器

[root@node01 ~]# docker run --name jms_all -d \
>   -v /data/jumpserver/:/opt/jumpserver/data \
>   -p 80:80 \
>   -p 2222:2222 \
>   -e SECRET_KEY=wIUaeZtCbtTNUDL9igEIImALjjaMo9ygPwfMWmPZcyWD0c3K9Q \
>   -e BOOTSTRAP_TOKEN=Lx15DW9xDxqOkiCq \
>   -e DB_HOST=192.168.0.42 \
>   -e DB_PORT=3306 \
>   -e DB_USER=jumpserver \
>   -e DB_PASSWORD=admin123.com \
>   -e DB_NAME=jumpserver \
>   -e REDIS_HOST=192.168.0.42 \
>   -e REDIS_PORT=6379 \
>   -e REDIS_PASSWORD=admin123.com \
>   --privileged=true \
>   jumpserver/jms_all:v2.4.0
8974115a714c5000bac47a8a457190408861ad1967429435ad4f6a0b838c2fe3
[root@node01 ~]# docker ps 
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                                        NAMES
8974115a714c        jumpserver/jms_all:v2.4.0   "./entrypoint.sh"   14 seconds ago      Up 12 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:2222->2222/tcp   jms_all
[root@node01 ~]# ss -tnl
State      Recv-Q Send-Q                  Local Address:Port                                 Peer Address:Port              
LISTEN     0      128                                 *:22                                              *:*                  
LISTEN     0      100                         127.0.0.1:25                                              *:*                  
LISTEN     0      128                                :::2222                                           :::*                  
LISTEN     0      128                                :::80                                             :::*                  
LISTEN     0      128                                :::22                                             :::*                  
LISTEN     0      100                               ::1:25                                             :::*                  
[root@node01 ~]# 

  提示:以上啟動容器主要指定了mariadb和redis服務器的相關地址和密碼端口信息;其中在宿主機上暴露了80和2222端口;

  查看日志

  提示:使用docker logs -f 容器id 能夠看到上圖中的信息,說明jumpserver容器就跑起來了;

  訪問jumpserver

  提示:訪問jumpserver容器所在主機的ip地址即可訪問到jumpserver,默認用戶名和密碼都是admin;

  提示:第一次登陸時,它會讓我們重設密碼;

  提示:重設密碼后,重新登錄,jumpserver的首頁就是上圖這樣;后續我們就可以在這個界面來管理內網服務器了;到此jumpserver服務器就搭建好了;

  四、jumpserver使用

  1、jumpserver基本設置

  提示:基本設置是必須設置當前jumpserver的url和郵件主題前綴;這樣在用戶收到郵件中的鏈接都會指向這個jumpserver的url;

  2、配置jumpserver發郵件的郵件服務器和用戶名密碼

  提示:在系統設置--->郵件設置,把對應的賬號信息,郵件服務器信息都填寫好,然后測試連接,如果可以正常收到郵件,說明郵件服務器信息和郵件用戶名密碼沒有問題;最后點提交;

  3、創建用戶

  提示:在用戶管理--->用戶列表--->創建;填寫好用戶相關信息后,點擊最下面的提交;

  提示:新建用戶成功以后,對應的用戶郵箱就會收到一份有jumpserver發送到用戶創建成功的郵件,用戶可以點擊此郵件中的鏈接進行密碼設定;

  提示:密碼設定好了,點擊設置;用戶會收到一份密碼更新成功的郵件;

  4、創建用戶組,並把test用戶添加到對應的組中;

  提示:用戶管理--->用戶組---->創建,填寫好組信息和選擇好用戶后,點擊提交即可;

  5、jumpserver 資產管理--->管理用戶創建

  提示:資產管理---->管理用戶---->創建,填寫好對應被管控端的管理員和密碼點擊提交;管理用戶是資產(被控服務器)上的 root,或擁有 NOPASSWD: ALL sudo 權限的用戶, JumpServer 使用該用戶來 `推送系統用戶`、`獲取資產硬件信息` 等。 

  6、創建系統用戶,這里的系統用戶是指我們使用jumpserver登錄到對應的被管控主機時用的用戶

  提示:資產管理--->系統用戶--->新建,填寫好用戶名,勾選自動推送和自動生成密鑰,點擊最下方的提交即可;這里填寫的用戶會用作jumpserver上登錄對應的主機用到用戶,如果被管控端沒有這個用戶,jumpserver就會利用我們剛才添加的管理用戶去創建一個這里的系統用戶;

  7、創建資產

  提示:資產管理--->資產列表--->新建,填寫對應被管控的的主機信息和ip地址信息,以及管理用戶,點擊最下方的提交;

  提示:提交完成后,我們就可以在資產列表中看到我們剛才添加到主機;

  8、資產授權

  提示:權限管理--->資產授權--->創建,填寫好名稱后,要選擇用戶和組以及資產和系統用戶,然后點擊最下方的提交;到此一個資源就授權給test用戶和test組中的成員了;這里需要注意一點,一個節點中有很多server,如果你只想授權單台server給某個用戶,下面的節點就留空,如果你想授權一個節點給用戶你可以選擇節點,上面的資產就可以留空,如果你又想授權單個資產和某個節點給用戶,就選擇對應的資產和節點即可;如果這里選擇default節點,表示把default節點下的所有主機都授權給用戶;默認default節點包含所有主機;

  驗證:使用test用戶登錄jumpserver,看看test用戶是否能夠看到我們創建的資源?

  提示:首次登陸,它會讓我們更新用戶的信息,然后同一些條款,這個我們按照實際信息來修改即可;在我的資產中可以看到當前用戶有點資產;

  驗證:使用test用戶連接node01看看是否可以連接到node01?

  提示:可以看到test用戶是可以正常使用我們配置的jumpserver用戶正常正常的連接到node01;

  9、查看用戶操作回放

  提示:點擊會話管理---->會話管理---->歷史會話----> 找到對應會話后面的回放即可查看對應用戶在過去會話中執行的操作;

  好了,jumpserver的基本操作就到此為止了,后續其他日志啊,都可以在web上點擊對應的菜單查看,我這里就不過多闡述了;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM