一、簡介
前面我們聊到了open***的部署和使用,它能夠實現從互聯網通過open***連接到公司內網服務器,從而進行遠程管理;但open***有一個缺點它不能記錄哪些用戶在內網服務器上操作了什麼,擁有客戶端的證書和私鑰以及ca的證書和客戶端配置,就可以直接連接到公司內網,這從某些角度講不是一個安全的解決方案;
今天我們來聊一款和open***有類似功能的軟件jumpserver;jumpserver和open***都可以讓用戶從互聯網連接公司內網服務器;但通常jumpserver都不會放在互聯網;它主要用作運維、開發、以及測試相關人員來利用它連接公司內網服務器,從而實現集中管理公司內網服務器;同時jumpserver還具有權限管理,用戶管理,以及監控回放等等功能;
二、jumpserver架構圖
三、jumpserver服務器安裝
環境說明
<table style="height: 133px; width: 366px" border="0" align="left"><tbody><tr><td>主機名稱</td><td>角色</td><td>ip地址</td></tr><tr><td>node01</td><td>jumpserver web</td><td>192.168.0.41</td></tr><tr><td>node02</td><td>mysql/redis</td><td>192.168.0.42</td></tr></tbody></table>
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上點擊對應的菜單查看,我這裏就不過多闡述了;