Jumpserver簡介,部署及使用


Jumpserver簡介

Jumpserver 是一款使用 Python, Django 開發的開源跳板機系統, 為虧聯網企業提供了認證,授權,審計,自動化運維等功能,基於ssh協議來管理,客戶端無需安裝agent。

堡壘機

堡壘機的主要作用權限控制和用戶行為審計,堡壘機就像一個城堡的大門,城堡里的所有建築就是你不同的業務系統 , 每個想進入城堡的人都必須經過城堡大門並經過大門守衛的授權,每個進入城堡的人必須且只能嚴格按守衛的分配進入指定的建築,且每個建築物還有自己的權限訪問控制,不同級別的人可以到建築物里不同樓層的訪問級別也是不一樣的。還有就是,每個進入城堡的人的所有行為和足跡都會被嚴格的監控和紀錄下來,一旦發生犯罪事件,城堡管理人員就可以通過這些監控紀錄來追蹤責任人。 目前比較優秀的開源軟件是jumpserver,認證、授權、審計、自動化、資產管理,適合中小型公司或服務器不多的情況。商業的堡壘機Citrix XenApp、齊治包括一些雲機構提供的堡壘機這里不做記錄

跳板機

跳板機就是一台服務器,開發或運維在維護過程中首先要統一登錄到這台服務器,然后再登錄到目標設備進行維護和操作。

缺點

/*
		1. 沒有實現對運維人員操作行為的控制和審計,使用跳板機過程還會出現誤操作導致的事故,一旦出現操作很難決定定位到原因和負責人.
		2. 堡壘機,在一個特定的環境下,為了保障網絡和數據收到外部和內部用戶的破壞,而運行各種技術手段收集和監控網絡環境每一個組成部分的系統狀態,安全事件,網絡活動,以便集中報警,及時處理及審計定責。
		3. 堡壘機比跳板機多了實時收集,監控網絡環境,集中報警等功能
*/
審計管理

審計管理其實很簡單,就是把用戶的所有操作都紀錄下來,以備日后的審計或者事故后的追責。在紀錄用戶操作的過程中有一個問題要注意,就是這個紀錄對於操作用戶來講是不可見的,什么意思?就是指,無論用戶願不願意,他的操作都會被紀錄下來,並且,他自己如果不想操作被紀錄下來,或想刪除已紀錄的內容,這些都是他做不到的,這就要求操作日志對用戶來講是不可見和不可訪問的,那么我們就可以通過堡壘機就可以很好的實現。

堡壘機和跳板機區別
/*
		跳板機: 只有跳轉登錄功能.
					 如果跳板機提供了以下幾條,叫做審計系統或者堡壘機.
					 		1. 記錄用戶操作
					 		2. 實現了權限管理.
					 		3. 監控網絡環境
					 		4. 集中報警
	  堡壘機要想成功起到他的作用,只靠堡壘機本身是不夠的,,還需要一系列的安全對用戶進行限制的配合,堡壘機從部署上,網絡要達到以下條件.
	  		1. 所有人包括運維、開發等任何需要訪問業務系統的人員,只能通過堡壘機訪問業務系統.
            1> 揮手所有對業務系統的訪問權限,做到了除堡壘機管理人員,沒有人知道業務系統任何機器的登錄密碼.
            2> 網絡上限制所有人員只能通過堡壘機的跳轉才能訪問業務系統.

        2. 確保除了堡壘機管理員之外,所有其他人對堡壘機本身無任何操作權限,只有一個登錄跳轉功能.
        3. 確保用戶的操作記錄不能被用戶自己以任何方式獲取並篡改.  
*/
堡壘機功能實現需求

業務需求

/*
		1. 兼顧業務安全目標與用戶體驗,堡壘機部署后,不應使用戶訪問業務系統的訪問變的復雜,否則工作將很難推進,因為沒人喜歡改變現狀,尤其是改變后生活變得更艱難
		2. 保證堡壘機穩定安全運行, 沒有100%的把握,不要上線任何新系統,即使有100%把握,也要做好最壞的打算,想好故障預案.
*/

功能需求

