CentOS 7配置開源堡壘機jumpserver(1) jumpserver+openldap

CentOS 7配置開源堡壘機jumpserver(1) jumpservr+openldap

一、架構與場景說明

1.1 jumpserver結合openldap配置架構圖

說明:

  1. OpenLDAP用來管理產線服務器賬號與密碼,主機登錄權限以及sudo權限
  2. 在企業中CAS一般由信息化部門(而非運維技術部門)單獨構建,管理組織人員以及內部信息化服務權限認證等,這裏作爲測試就不單獨部署CAS了而是統一使用產線的OpenLDAP服務器
    在這裏插入圖片描述

1.2 組件服務器信息

主機名稱 地址 版本 角色 備註
sysldap-shylf-1 10.116.72.11 CentOS7.6 min openLdap, httpd, phpldapadmin
sysldap-shylf-2 10.116.72.12 CentOS7.6 min openLdap, httpd, phpldapadmin
systerm-shylf-1 10.116.72.13 CentOS7.6 min jumpserver
systerm-shylf-1 10.116.72.15 CentOS7.6 min linux跳板機 terminal
syswterm-shylf-1 10.116.72.16 windows 2012 windows跳板機 terminal

1.3 前置配置

二、Jumpserver配置

這裏jumpserver配置使用官方配置步驟進行配置(我們當前使用的是二次開發的版本),官方配置文檔
安裝文檔 » 一站式、分佈式安裝文檔 » CentOS 7 安裝文檔

本文檔主要是記錄我的配置過程,官方文檔已經很詳細了,我這裏也幾乎沒有改動,照着命令執行。

2.1 組件說明

  • Jumpserver 爲管理後臺, 管理員可以通過 Web 頁面進行資產管理、用戶管理、資產授權等操作, 用戶可以通過 Web 頁面進行資產登錄, 文件管理等操作
  • coco 爲 SSH Server 和 Web Terminal Server 。用戶可以使用自己的賬戶通過 SSH 或者 Web Terminal 訪問 SSH 協議和 Telnet 協議資產
  • Luna 爲 Web Terminal Server 前端頁面, 用戶使用 Web Terminal 方式登錄所需要的組件
  • Guacamole 爲 RDP 協議和 VNC 協議資產組件, 用戶可以通過 Web Terminal 來連接 RDP 協議和 VNC 協議資產 (暫時只能通過 Web Terminal 來訪問)
    各個組件默認使用的端口信息,默認端口可以在相應的配置文件更改
Protocol Server name Port
TCP Jumpserver 8080
TCP coco 2222, 5000
TCP Guacamole 8081
TCP Db 3306
TCP Redis 6379
TCP Nginx 80

備註:jumpserver當前最新版本是1.5.1

2.2 組件jumpserver配置

我這裏關閉了firewalld,禁用了selinux,如果需要啓用的情況下配置,可以參考官方文檔。我是在root賬戶下配置的。

$ yum -y install epel-release
$ yum -y update 
$ yum -y install wget gcc

# 安裝 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke
$ yum -y install redis
$ systemctl enable redis
$ systemctl start redis

