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