/*
		1. 所有的用戶操作日志要保留在數據庫中
		2. 每個用戶登錄堡壘機后,只需要選擇具體要訪問的設置,就連接上了,不需要再輸入目標機器的訪問密碼
		3. 允許用戶對不同的目標設備有不同的訪問權限,例:
        對10.0.2.34 有mysql 用戶的權限
        對192.168.3.22 有root用戶的權限
        對172.33.24.55 沒任何權限
		4. 分組管理,即可以對設置進行分組,允許用戶訪問某組機器,但對組里的不同機器依然有不同的訪問權限 
		5. 密碼對普通用戶不可見
*/
jumpserver功能特點
/*
	1. 完全開源,GPL授權
	2. Python編寫,容易二開
	3. 實現了跳板機基本功能,身份認證、訪問控制、授權、審計、批量操作等。
	4. 集成了Ansible,批量命令等
	5. 支持WebTerminal
	6. Bootstrap編寫,界面美觀
	7. 自動收集硬件信息
	8. 錄像回放
	9. 命令搜索
	10. 實時監控
	11. 批量上傳下載
*/
主要組件

JumpServer 為管理后台, 管理員可以通過 Web 頁面進行資產管理、用戶管理、資產授權等操作, 用戶可以通過 Web 頁面進行資產登錄, 文件管理等操作

1.koko 為 SSH Server 和 Web Terminal Server 。用戶可以使用自己的賬戶通過 SSH 或者 Web Terminal 訪問 SSH 協議和 Telnet 協議資產

2.Luna 為 Web Terminal Server 前端頁面, 用戶使用 Web Terminal 方式登錄所需要的組件

3.Guacamole 為 RDP 協議和 VNC 協議資產組件, 用戶可以通過 Web Terminal 來連接 RDP 協議和 VNC 協議資產 (暫時只能通過 Web Terminal 來訪問)

部署

安裝jumpserver 3.0版本,相對於jumpserver 2.0版本,在新的版本3.0中取消了LDAP授權,取而代之的是ssh進行推送;界面也有所變化,功能更完善,安裝更簡單。

初始化
#!/usr/bin/env bash
# Author: ZhouJian
# Mail: 18621048481@163.com
# Time: 2019-9-3
# Describe: CentOS 7 Initialization Script
clear
echo -ne "\\033[0;33m"
cat<<EOT
                                  _oo0oo_
                                 088888880
                                 88" . "88
                                 (| -_- |)
                                  0\\ = /0
                               ___/'---'\\___
                             .' \\\\\\\\|     |// '.
                            / \\\\\\\\|||  :  |||// \\\\
                           /_ ||||| -:- |||||- \\\\
                          |   | \\\\\\\\\\\\  -  /// |   |
                          | \\_|  ''\\---/''  |_/ |
                          \\  .-\\__  '-'  __/-.  /
                        ___'. .'  /--.--\\  '. .'___
                     ."" '<  '.___\\_<|>_/___.' >'  "".
                    | | : '-  \\'.;'\\ _ /';.'/ - ' : | |
                    \\  \\ '_.   \\_ __\\ /__ _/   .-' /  /
                ====='-.____'.___ \\_____/___.-'____.-'=====
                                  '=---='
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                建議系統                    CentOS7
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
EOT
echo -ne "\\033[m"

init_hostname() {
while read -p "請輸入您想設定的主機名:" name
do
	if [ -z "$name" ];then
		echo -e "\033[31m 您沒有輸入內容,請重新輸入 \033[0m"
		continue
	fi
	read -p "您確認使用該主機名嗎?[y/n]: " var

	if [ $var == 'y' -o $var == 'yes' ];then
		hostnamectl set-hostname $name
		break
	fi
done
}


init_security() {
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config
sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#UseDNS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
systemctl enable sshd crond &> /dev/null
echo -e "\033[32m [安全配置] ==> OK \033[0m"
}