# 安裝 MySQL, 如果不使用 Mysql 可以跳過相關 Mysql 安裝和配置, 支持sqlite3, mysql, postgres等
$ yum -y install mariadb mariadb-devel mariadb-server
$ systemctl enable mariadb
$ systemctl start mariadb
# 創建數據庫 Jumpserver 並授權
$ DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`  # 生成隨機數據庫密碼
$ echo -e "\033[31m 你的數據庫密碼是 $DB_PASSWORD \033[0m"
$ mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '$DB_PASSWORD'; flush privileges;"

# 安裝 Nginx, 用作代理服務器整合 Jumpserver 與各個組件
$ vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

$ yum -y install nginx
$ systemctl enable nginx

# 安裝 Python3.6
$ yum -y install python36 python36-devel

# 配置並載入 Python3 虛擬環境
$ cd /opt
$ python3.6 -m venv py3  # py3 爲虛擬環境名稱, 可自定義
$ source /opt/py3/bin/activate  # 退出虛擬環境可以使用 deactivate 命令

# 看到下面的提示符代表成功, 以後運行 Jumpserver 都要先運行以上 source 命令, 載入環境後默認以下所有命令均在該虛擬環境中運行
(py3) [root@localhost py3]

# 下載 Jumpserver,官方文檔是直接github下載最新版本,我這裏從github下固定版本1.5.1
$ cd /opt/
$ wget https://github.com/jumpserver/jumpserver/archive/1.5.1.zip
$ unzip 1.5.1.zip
$ mv jumpserver-1.5.1  jumpserver

# 安裝依賴 RPM 包
$ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)

# 安裝 Python 庫依賴,指定國內源速度快(可以直接寫在配置文件裏 ~/.pip/pip.conf)
$ pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple --trusted-host  mirrors.aliyun.com
$ pip install -r /opt/jumpserver/requirements/requirements.txt -i https://mirrors.aliyun.com/pypi/simple --trusted-host  mirrors.aliyun.com
# 修改 Jumpserver 配置文件
$ cd /opt/jumpserver
$ cp config_example.yml config.yml

$ SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`  # 生成隨機SECRET_KEY
$ echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
$ BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`  # 生成隨機BOOTSTRAP_TOKEN
$ echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc

$ sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
$ sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
$ sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
$ sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
$ sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
$ sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml

$ vi config.yml  # 確認內容有沒有錯誤
省略
  • 運行jumpserver
# 運行 Jumpserver
$ cd /opt/jumpserver
$ ./jms start -d  # 後臺運行使用 -d 參數./jms start -d
# 新版本更新了運行腳本, 使用方式./jms start|stop|status all  後臺運行請添加 -d 參數

2.3 組件coco與guacamole安裝,採用docker模式

在docker容器裏還沒有找到怎麼處理ssh-agent (這個功能使用用來無密碼訪問使用的) ,coco可以從docker裏面拿出來,配置ssh-agent代理私鑰

$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum makecache fast
$ rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
$ yum -y install docker-ce
$ systemctl enable docker
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
$ systemctl restart docker

# 允許 容器ip 訪問宿主 8080 端口, (容器的 ip 可以進入容器查看)
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="8080" accept"
$ firewall-cmd --reload
# 172.17.0.x 是docker容器默認的IP池, 這裏偷懶直接授權ip段了, 可以根據實際情況單獨授權IP

# 獲取當前服務器 IP
$ Server_IP=`ip addr | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
$ echo -e "\033[31m 你的服務器IP是 $Server_IP \033[0m"

# http://<Jumpserver_url> 指向 jumpserver 的服務端口, 如 http://192.168.244.144:8080
# BOOTSTRAP_TOKEN 爲 Jumpserver/config.yml 裏面的 BOOTSTRAP_TOKEN
$ docker run --name jms_coco -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_coco:1.5.1
$ docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole:1.5.1

2.4 組件Luna(web終端)配置

# 安裝 Web Terminal 前端: Luna  需要 Nginx 來運行訪問 訪問(https://github.com/jumpserver/luna/releases)下載對應版本的 release 包, 直接解壓, 不需要編譯
$ cd /opt
$ wget https://github.com/jumpserver/luna/releases/download/1.5.1/luna.tar.gz

# 如果網絡有問題導致下載無法完成可以使用下面地址
$ wget https://demo.jumpserver.org/download/luna/1.5.1/luna.tar.gz

$ tar xf luna.tar.gz
$ chown -R root:root luna

2.5 配置nginx

$ rm -rf /etc/nginx/conf.d/default.conf


$ vi /etc/nginx/conf.d/jumpserver.conf

