jumpserver部署使用

1874發表於2020-10-25

  一、簡介

  前面我們聊到了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上點選對應的選單檢視,我這裡就不過多闡述了;

相關文章