init_yumsource() {
if [ ! -d /etc/yum.repos.d/backup ];then
	mkdir /etc/yum.repos.d/backup
fi
mv /etc/yum.repos.d/* /etc/yum.repos.d/backup 2>/dev/null

if ! ping -c 2 baidu.com &>/dev/null	
then
	echo "您無法上外網,不能配置yum源"
	exit	
fi
	curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null 
	curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
timedatectl set-timezone Asia/Shanghai
echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
chattr +i /etc/resolv.conf

echo -e "\033[32m [YUM Source] ==> OK \033[0m"
}

init_install_package() {
echo -e "\033[32m 安裝系統需要的軟件,請稍等~ ~ ~ \033[0m"
yum -y install lsof tree wget vim  bash-completion lftp bind-utils  &>/dev/null 
yum -y install atop htop nethogs net-tools libcurl-devel libxml2-devel openssl-devel unzip  psmisc ntpdate nslookup &>/dev/null 
echo -e "\033[32m [安裝常用工具] ==> OK \033[0m"
}

init_kernel_parameter() {
cat > /etc/sysctl.conf <<EOF
fs.file-max = 999999
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
vm.swappiness = 10
EOF
sysctl -p /etc/sysctl.conf >/dev/null 2>&1
echo -e "\033[32m [內核 優化] ==> OK \033[0m"
}

# **************************************************
init_system_limit() {
cat >> /etc/security/limits.conf <<EOF
* soft nproc 65530
* hard nproc 65530
* soft nofile 65530
* hard nofile 65530
EOF
ulimit -n 65535
ulimit -u 20480
echo -e "\033[32m [ulimits 配置] ==> OK \033[0m"
cat >> /etc/profile <<EOF
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
EOF
source /etc/profile
}

main() {
init_hostname
init_security
init_yumsource
init_install_package
init_kernel_parameter
init_system_limit
}
main
安裝基礎包和依賴
yum -y install wget gcc git 
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git

yum -y install python36 python36-devel

cd /opt
python3.6 -m venv py3
source /opt/py3/bin/activate
# 退出虛擬環境可以使用 deactivate 命令
安裝redis
(py3) [root@kvm-47 requirements]#  yum -y install redis
(py3) [root@kvm-47 requirements]# systemctl enable redis && systemctl start redis
安裝Mysql
(py3) [root@kvm-47 requirements]#  yum -y install mariadb mariadb-devel mariadb-server
(py3) [root@kvm-47 requirements]# systemctl enable mariadb &&  systemctl start mariadb
(py3) [root@kvm-47 jumpserver]# mysqladmin -u root password 'ZHOUjian.20'

(py3) [root@kvm-47 jumpserver]# DB_PASSWORD=DB_PASSWORD=ZHOUjian.20

(py3) [root@kvm-47 jumpserver]# mysql -uroot -pZHOUjian.20 -e "create database jumpserver default charset 'utf8' collate 'utf8_bin'; grant all on jumpserver.* to 'jumpserver'@localhost identified by 'ZHOUjian.20'; ; flush privileges;"
安裝配置jumpserver
cd /opt && \
wget https://github.com/jumpserver/jumpserver/releases/download/v2.4.3/jumpserver-v2.4.3.tar.gz
tar xf jumpserver-v2.4.3.tar.gz
mv jumpserver-v2.4.3 jumpserver

yum install -y $(cat rpm_requirements.txt)
pip install --upgrade pip setuptools
pip install wheel && \
pip install --upgrade pip setuptools && \
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

cd /opt/jumpserver && \
cp config_example.yml config.yml && \
vim config.yml

SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50` 
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16` 
echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"
echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"

修改config.yml

cat config.yml 
# SECURITY WARNING: keep the secret key used in production secret!
# 加密秘鑰 生產環境中請修改為隨機字符串,請勿外泄, 可使用命令生成 
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: FjgRr6iIqjOJG6bRvTVNRqKacZvmf7pXwyj7yCNE2SfRJ0A34w 

# SECURITY WARNING: keep the bootstrap token used in production secret!
# 預共享Token coco和guacamole用來注冊服務賬號,不在使用原來的注冊接受機制
BOOTSTRAP_TOKEN: Y7e3YjYvAQY0sANy 

# Development env open this, when error occur display the full process track, Production disable it
# DEBUG 模式 開啟DEBUG后遇到錯誤時可以看到更多日志
DEBUG: false 

# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
# 日志級別
LOG_LEVEL: ERROR 
# LOG_DIR: 

# Session expiration setting, Default 24 hour, Also set expired on on browser close
# 瀏覽器Session過期時間,默認24小時, 也可以設置瀏覽器關閉則過期
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true 

# Database setting, Support sqlite3, mysql, postgres ....
# 數據庫設置
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases

# SQLite setting:
# 使用單文件sqlite數據庫
# DB_ENGINE: sqlite3
# DB_NAME: 
# MySQL or postgres setting like:
# 使用Mysql作為數據庫
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: ZHOUjian.20
DB_NAME: jumpserver

# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 運行時綁定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070

# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_PASSWORD: 
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4

# Use OpenID Authorization
# 使用 OpenID 進行認證設置
# AUTH_OPENID: False # True or False
# BASE_SITE_URL: None
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_PROVIDER_ENDPOINT: https://op-example.com/
# AUTH_OPENID_PROVIDER_AUTHORIZATION_ENDPOINT: https://op-example.com/authorize
# AUTH_OPENID_PROVIDER_TOKEN_ENDPOINT: https://op-example.com/token
# AUTH_OPENID_PROVIDER_JWKS_ENDPOINT: https://op-example.com/jwks
# AUTH_OPENID_PROVIDER_USERINFO_ENDPOINT: https://op-example.com/userinfo
# AUTH_OPENID_PROVIDER_END_SESSION_ENDPOINT: https://op-example.com/logout
# AUTH_OPENID_PROVIDER_SIGNATURE_ALG: HS256
# AUTH_OPENID_PROVIDER_SIGNATURE_KEY: None
# AUTH_OPENID_SCOPES: "openid profile email"
# AUTH_OPENID_ID_TOKEN_MAX_AGE: 60
# AUTH_OPENID_ID_TOKEN_INCLUDE_CLAIMS: True
# AUTH_OPENID_USE_STATE: True
# AUTH_OPENID_USE_NONCE: True
# AUTH_OPENID_SHARE_SESSION: True
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_ALWAYS_UPDATE_USER: True

# Use Radius authorization
# 使用Radius來認證
# AUTH_RADIUS: false
# RADIUS_SERVER: localhost
# RADIUS_PORT: 1812
# RADIUS_SECRET: 

# CAS 配置
# AUTH_CAS': False,
# CAS_SERVER_URL': "http://host/cas/",
# CAS_ROOT_PROXIED_AS': 'http://jumpserver-host:port',  
# CAS_LOGOUT_COMPLETELY': True,
# CAS_VERSION': 3,

# LDAP/AD settings
# LDAP 搜索分頁數量
# AUTH_LDAP_SEARCH_PAGED_SIZE: 1000
#
# 定時同步用戶
# 啟用 / 禁用
# AUTH_LDAP_SYNC_IS_PERIODIC: True
# 同步間隔 (單位: 時) (優先)
# AUTH_LDAP_SYNC_INTERVAL: 12
# Crontab 表達式
# AUTH_LDAP_SYNC_CRONTAB: * 6 * * *
#
# LDAP 用戶登錄時僅允許在用戶列表中的用戶執行 LDAP Server 認證
# AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: False
#
# LDAP 認證時如果日志中出現以下信息將參數設置為 0 (詳情參見:https://www.python-ldap.org/en/latest/faq.html)
# In order to perform this operation a successful bind must be completed on the connection
# AUTH_LDAP_OPTIONS_OPT_REFERRALS: -1

# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver

# Perm show single asset to ungrouped node
# 是否把未授權節點資產放入到 未分組 節點中
# PERM_SINGLE_ASSET_TO_UNGROUP_NODE: False
#
# 同一賬號僅允許在一台設備登錄
# USER_LOGIN_SINGLE_MACHINE_ENABLED: False
#
# 啟用定時任務
# PERIOD_TASK_ENABLE: True
#
# 啟用二次復合認證配置
# LOGIN_CONFIRM_ENABLE: False
#
# Windows 登錄跳過手動輸入密碼
WINDOWS_SKIP_ALL_MANUAL_PASSWORD: True 
啟動關閉jumpservere
(py3) [root@kvm-47 jumpserver]# cd /opt/jumpserver/
(py3) [root@kvm-47 jumpserver]# ./jms start all -d
(py3) [root@kvm-47 jumpserver]# ./jms stop


wget -O /usr/lib/systemd/system/jms.service https://demo.jumpserver.org/download/shell/centos/jms.service
chmod 755 /usr/lib/systemd/system/jms.service
systemctl enable jms  # 配置自啟
部署koko

支持終端管理,默認port為2222

正常部署koko組件

cd /opt && \
wget https://github.com/jumpserver/koko/releases/download/v2.4.3/koko-v2.4.3-linux-amd64.tar.gz
  
  
tar -xf koko-v2.4.3-linux-amd64.tar.gz && \
mv koko-v2.4.3-linux-amd64 koko && \
chown -R root:root koko && \
cd koko \
mv kubectl /usr/local/bin/ && \
wget https://download.jumpserver.org/public/kubectl.tar.gz && \
tar -xf kubectl.tar.gz && \
chmod 755 kubectl && \
mv kubectl /usr/local/bin/rawkubectl && \
rm -rf kubectl.tar.gz


cp config_example.yml config.yml && \
vi config.yml
# BOOTSTRAP_TOKEN 需要從 jumpserver/config.yml 里面獲取, 保證一致
 ./koko  -d
  

docker部署

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
mkdir /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

# 啟動Docker后台服務
systemctl start docker && systemctl enable docker
systemctl daemon-reload    

# 獲取當前服務器 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`

docker run --name jms_koko -d \
  -p 2222:2222 \
  -p 127.0.0.1:5000:5000 \
  -e CORE_HOST=http://192.168.244.144:8080 \
  -e BOOTSTRAP_TOKEN=zxffNymGjP79j6BN \
  -e LOG_LEVEL=ERROR \
  --privileged=true \
  --restart=always \
  jumpserver/jms_koko:v2.4.3
dockerGuacamole

建議使用 Docker 部署 Guacamole 組件 , 部分環境可能無法正常編譯安裝

docker run --name jms_guacamole -d \
  -p 127.0.0.1:8081:8080 \
  -e JUMPSERVER_SERVER=http://<Jumpserver_url> \
  -e BOOTSTRAP_TOKEN=<Jumpserver_BOOTSTRAP_TOKEN> \
  -e GUACAMOLE_LOG_LEVEL=ERROR \
  jumpserver/jms_guacamole:<Tag>
<Jumpserver_url> 為 JumpServer 的 url 地址, <Jumpserver_BOOTSTRAP_TOKEN> 需要從 jumpserver/config.yml 里面獲取, 保證一致, <Tag> 是版本


# Example
docker run --name jms_guacamole -d \
  -p 127.0.0.1:8081:8080 \
  -e JUMPSERVER_SERVER=http://116.196.83.113:8080 \
  -e BOOTSTRAP_TOKEN=Y7e3YjYvAQY0sANy \
  -e GUACAMOLE_LOG_LEVEL=ERROR \
  jumpserver/jms_guacamole:v2.4.3
部署luna

與nginx結合支持Web Terminal前端

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

tar -xf luna-v2.4.3.tar.gz
mv luna-v2.4.3 luna
chown -R nginx:nginx luna
配置nginx
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0enabled=1


yum -y install nginx
systemctl enable nginx

rm -rf /etc/nginx/conf.d/default.conf
cd /etc/nginx/
sed -i '/^ *#/d'  nginx.conf
sed -ri '/^[[:space:]]*(#|$)/d'  nginx.conf

vim /etc/nginx/conf.d/jumpserver.conf 
server {
    listen 80;
    # server_name _;
    server_name bastion.qf.com;

    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 /koko/ {
        proxy_pass       http://localhost:5000;
        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;
(py3) [root@JD jumpserver]# cat /etc/nginx/conf.d/jumpserver.conf
server {
    listen 80;
    # server_name _;

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

    location /ui/ {
        try_files $uri / /index.html;
        alias /opt/lina/;
        expires 24h;
    }

    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/luna/;
        expires 24h;
    }

    location /media/ {
        add_header Content-Encoding gzip;
        root /opt/jumpserver/data/;
    }

    location /static/ {
        root /opt/jumpserver/data/;
        expires 24h;
    }

    location /koko/ {
        proxy_pass       http://localhost:5000;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_request_buffering off;
        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 /guacamole/ {
        proxy_pass       http://localhost:8081/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_request_buffering off;
        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 /ws/ {
        proxy_pass http://localhost:8070;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_request_buffering off;
        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;
    }

    location /api/ {
        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;
    }

    location /core/ {
        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;
    }

    location / {
        rewrite ^/(.*)$ /ui/$1 last;
    }
}

systemctl start nginx

Jumpserver環境訪問方式

白名單訪問
/*
		可在防火牆白名單中添加IP, 這種方法有局限性,因為家里上網的IP是不斷變化的.隨着開發人員增多,維護成本會增加。
	
*/
使用SSL VPN
/*
		華為6300自帶100個SSL VPN賬號,可用Jumpserver發布為web資源,通過ssl vpn訪問
*/

登錄測試

# 檢查應用是否已經正常運行
# 服務全部啟動后, 訪問 jumpserver 服務器 nginx 代理的 80 端口, 不要通過8080端口訪問
# 默認賬號: admin 密碼: admin


ssh admin@192.168.0.3 -p2222
		Administrator,  歡迎使用JumpServer開源堡壘機系統

	1) 輸入 部分IP,主機名,備注 進行搜索登錄(如果唯一).
	2) 輸入 / + IP,主機名,備注 進行搜索,如:/192.168.
	3) 輸入 p 進行顯示您有權限的主機.
	4) 輸入 g 進行顯示您有權限的節點.
	5) 輸入 d 進行顯示您有權限的數據庫.
	6) 輸入 k 進行顯示您有權限的Kubernetes.
	7) 輸入 r 進行刷新最新的機器和節點信息.
	8) 輸入 h 進行顯示幫助.
	9) 輸入 q 進行退出.
