堡壘機介紹

28.1 堡壘機介紹

什麼是堡壘機

堡壘機,即在一個特定的網絡環境下,爲了保障網絡和數據不受來自外部和內部用戶的入侵和破壞,而運用各種技術手段實時收集和監控網絡環境中每一個組成部分的系統狀態、安全事件、網絡活動,以便集中報警、及時處理及審計定責。

其從功能上講,它綜合了核心系統運維和安全審計管控兩大主幹功能,從技術實現上講,通過切斷終端計算機對網絡和服務器資源的直接訪問,而採用協議代理的方式,接管了終端計算機對網絡和服務器的訪問。形象地說,終端計算機對目標的訪問,均需要經過運維安全審計的翻譯。打一個比方,運維安全審計扮演着看門者的工作,所有對網絡設備和服務器的請求都要從這扇大門經過。因此運維安全審計能夠攔截非法訪問,和惡意攻擊,對不合法命令進行命令阻斷,過濾掉所有對目標設備的非法訪問行爲,並對內部人員誤操作和非法操作進行審計監控,以便事後責任追蹤。

我們也把堡壘機稱爲跳板機,簡易的跳板機功能簡單,核心功能是遠程登錄服務器和日誌審計,但堡壘機還有資產管理(CMDB)、監控及用戶權限等功能。目前比較優秀的開源軟件有Jumpserver、Teleport、GateOne、CrazyEye等;商業的堡壘機功能更爲強大,有齊治、Citrix XenApp等。

搭建簡易的堡壘機

接下來我們嘗試搭建一個簡易的堡壘機,主要功能是登錄內網的服務器和日誌審計。

搭建堡壘機的條件是,該機器有公網ip和內網ip,其中內網和其他機器互通。

設計堡壘機的思路:

  1. 對該機器做安全限制:端口限制、登錄限制(SSH)、用戶和命令限制;
  2. 客戶機日誌審計。
  • 下載安裝jailkit實現chroot:
[root@lzx ~]# cd /usr/local/src/
[root@lzx src]# wget https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.bz2
[root@lzx src]# tar jxvf jailkit-2.19.tar.bz2
[root@lzx src]# cd jailkit-2.19
[root@lzx jailkit-2.19]# ./configure 
[root@lzx jailkit-2.19]# echo $?
0
[root@lzx jailkit-2.19]# make && make install
[root@lzx jailkit-2.19]# echo $?
0
  • 創建虛擬系統根目錄:
[root@lzx jailkit-2.19]# mkdir /home/jail         //作爲虛擬系統根目錄
[root@lzx jailkit-2.19]# jk_init -v -j /home/jail/ basicshell       //shell相關命令、庫文件
[root@lzx jailkit-2.19]# jk_init -v -j /home/jail/ editors        //vi及vim等編輯器
[root@lzx jailkit-2.19]# jk_init -v -j /home/jail/ netutils        //網絡相關
[root@lzx jailkit-2.19]# jk_init -v -j /home/jail/ ssh          //SSH登錄相關,這幾步是將常用命令複製到 /home/jail 中
  • 添加測試用戶:
[root@lzx jailkit-2.19]# useradd zhangsan
[root@lzx jailkit-2.19]# passwd zhangsan
Changing password for user zhangsan.
New password:             //設置密碼123456,後面需要登錄
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@lzx jailkit-2.19]# mkdir /home/jail/usr/sbin
[root@lzx jailkit-2.19]# cp /usr/sbin/jk_lsh /home/jail/usr/sbin/jk_lsh       //拷貝虛擬系統shell
[root@lzx jailkit-2.19]# jk_jailuser -m -j /home/jail/ zhangsan       //創建虛擬系統中用戶
[root@lzx jailkit-2.19]# cd /home/jail/
[root@lzx jail]# ll
total 0
lrwxrwxrwx 1 root root   7 Oct  3 23:03 bin -> usr/bin
drwxr-xr-x 2 root root  44 Oct  3 23:04 dev
drwxr-xr-x 2 root root 240 Oct  3 23:04 etc
drwxr-xr-x 3 root root  22 Oct  3 23:12 home
lrwxrwxrwx 1 root root   9 Oct  3 23:03 lib64 -> usr/lib64
drwxr-xr-x 7 root root  70 Oct  3 23:09 usr
[root@lzx jail]# cat etc/passwd 
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1001:1001::/home/zhangsan:/usr/sbin/jk_lsh        //上面創建的虛擬系統用戶
[root@lzx jail]# vim !$        //修改爲下面內容
vim etc/passwd