server {
    listen 80;

    client_max_body_size 100m;  # 錄像及文件上傳大小限制

    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/luna/;  # 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/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location /coco/ {
        proxy_pass       http://localhost:5000/coco/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location /guacamole/ {
        proxy_pass       http://localhost:8081/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


# 運行 Nginx
$ nginx -t   # 確保配置沒有問題, 有問題請先解決
$ systemctl start nginx

# 訪問 http://192.168.244.144 (注意 沒有 :8080 通過 nginx 代理端口進行訪問)
# 默認賬號: admin 密碼: admin  到會話管理-終端管理 接受 coco Guacamole 等應用的註冊
# 測試連接
$ ssh -p2222 [email protected]
$ sftp -P2222 [email protected]          #注意這裏是大寫字母P
  密碼: admin

# sftp默認上傳的位置在資產的 /tmp 目錄下
# windows拖拽上傳的位置在資產的 Guacamole RDP上的 G 目錄下

2.6 coco和guacamole支持多組件負載

coco /guacamole服務默認運行在單核心下面, 當負載過高時會導致用戶訪問變慢, 這時可運行多個 docker 容器緩解. 我這裏測試沒有配置這個,可以參考官方文檔配置 http://docs.jumpserver.org/zh/master/setup_by_centos7.html 官方文檔處理的已經相當簡單。

三、Jumpserver的使用

上面已經配置好了Jumpserver套件,openldap服務,也準備好了跳板機。現在可以配置使用了。jumpserver初始登錄賬戶爲admin/admin。進去後將密碼修改掉
在這裏插入圖片描述
配置流程,

  1. 配置CAS/openLDAP認證登錄
  2. 創建管理用戶 --> 創建系統用戶 --> 創建相應的節點 --> 指定節點創建資產 --> 資產授權 --> 查詢用戶授權的資產
  3. 普通用戶登錄,使用Web終端

3.1 配置OpenLDAP登錄認證

openldap有2臺服務器鏡像模式,不知道這裏配置多臺的語法結構是什麼,先配置了1臺。
用戶過濾器,根據實際情況配置,我這裏將cn修改爲了uid(這是我的Ldap目錄結構屬性)
在這裏插入圖片描述
然後測試連接,提交,並可以一鍵導入ldap裏面的賬戶。

可以看到除了可以配置CAS/LDAP之外,還可以配置郵件,終端,安全等。根據實際情況配置。

3.2 配置資產

創建管理用戶 --> 創建系統用戶 --> 創建相應資產的節點 --> 指定節點創建資產 --> 資產授權 --> 查詢用戶授權的資產

  • 管理用戶:
    linux管理用戶使用擁有 NOPASSWD: ALL sudo權限的用戶,我這裏直接配置root,,可以配置賬戶密碼格式,或者祕鑰方式。這裏配置密碼模式
    windows隨便配置一個就可以,反正不起作用。
    在這裏插入圖片描述

  • 系統用戶,
    這個是用來登錄跳板機的賬戶。可以登錄授權的資產。我這裏實際情況是使用ldap賬戶登錄,每個人的賬戶不同需要每個單獨都設置,比較麻煩,我們二次開發的版本會自動處理這一步。這裏開源版本的配置。登錄模式:自動登錄,和手動登錄。根據需要配置即可
    在這裏插入圖片描述

  • 配置資產節點,並在相應的節點下創建資產
    在這裏插入圖片描述

  • 資產授權
    授權用戶或者用戶組具有哪些資產或者節點的權限,才能再用戶列表裏面查詢到相關資產。
    在這裏插入圖片描述

  • 查詢指定用戶資產
    在這裏插入圖片描述

3.3 普通用戶登錄

普通用戶登錄,選擇web終端如下,可以登錄指定的跳板機,然後可以通過跳板機訪問具體的產線服務器。
在這裏插入圖片描述

  • windows跳板機同樣的操作(也可以全屏)
    全屏存在分辨率的問題,可以使用跳板機的 <-- 重新連接會自動調整分辨率
    在這裏插入圖片描述
    到這裏已經完成了。

四、遇到的問題或者場景

4.1 系統賬號錄入場景

企業內部LDAP服務很多賬號,在運維或者產品開發人員登錄服務器一般使用自己的賬戶,這種情況下需要爲每個登錄人員單獨配置系統用戶與資產授權。
在我所處的環境裏對Jumpserver進行了二次開發,賬戶在第一次登陸jumpserver後會自動爲該賬戶添加同名系統賬號(工號),並自動加載生成ssh登錄的祕鑰,私鑰導入jumpserver並推送到ssh-agent加載,公鑰記錄保存(可以API獲取)

4.2 windows跳板機複製粘貼問題

這個jumpserver使用是web terminal(Guacamole )解決方案,複製粘貼比較麻煩 CTRL+ Alt + SHIFT 調出剪貼板,將要粘貼到windows跳板機的內容放進去,然後再CTRL+ Alt + SHIFT 隱藏剪貼板,之後可以通過CTRL+v將內容粘貼到windows跳板機。

4.3 windows跳板機不支持windows下的mstsc客戶端

由於採用的web terminal(Guacamole )解決方案,windows跳板機不支持windows下的mstsc客戶端,只能使用web方式,當然現在可以全屏了,但是分辨率問題也挺曲折。
可以使用跳板機的 <-- 重新連接會自動調整分辨率

4.4 從跳板機採用祕鑰無密碼訪問產線服務問題。

登錄產線服務器使用的是基於LDAP的賬戶(各自工號),如果採用ldap保存公鑰,那麼需要在跳板機上保存一堆的私鑰,很危險。員工可能難道別人的私鑰。而且我們的祕鑰是每天重新生成。這裏我們採用的是ssh-agent方案解決的。

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