Opt> 

腳本快速部署

curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v2.4.3/quick_start.sh | sh
  
# 網速快五分鍾就好了,直到出現下面信息
JumpServer 部署完成
請到 /opt/setuptools 目錄執行 ./jmsctl.sh start 啟動 
  
# 下載文件
cd /opt
yum -y install wget git
git clone --depth=1 https://github.com/jumpserver/setuptools.git
cd setuptools
cp config_example.conf config.conf
vi config.conf

./jmsctl.sh install
./jmsctl.sh start


# 升級
./jmsctl.sh upgrade

儀表盤

系統設置

設置用戶訪問的URL

設置郵箱及驗證
/*
      點擊頁面上邊的"郵件設置", 進入郵件設置頁面
      默認使用 25 端口, 不勾選 SSL 和 TLS; 如果需要勾選 SSL, 端口需要修改成 465; 如果需要勾選 TLS, 端口需要改成 587
      不可以同時勾選 SSL 和 TLS
      發送賬號一定要填
      配置郵件服務后, 點擊頁面的"測試連接"按鈕, 如果配置正確, JumpServer 會發送一條測試郵件到您的 SMTP 賬號郵箱里面, 確定收到測試郵件后點擊保存即可使用
*/

終端設置

密碼認證”和”密鑰認證”是 SSH 連接跳板機時所使用的認證方式(都不選會造成無法使用 SSH 方式連接登錄跳板機, 不影響 web 登錄)