root:x:0:0:root:/root:/bin/bash
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash         //修改爲/bin/bash才能登錄該虛擬系統用戶
  • 使用xshell登錄該虛擬用戶:

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

成功登錄後,我們查看一下

[zhangsan@lzx ~]$ ls
[zhangsan@lzx ~]$ ll /
bash: ll: command not found
[zhangsan@lzx ~]$ ls -l /
total 0
lrwxrwxrwx 1 root root   7 Oct  4 03:03 bin -> usr/bin
drwxr-xr-x 2 root root  44 Oct  4 03:04 dev
drwxr-xr-x 2 root root 240 Oct  4 03:25 etc
drwxr-xr-x 3 root root  22 Oct  4 03:12 home
lrwxrwxrwx 1 root root   9 Oct  4 03:03 lib64 -> usr/lib64
drwxr-xr-x 7 root root  70 Oct  4 03:09 usr
[zhangsan@lzx ~]$           //這裏按兩下Tab鍵
Display all 116 possibilities? (y or n)        
!          command    elif       gunzip     more       sh         typeset
./         compgen    else       gzip       mv         shift      ulimit
:          complete   enable     hash       popd       shopt      umask
[          compopt    esac       help       printf     sleep      unalias
[[         continue   eval       history    pushd      source     unset
]]         coproc     exec       if         pwd        ssh        until
alias      cp         exit       in         read       suspend    vi
bash       cpio       export     jobs       readarray  sync       vim
bg         date       false      kill       readonly   tar        wait
bind       dd         fc         let        return     test       wget
break      declare    fg         ln         rm         then       while
builtin    dirs       fgrep      local      rmdir      time       zcat
caller     disown     fi         logout     rsync      times      {
case       do         for        ls         scp        touch      }
cat        done       function   mapfile    sed        trap       
cd         echo       getopts    mkdir      select     true       
chmod      egrep      grep       mktemp     set        type           //這些就是該虛擬用戶所能執行的命令
  • 限定SSH登錄:
[root@lzx jail]# vim /etc/ssh/sshd_config       //做下面修改
PasswordAuthentication yes         改爲       PasswordAuthentication no       //不允許密碼登錄
  • 添加防火牆規則:
[root@lzx jail]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT        //打開22端口
  • 限定登錄ip:
[root@lzx jail]# vim /etc/hosts.allow
sshd: 192.168.100.0/24 1.1.1.1 2.2.2.2          //類似這樣限制登錄的ip
[root@lzx jail]# vim /etc/hosts.deny
sshd: ALL           //除了上面允許的可以登錄,其他所有均不允許登錄

接下來還要做日誌審計功能,這一步需要我們在所有被登陸的機器上操作。

這裏我讓lzx作爲跳板機,lzx1作爲客戶機,在lzx1上操作。

[root@lzx1 ~]# vim /etc/hosts.allow
sshd:192.168.100.150
[root@lzx1 ~]# vim /etc/hosts.deny
sshd:ALL
[root@lzx1 ~]# mkdir /usr/local/records
[root@lzx1 ~]# chmod 777 !$
chmod 777 /usr/local/records
[root@lzx1 ~]# chmod +t !$          //增加防刪除權限,類似/tmp目錄
chmod +t /usr/local/records

[root@lzx1 ~]# vim /etc/profile       //添加下面內容
 if [ ! -d  /usr/local/records/${LOGNAME} ]
then
mkdir -p /usr/local/records/${LOGNAME}         //根據登錄名創建同名子文件夾
chmod 300 /usr/local/records/${LOGNAME}        //賦予300權限
fi
export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history"         //指定記錄命令歷史的文件
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'       //具體記錄命令歷史的格式

再用xshell連接一下這臺機器

[root@lzx1 ~]# ls /usr/local/records/    
root        //已經有root用戶的登錄記錄
[root@lzx1 ~]# ls /usr/local/records/root/
bash_history
[root@lzx1 ~]# cat /usr/local/records/root/bash_history 
2018-10-04 00:34:30 ##### root pts/1 (192.168.100.1) #### reboot    

[root@lzx1 ~]# w
 00:36:53 up 33 min,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.100.1    00:16   13.00s  0.02s  0.02s -bash
root     pts/1    192.168.100.1    00:34    5.00s  0.00s  0.00s w
[root@lzx1 ~]# ls
anaconda-ks.cfg
[root@lzx1 ~]# cat /usr/local/records/root/bash_history 
2018-10-04 00:34:30 ##### root pts/1 (192.168.100.1) #### reboot
2018-10-04 00:36:53 ##### root pts/1 (192.168.100.1) #### w
2018-10-04 00:36:57 ##### root pts/1 (192.168.100.1) #### ls       //這邊馬上就有記錄
  • 在lzx1上創建新用戶,然後通過lzx登錄該用戶:

lzx1上創建用戶

[root@lzx1 ~]# useradd lisi
[root@lzx1 ~]# passwd lisi
Changing password for user lisi.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

lzxSSH登錄lzx1上該用戶

[root@lzx jail]# ssh [email protected]
The authenticity of host '192.168.100.160 (192.168.100.160)' can't be established.
ECDSA key fingerprint is SHA256:teKu3atU+OByPeXXD2xXhyb30vg6nW8ETqqCr785Dbc.
ECDSA key fingerprint is MD5:13:a4:f1:c0:1f:62:65:d4:f4:4e:42:ab:40:f1:36:60.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.160' (ECDSA) to the list of known hosts.
[email protected]'s password: 
[lisi@lzx1 ~]$ ls 
[lisi@lzx1 ~]$ w
 00:40:50 up 37 min,  3 users,  load average: 0.02, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.100.1    00:16    2.00s  0.03s  0.01s ssh [email protected].
root     pts/1    192.168.100.1    00:34    3:54   0.00s  0.00s -bash
lisi     pts/2    192.168.100.150  00:40    2.00s  0.00s  0.00s w
[lisi@lzx1 ~]$ ls /usr/local/records/
lisi  root
[lisi@lzx1 ~]$ cd /usr/local/records/lisi/
[lisi@lzx1 lisi]$ ls
ls: cannot open directory .: Permission denied         //這裏是無法讀取內容的,只有300權限

lzx1上查看命令歷史記錄

[root@lzx1 ~]# cat /usr/local/records/lisi/bash_history 
2018-10-04 00:40:46 ##### lisi pts/2 (192.168.100.160) #### 
2018-10-04 00:40:49 ##### lisi pts/2 (192.168.100.160) #### ls
2018-10-04 00:40:50 ##### lisi pts/2 (192.168.100.160) #### w
2018-10-04 00:41:16 ##### lisi pts/2 (192.168.100.160) #### ls /usr/local/records/
2018-10-04 00:41:30 ##### lisi pts/2 (192.168.100.160) #### cd /usr/local/records/lisi/
2018-10-04 00:41:31 ##### lisi pts/2 (192.168.100.160) #### ls

這裏就簡單是實現了堡壘機的功能,但是這種方法是不完美的,也是可以破解的。我們想要實現比較完善的堡壘機功能,還是需要藉助一些專門的工具或軟件。


28.2 Jumpserver

Jumpserver介紹

官網:http://www.jumpserver.org/ ,安裝文檔:http://docs.jumpserver.org/zh/docs/step_by_step.html

jumpserver是一款使用Python、Django開發的開源跳板機系統,可以實現認證、授權、審計及自動化運維功能,助力企業高效用戶、資產、權限、審計管理。它是完全開源的,我們可以針對它來進行二次開發,實現更多的功能。

jumpserver採納分佈式架構,支持多機房跨區域部署,中心節點提供 API,各機房部署登錄節點,可橫向擴展、無併發限制。

功能:

Auth統一認證
CMDB資產管理
日誌審計
自動化運維(ansible)

安裝Jumpserver

  • 下載安裝腳本:
[root@lzx ~]# wget https://raw.githubusercontent.com/jumpserver/Dockerfile/mysql/get.sh         //下載安裝腳本
[root@lzx ~]# ls 
anaconda-ks.cfg  get.sh
[root@lzx ~]# cat get.sh         //腳本內容其實和安裝文檔基本一致,這個腳本是在docker容器中運行jumpserver,同時可對Windows機器進行資產管理
#!/bin/bash
# coding: utf-8
# Copyright (c) 2018
# Gmail: liuzheng712
#

set -e

echo "0. 系統的一些配置"
setenforce 0 || true
systemctl stop iptables.service || true
systemctl stop firewalld.service || true

localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf

echo "1. 安裝基本依賴"
{
yum update -y && yum install epel-release -y && yum update -y && yum install wget zip unzip epel-release nginx sqlite-devel xz gcc automake zlib-devel openssl-devel redis mariadb mariadb-devel mariadb-server supervisor -y
} || {
echo "yum出錯,請更換源重新運行"
exit 1
}
cd /opt/

echo "2. 準備python"
{
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz -O /opt/Python-3.6.1.tar.xz
} || {
echo "pyhton 依賴包下載出錯,請嘗試使用特殊工具進行手工下載https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz ,並且放至於/opt/Python-3.6.1.tar.xz,如您是手工下載,請註釋上面wget命令再運行本腳本"
exit 1
}

{
tar xf Python-3.6.1.tar.xz  && cd Python-3.6.1 && ./configure && make && make install
} || {
echo "解壓或編譯python出錯,請嘗試使用上面的命令手工解壓或編譯,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}
{
python3 -m venv /opt/py3
} || {
echo "建立python虛擬環境出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}
cd /opt/

echo "3. 下載包並解壓"
{
wget https://github.com/jumpserver/jumpserver/archive/1.0.0.zip -O /opt/jumpserver.zip
} || {
echo "下載jumpserver包出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}
{
wget https://github.com/jumpserver/coco/archive/1.0.0.zip -O /opt/coco.zip
} || {
echo "下載coco包出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}
{
wget https://github.com/jumpserver/luna/releases/download/v1.0.0/luna.tar.gz -O /opt/luna.tar.gz
} || {
echo "下載luna包出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}
cd /opt
{
unzip coco.zip && mv coco-1.0.0 coco && unzip jumpserver.zip && mv jumpserver-1.0.0 jumpserver && tar xzf luna.tar.gz
} || {
echo "解壓出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}

echo "4. 安裝yum依賴"
{
yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) && yum -y install $(cat /opt/coco/requirements/rpm_requirements.txt)
} || {
echo "安裝jumpserver的依賴出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}

echo "5. 安裝pip依賴"
{
source /opt/py3/bin/activate && pip install --upgrade pip && pip install -r /opt/jumpserver/requirements/requirements.txt &&  pip install -r /opt/coco/requirements/requirements.txt
} || {
echo "安裝jumpserver的依賴出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}
echo "6. 創建數據庫"
mkdir -p /opt/mysql/share/mysql/
{
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/mysql_security.sql?raw=true -O /opt/mysql/mysql_security.sql
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/mysql.cnf?raw=true -O /etc/my.cnf
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/errmsg.sys?raw=true -O /opt/mysql/share/mysql/errmsg.sys
} || {
echo "下載數據庫依賴文件出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}

echo "7. 準備文件"
{
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/nginx.conf?raw=true -O /etc/nginx/nginx.conf
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/supervisord.conf?raw=true -O /etc/supervisord.conf
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/jumpserver_conf.py?raw=true -O /opt/jumpserver/config.py
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/coco_conf.py?raw=true -O /opt/coco/conf.py
wget https://github.com/jumpserver/Dockerfile/blob/mysql/alpine/start_jms.sh?raw=true -O /opt/start_jms.sh
} || {
echo "下載配置文件出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}

echo "8. 配置nginx"
cat << EOF > /etc/nginx/conf.d/jumpserver.conf
server {
    listen 80;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/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/;  # 如果coco安裝在別的服務器,請填寫它的ip
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /guacamole/ {
        proxy_pass       http://localhost:8081/;  # 如果guacamole安裝在別的服務器,請填寫它的ip
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        access_log off;
    }

    location / {
        proxy_pass http://localhost:8080;  # 如果jumpserver安裝在別的服務器,請填寫它的ip
    }
}

EOF

mkdir -p /opt/nginx/log && chmod -R 777 /opt/nginx
{
systemctl restart nginx
systemctl enable nginx
} || {
service restart nginx
} || {
nginx -s reload
} || {
echo "請檢查nginx的啓動命令"
exit 1
}

echo "jumpserver安裝完成,請運行/opt/start_jms.sh啓動jumpserver"

echo "下面開始安裝windows組件guacamole,如果不需要管理windows資產,可以取消繼續安裝"

echo "9. 安裝docker"
yum check-update
{
curl -fsSL https://get.docker.com/ | sh
} || {
echo "安裝docker 出錯,請嘗試手工執行,如手工操作成功,請註釋上述代碼再運行本腳本"
exit 1
}

systemctl start docker
systemctl enable docker

echo "10. 安裝guacamole"
host_ip=`python -c "import socket;print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])"`

docker run --name jms_guacamole -d \
  --restart always \
  -p 8081:8080 -v /opt/guacamole/key:/config/guacamole/key \
  -e JUMPSERVER_KEY_DIR=/config/guacamole/key \
  -e JUMPSERVER_SERVER=http://$host_ip:8080 \
  registry.jumpserver.org/public/guacamole:1.0.0
[root@lzx ~]# sh get.sh         //執行安裝腳本,這個過程時間比較長
[root@lzx ~]# echo $?
0
  • 啓動jumpserver:
[root@lzx ~]# cd /opt/
[root@lzx opt]# sh start_jms.sh          //啓動jumpserver,建議放到後臺執行

登錄jumpserver

  • 登錄:

輸入堡壘機IP進入jumpserver,輸入賬號(admin)、密碼(admin)登錄

在這裏插入圖片描述

進來之後,顯示爲這樣

在這裏插入圖片描述

  • 修改密碼:

點擊Administrator–>個人信息–>重置密碼

在這裏插入圖片描述

重置完密碼之後需要重新登錄

  • 基本設置:

點擊系統設置,直接在基本設置這裏,填入堡壘機IP,點擊提交

在這裏插入圖片描述

  • 郵箱設置:

點擊郵件設置,填入對應郵箱的SMTP主機、端口、賬號和密碼(授權碼)

在這裏插入圖片描述

點擊測試,會發送一封郵件到郵箱賬號,如果能接收到,說明郵箱設置沒問題

在這裏插入圖片描述

這些設置需要手動重啓一下jms服務才能生效。

創建管理用戶

管理用戶是服務器的root,或擁有 NOPASSWD: ALL sudo權限的用戶,Jumpserver使用該用戶來 推送系統用戶獲取資產硬件信息等。

點擊資產管理–>管理用戶–>創建管理用戶

在這裏插入圖片描述

指定用戶名爲jump,生成密鑰對

[root@lzx ~]# cd .ssh/
[root@lzx .ssh]# ssh-keygen -f jump        //-f 指定密鑰對名字
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):         //直接回車
Enter same passphrase again:           //直接回車
Your identification has been saved in jump.
Your public key has been saved in jump.pub.
The key fingerprint is:
SHA256:RKNvYt4C6LS3D9BRUOUy4GZZWiMtS1xe0tPlotbVR0M root@lzx
The key's randomart image is:
+---[RSA 2048]----+
|   .+=Oo=. .. .E.|
|   .+X.Bo... . ..|
|   .Bo= o.. o . .|
|   =.. = o o   . |
|  + o o S .      |
| o o + =         |
|  o o o .        |
|   . o .         |
|    ...          |
+----[SHA256]-----+
[root@lzx .ssh]# ls
authorized_keys  jump  jump.pub

我們要的是私鑰,將私鑰複製粘貼到一個文本文檔,導入

[root@lzx .ssh]# cat jump
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAsT/iVUC2flWb2nDCb2EIb09f6qd9fvS9XcszH5nnKfgKeoJj
Er1AnPa8phRmWXUmWIujK+88FMa6AmFxPIJTkhI8TVbO0yMiAum692KcHy8oSnMd
3Sml/ZFTN/x4/6qCQo/GeTq2uD/peahSOvnKUSnapmsT2rQA2d7A11y/AfPd+mh0
eVygm3k1drABdvgPigX2Gmv+P8fA7v20Oww4Kc2egk/33YVg4DlXcT56fzzlxNpP
t3qd3z7/0+QJEInm++phRdYlzDkEsw81/HuAMmF2dCRfCLaOwryxxoczaxcqToX7
3z6spq1u/SsSFHS9hBcKBv1yzjbihqUOKPMIBQIDAQABAoIBABSiGCnOb7ADLTJf
f/LRO9chSUwalTxLJyQc/GWIV+WFz0p1lSzgRP5AprM6mrN9NKqIDsWVgsv0WkDe
sPzXOv09DDIAkfD4HQRzyuTzYLMsnScVgXt2VrFO0n4o8LjqU2GGNRd1o0GNhxM3
aeMdotSR57cJrfT+kT7LdG1diYqjdA4kYFL3KHb427oUths2k0sV15LzucTbMrtv
2/HQYfYZNwacMP7UTXP44TLzPlby/4/gmDmR/eel634Q5EWDkLBUejc5xbyN9z6Y
0nmmEssa7ZHyyF0BljawIXWB+qAuaq3dn1+A5vmSDH+2Wjh4YiZsEKl7AMM9EBjo
3OtNxcECgYEA5ca0poPIrgF/fP30+5iu7oPISR1NmSbPXMOZDLz7fvRMQr13fgkE
KwhJ2GoM5siaAY+/UqcO8HGcvI58HUdHO5TZknEpbWlo338ZuGyXBns7Tuy2FE+U
FrXPVDiC0OqcbhGpKBM7KkGtsmp7vy5X9QayakpqxGCFK5RY8cG3mHECgYEAxXqG
YywOlL2RVmOTUdeNMo1VYLj0wtV9a/d+2Uz+x0lUwhZp0iY0ORbXmTUmmCuARyKc
WBizo7WEXAk6Em3keHfFY4/IxkRr0bJDGn0Mj2uXA8MmIrs3gFRj6hmhMDIf1hme
VnXdpFZmt9l+TO6MXsLHrc/Yb7zKvHvyL6itUtUCgYEA2ioFggikNNrFQlcaEPyS
M3K6avlAoUZhInGw0pBotcycz813NBq5c2ZGPw3KPCGBYDQs8vwdShyFNd6PZ3ky
4BZfUhTRwcmQwou6TwoDhyrgT/qeksBQGhP7y7pwMo5fgn6QPrWrul5r3ngOEKKe
7s2x/wuzPctrBcqvfLNyb3ECgYEAg9aV65WZMnIQmpUl4EjAqlQzALzaI0z2S+NS
m25M1e0+Gclu4m7BBLAcRdt3JbY9EMCpkiMDozLm5679Rxp4oniLnjl69+rr9HZH
WGLNxN42VrutNRi6KAGvJrXvp8Z+/KfjzqMn0rQgJXOdX20O56CwQHj3bTmkPAuf
l3PMKvUCgYA09+rycOzqDF/eawtByzkRD6OaEliIiqXhdBntK6n6NxJB1++uL9F2
5WPW7KAFWdz/pNjYJ7LDLJeN8WWBJSvMS/v1a9PSRp7xal8i/853mqIbGZMLMwQC
Trdyy1Vq37zZjqiCy5LXoyUJ+4zCRGaSbxU0RHA7srIh/iJlm+i0iw==
-----END RSA PRIVATE KEY-----

在這裏插入圖片描述

在這裏插入圖片描述

點擊提交後提示 jump 創建成功。

在這裏插入圖片描述

之後需要到客戶機上創建用戶jump,並複製堡壘機上的公鑰到authorized_keys文件中

[root@lzx .ssh]# cat jump.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxP+JVQLZ+VZvacMJvYQhvT1/qp31+9L1dyzMfmecp+Ap6gmMSvUCc9rymFGZZdSZYi6Mr7zwUxroCYXE8glOSEjxNVs7TIyIC6br3YpwfLyhKcx3dKaX9kVM3/Hj/qoJCj8Z5Ora4P+l5qFI6+cpRKdqmaxPatADZ3sDXXL8B8936aHR5XKCbeTV2sAF2+A+KBfYaa/4/x8Du/bQ7DDgpzZ6CT/fdhWDgOVdxPnp/POXE2k+3ep3fPv/T5AkQieb76mFF1iXMOQSzDzX8e4AyYXZ0JF8Ito7CvLHGhzNrFypOhfvfPqymrW79KxIUdL2EFwoG/XLONuKGpQ4o8wgF root@lzx

lzx1(客戶機)上操作

[root@lzx1 ~]# useradd jump
[root@lzx1 ~]# su - jump
[jump@lzx1 ~]$ mkdir .ssh
[jump@lzx1 ~]$ vim .ssh/authorized_keys        //添加下面內容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxP+JVQLZ+VZvacMJvYQhvT1/qp31+9L1dyzMfmecp+Ap6gmMSvUCc9rymFGZZdSZYi6Mr7zwUxroCYXE8glOSEjxNVs7TIyIC6br3YpwfLyhKcx3dKaX9kVM3/Hj/qoJCj8Z5Ora4P+l5qFI6+cpRKdqmaxPatADZ3sDXXL8B8936aHR5XKCbeTV2sAF2+A+KBfYaa/4/x8Du/bQ7DDgpzZ6CT/fdhWDgOVdxPnp/POXE2k+3ep3fPv/T5AkQieb76mFF1iXMOQSzDzX8e4AyYXZ0JF8Ito7CvLHGhzNrFypOhfvfPqymrW79KxIUdL2EFwoG/XLONuKGpQ4o8wgF root@lzx
[jump@lzx1 ~]$ chmod 700 .ssh/
[jump@lzx1 ~]$ chmod 400 .ssh/authorized_keys 

測試堡壘機是否可以通過私鑰登錄lzx1(客戶機)

[root@lzx .ssh]# ssh -i jump [email protected]        //登錄lzx1
The authenticity of host '192.168.100.160 (192.168.100.160)' can't be established.
ECDSA key fingerprint is SHA256:teKu3atU+OByPeXXD2xXhyb30vg6nW8ETqqCr785Dbc.
ECDSA key fingerprint is MD5:13:a4:f1:c0:1f:62:65:d4:f4:4e:42:ab:40:f1:36:60.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.160' (ECDSA) to the list of known hosts.
Last login: Fri Oct  5 04:24:14 2018
[jump@lzx1 ~]$           //說明沒問題。上面如果提示輸入密碼登錄則說明不成功

這樣,我們jumpserver的管理用戶jump就創建成功了。以後,每增加一臺新機器,都需要在新機器增加用戶jump,同時將公鑰複製到authorized_keys文件中。

創建普通用戶

普通用戶就是用來登錄jumpserver瀏覽器界面的用戶,或者用命令行方式登錄堡壘機的用戶。

首先需要創建一個用戶組 運維 ,用戶管理–>用戶組–>創建用戶組

在這裏插入圖片描述

用戶管理–>用戶列表–>創建用戶,創建一個普通用戶 zhangsan

在這裏插入圖片描述

點擊提交,會發送一封郵件到剛指定的郵箱,是重置密碼的鏈接

這裏我沒有收到郵件,不知道是因爲我用的同一個郵箱地址的關係,還是因爲沒有在jumpserver的配置文件中配置好。不過不要緊,我們可以直接在用戶列表中選擇 zhangsan,點擊更新,重新自定義輸入密碼

在這裏插入圖片描述
在這裏插入圖片描述

假如郵箱配置沒問題,可以直接在用戶列表下點擊zhangsan,進入用戶詳情,重新發送重置密碼郵件或者密鑰郵件

在這裏插入圖片描述

這樣,不管用戶是忘記密碼、忘記密鑰或忘記密鑰密碼都是可以解決的。

添加機器

資產管理不僅僅是linux服務器,還包括了Windows服務器,以及路由器和交換機。

資產管理–>資產列表,左側是資產樹,右擊可以新建、刪除、更改樹節點,授權資產也是以節點方式組織的,右側是屬於該節點下的資產。

右鍵點擊ROOT(0),新建樹節點Linux、Windows

在這裏插入圖片描述

選中Linux節點,點擊創建資產,關聯剛創建的管理用戶jump

在這裏插入圖片描述

點擊提交

在這裏插入圖片描述

因爲關聯了管理用戶jump,所以lzx1上也必須有這個用戶,在之前我們已經創建了該用戶,我們還需要給這個用戶sudo的權限。

[jump@lzx1 ~]$ logout
[root@lzx1 .ssh]# visudo           //添加下面一行
jump    ALL=(ALL)     NOPASSWD: ALL          

然後點擊lzx1,進入資產詳情,右側點擊刷新可以更新硬件信息,這就是通過jump用戶來抓取的。

在這裏插入圖片描述

除了這樣創建以外,我們還可以按照模板批量地導入資產,而不必這樣一個一個去創建。

添加系統用戶並授權

添加完機器後,還需要添加系統用戶,系統用戶是 Jumpserver跳轉登錄資產時使用的用戶,可以理解爲登錄資產用戶。

系統用戶創建時,如果選擇了自動推送 Jumpserver會使用ansible自動推送系統用戶到資產中,如果資產(交換機、windows)不支持ansible, 請手動填寫賬號密碼。 目前還不支持Windows的自動推送。

資產管理–>系統用戶–>創建系統用戶
在這裏插入圖片描述

自動推送會在資產中自動生成該用戶,創建之後點擊zhangsan進入系統用戶詳情,這裏也可以手動去推送及測試連通性

在這裏插入圖片描述

添加授權規則

權限管理–>資產授權,選中Linux節點,點擊創建權限規則

在這裏插入圖片描述

點擊提交,到這裏我們相當於完成了設置的步驟。

接下來就是測試能否使用系統用戶直接登錄到lzx1上,先切換到用戶界面

在這裏插入圖片描述

在這裏插入圖片描述

點擊Web終端,會打開一個新頁面

在這裏插入圖片描述

正常情況下,這裏會顯示登陸後的命令行,可以看到,我沒有登陸上lzx1這個資產,說明實驗過程中還是有問題。另外登錄這一步還可以通過xshell來登錄查看。

可能的原因有三個:

  1. 第一這是jumpserver的最新版本,可能有些bug,之前的0.3.2的版本我也用過,一些設置發生了改變,之前版本有的在新版本中沒有位置進行設置,也是我瞭解不夠,後續仍需要花時間瞭解一下新版本。
  2. 第二就是安裝腳本可能存在一些問題,實驗過程中,瀏覽器界面老是崩掉,提示nginx錯誤,需要我不斷地刷新纔可能正常,這說明jumpserver的啓動腳本可能存在問題。
  3. 第三是我實驗過程的配置存在問題,導致最終結果沒有出來。後面有機會的話,我會按照安裝文檔來進行安裝實驗,再來一次。

更多資料參考:
v0.5.0 應用圖解
Centos6.9 安裝最新版本jumpserver
Jumpserver的搭建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章