“Telnet成功正則表達式” telnet設備登陸失敗需要設置

“命令存儲””錄像存儲”位置設置

“命令存儲””錄像存儲”修改后, 需要在Jumpserver 會話管理-終端管理 修改terminal的配置 錄像存儲 命令記錄, 然后重啟 Jumpserver 服務

設置后重啟 koko 才能生效

安全設置

“MAF二次認證”勾選會開啟全局強制”MFA”, 所有 jumpserver 用戶必須使用動態口令進行認證登錄(即時生效)

“限制登錄失敗”和”限制登錄時間”設置需要重啟 jumpserver 才能生效

“SSH最大空閑時間”設置需要重啟 koko 才能生效

“密碼校驗規則”設置立即生效

用戶管理

用戶組設置

添加用戶組
用戶名即jumpserver登陸賬號,用戶組是用來資產授權,當某個資產對一個用戶組授權后,這個用戶組下面的所有用戶都可以使用這個資產了.角色用於區分一個用戶是管理員還是普通用戶.

點擊用戶管理–>用戶組–>添加用戶組

用戶設置

資產管理

管理用戶

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

系統用戶

系統用戶是 Jumpserver 跳轉登錄資產時使用的用戶,可以理解為登錄資產用戶, Jumpserver使用系統用戶登錄資產。
系統用戶的 Sudo 欄填寫允許當前系統用戶免sudo密碼執行的程序路徑,如默認的/sbin/ifconfig,意思是當前系統用戶可以直接執行 ifconfig 命令或 sudo ifconfig 而不需要輸入當前系統用戶的密碼,執行其他的命令任然需要密碼,以此來達到權限控制的目的。

此處的權限應該根據使用用戶的需求匯總后定制,原則上給予最小權限即可。

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

Linux 系統協議項務必選擇 ssh 。如果用戶在系統中已存在,請去掉自動生成密鑰、自動推送勾選

網域列表

網域功能是為了解決部分環境無法直接連接而新增的功能,原理是通過網關服務器進行跳轉登錄。
這個功能,一般情況不用到。

資產列表

點擊頁面左側的“資產管理”菜單下的“資產列表”按鈕,查看當前所有的資產列表。

點擊頁面左上角的“創建資產”按鈕,進入資產創建頁面,填寫資產信息。

IP 地址和管理用戶要確保正確,確保所選的管理用戶的用戶名和密碼能”牢靠”地登錄指定的 IP 主機上。資產的系統平台也務必正確填寫。公網 IP 信息只用於展示,可不填,Jumpserver 連接資產使用的是 IP 信息。

如果資產不能正常連接,請檢查管理用戶的用戶名和密鑰是否正確以及該管理用戶是否能使用 SSH 從 Jumpserver 主機正確登錄到資產主機上。
我在操作時也有連不上的情況,我的情況是更改配置文件 或者更改了其他東西,只重啟了jumpserver進程,而沒有全部重啟,比如koko ,Guacamole。都要重啟。

權限管理

資產授權

節點,對應的是資產,代表該節點下的所有資產。

用戶組,對應的是用戶,代表該用戶組下所有的用戶。

系統用戶,及所選的用戶組下的用戶能通過該系統用戶使用所選節點下的資產。

節點,用戶組,系統用戶是一對一的關系,所以當擁有 Linux、Windows 不同類型資產時,應該分別給 Linux 資產和 Windows 資產創建授權規則。

授權后,終端連接過去才可以查看到資產

會話管理

Web終端

Web 終端是資產使用界面, 管理員和用戶都是從這里登錄到資產上, 執行操作。點擊資產名字連接資產, 點擊"Server"下的"Disconnect"斷開資產連接。

文件管理

文件管理允許對 SSH 協議資產進行文件上傳下載創建刪除操作(不支持上傳文件夾), 目前也不支持系統用戶是手動登錄的資產。

命令記錄

命令記錄里面存放的是用戶在資產上執行過哪些命令, 單擊一行記錄, 會展示命令執行的結果:

歷史會話

歷史會話同在線會話包含的信息一樣, 都有用戶、資產和 IP 地址等信息。

JumpServer 提供歷史會話的錄像觀看。點擊左側的"回放"按鈕, 即可觀看錄像。

終端管理

終端列表頁面列出了 JumpServer 正在使用的終端有哪些, 例如:koko、Gua 等。終端第一次使用, 會首先向 JumpServer 發送請求注冊, 在 JumpServer 中接受注冊后就可以正常使用該終端了。

作業中心

批量命令

可以通過該功能快速下發命令到資產, 目前僅支持能被 ansible 管理的資產, 要求 系統用戶 登陸方式為 自動登陸。

任務列表

作業是 JumpServer 向其所管理下的資產發送的指令, 例如, 測試資產可連接性、獲取資產硬件信息、測試管理用戶可連接性和測試系統用戶可連接性等命令。默認展示最近7天的作業記錄。

日志審計

登錄日志

FTP日志

操作日志

改密日志

批量命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM