24

2020年Jumpserver1.5.8企业生产部署指南-厚德载物

 3 years ago
source link: https://blog.51cto.com/huaxin/2494073
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

2020年Jumpserver1.5.8企业生产部署指南

1、 jumpserver 简介
Jumpserver 采用了分布式架构设计, 支持多云环境 并可灵活扩展。 资产管理方面,
Jumpserver 无并发和资产数量限制, 支持水平扩容。 Jumpserver 采用了业界领先的容器化
部署方式, 并且提供体验极佳的 Web Terminal 。 Jumpserver 还可实现基于 Web 的文件
传输, 并且支持用户将运维审计录像保存在云端( 例如 AWS S3 、 阿里云 OSS 、 ElasticSearch
等) 。 Jumpserver 是全球首款完全开源、 符合 4A 规范( 包含认证 Authentication 、 授权
Authorization、 账号 Accounting 和审计 Auditing ) 的运维安全审计系统, Jumpserver 通过
软件订阅服务或者软硬件一体机的方式, 向企业级用户交付多云环境下更好用的堡垒机

2、 为何要学习 jumpserver
企业应用当中, 监控系统 (zabbix,prometheus),日志分析系统(filebeat+kafka+elk) 几乎是每个
公司必不可少的, 同样 jumpserver 也是非常重要的统一登录入口堡垒机,对运维审计及安全 起到非常重要的作用,完全有必要应用到你的公司,接下来我将按照企业生产标准带领大家一步一步部署jumpserver

3.本次实验环境相关软件版本 如下
[root@jumpserver ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
nginx-1.16.0.tar.gz
Python-3.6.7.tar.xz
redis-5.0.8.tar.gz
jumpserver1.5.8

相关软件包已提前下载好

4、NGINX编译部署

[root@jumpserver src]# yum install pcre pcre-devel openssl-devel -y ##安装依赖
[root@jumpserver nginx-1.16.0]# useradd -s /sbin/nologin -M nginx
[root@jumpserver src]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
[root@jumpserver src]# tar xf nginx-1.16.0.tar.gz
[root@jumpserver src]# cd nginx-1.16.0
[root@jumpserver nginx-1.16.0]# ./configure --prefix=/usr/local/nginx-1.16.0 --user=nginx
--group=nginx --with-http_stub_status_module --with-http_ssl_module --with-stream
[root@jumpserver nginx-1.16.0]# make && make install
[root@jumpserver nginx-1.16.0]# ln -s /usr/local/nginx-1.16.0/ /usr/local/nginx

nginx启动
/usr/local/nginx/sbin/nginx 

检查结果

2020年Jumpserver1.5.8企业生产部署指南

5、redis编译部署
1、 Redis 简介
Redis 是完全开源免费的, 遵守 BSD 协议, 是一个高性能的 key-value 数据库。
Redis 支持数据的持久化, 可以将内存中的数据保存在磁盘中, 重启的时候可以再次加载进
行使用。
Redis 不仅仅支持简单的 key-value 类型的数据, 同时还提供 list, set, zset, hash 等数据结
构的存储

  1. redis部署
tar xf redis-5.0.8.tar.gz
cd redis-5.0.8
make PREFIX=/usr/local/redis5.0.8 install
ln -s /usr/local/redis5.0.8/ /usr/local/redis
echo "export PATH=$PATH:/usr/local/redis/bin/" >> /etc/profile
source /etc/profile
创建配置文件及数据持久化目录
[root@jumpserver redis-5.0.8]# mkdir /usr/local/redis/{etc,data}

redis 简单配置
cat /usr/local/redis/etc/redis.conf
### 以守护进程模式启动
daemonize yes
### 绑定的主机地址
bind 0.0.0.0
### 监听端口
port 6379
### pid 文件和 log 文件的保存地址
pidfile "/var/run/redis_6379.pid"
logfile "/var/log/redis_6379.log"
### 指定本地持久化文件的文件名,默认是 dump.rdb
dbfilename redis_6379.rdb
### 本地数据库的目录
dir /usr/local/redis/data/

redis启动
[root@jumpserver redis-5.0.8]# redis-server /usr/local/redis/etc/redis.conf

检查结果

2020年Jumpserver1.5.8企业生产部署指南

3、Python3编译部署

1、 先安装相关依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel
tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
2、 Python 源码部署
[root@jumpserver src]# wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
[root@jumpserver src]# tar xf Python-3.6.6.tgz
[root@jumpserver src]# cd Python-3.6.6
[root@jumpserver Python-3.6.6]# ./configure --prefix=/usr/local/python3
[root@jumpserver Python-3.6.6]# make && make install
3、 设定环境变量
[root@jumpserver Python-3.6.6]# echo "export PATH=$PATH:/usr/local/python3/bin/" >>
/etc/profile
[root@jumpserver Python-3.6.6]# source /etc/profile

检查结果

2020年Jumpserver1.5.8企业生产部署指南

4、MySQL5.7.28 二进制版本规范化部署
去 mysql 官网下载 mysql5.7.28 二进制版本
https://downloads.mysql.com/archives/community/

2020年Jumpserver1.5.8企业生产部署指南

MySQL部署

[root@jumpserver software]# useradd -s /sbin/nologin -M mysql #创建数据库运行账户
[root@jumpserver software]# tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz #解压软件包
[root@jumpserver software]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.28
[root@jumpserver software]# ln -s /usr/local/mysql-5.7.28/ /usr/local/mysql
[root@jumpserver software]# mkdir /data/mysql/mysql3306/{data,logs,tmp} -p #建立目录
[root@jumpserver software]# chown -R mysql.mysql /usr/local/mysql/ /data/mysql/ ##授权
mysql 账户
[root@jumpserver software]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@jumpserver software]# source /etc/profile #配置环境变量
###注意如果之前有 mariadb 请先卸载干净

这里提供一份生产配置文件
[root@jumpserver software]# cat /data/mysql/mysql3306/my3306.cnf
#my.cnf
[client]
port = 3306
#socket = /tmp/mysql3306.sock
[mysql]
prompt="\\u@\\h:\\p [\\d]>"
no-auto-rehash
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/mysql3306/data
server_id = 23306
port = 3306
socket = /tmp/mysql3306.sock
event_scheduler = 0
interactive_timeout = 300
wait_timeout = 300
#character set
character-set-server = utf8
open_files_limit = 65535
max_connections = 100
max_connect_errors = 100000
lower_case_table_names =1explicit_defaults_for_timestamp=1
#logs
log-output=file
slow_query_log = 1
slow_query_log_file = slow.log
log-error = /data/mysql/mysql3306/logs/error.log
pid-file = mysql.pid
long_query_time = 1
log-slow-slave-statements = 1
#binlog
binlog_format = row
log-bin = /data/mysql/mysql3306/logs/mysql-bin
binlog_cache_size = 1M
max_binlog_size = 256M
sync_binlog = 0
expire_logs_days = 10
#procedure
log_bin_trust_function_creators=1
# gt
id-mode = on
enforce-gtid-consistency=1
#relay log
skip_slave_start = 1
max_relay_log_size = 128M
relay_log_purge = 1
relay_log_recovery = 1
relay-log=relay-bin
relay-log-index=relay-bin.index
log_slave_updates
#slave-skip-errors=1000,1001,1002
#skip-grant-tables
#buffers & cache
table_open_cache = 2048
table_definition_cache = 2048
table_open_cache = 2048
max_heap_table_size = 96M
sort_buffer_size = 128Kjoin_buffer_size = 128K
thread_cache_size = 200
query_cache_size = 0
query_cache_type = 0
query_cache_limit = 256K
query_cache_min_res_unit = 512
thread_stack = 192K
tmp_table_size = 96M
key_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 32M
#myisam
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
#innodb
innodb_buffer_pool_size = 100M ##这里跟进生产实际情况调整, 因为虚拟机, 这里设置的
比较小
innodb_buffer_pool_instances = 1
innodb_data_file_path = ibdata1:100M:autoextend
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 8M
innodb_log_file_size = 100M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 50
innodb_file_per_table = 1
innodb_rollback_on_timeout
innodb_status_file = 1
innodb_io_capacity = 2000
transaction_isolation = READ-COMMITTED
innodb_flush_method = O_DIRECT
loose_tokudb_cache_size=100M
loose_tokudb_directio=ON
loose_tokudb_fsync_log_period=1000
loose_tokudb_commit_sync=0

初始化MySQL

[root@jumpserver software]# /usr/local/mysql/bin/mysqld
--defaults-file=/data/mysql/mysql3306/my3306.cnf --initialize
[root@jumpserver local]# grep password /data/mysql/mysql3306/data/error.log
2020-04-21T13:52:57.356296Z 1 [Note] A temporary password is generated for root@localhost: 2loA_aBNk0?I   ##这个代表初始随机密码
[root@jumpserver software]# ll /data/mysql/mysql3306/data/
总用量 409676
-rw-r----- 1 mysql mysql 56 4 月 21 14:17 auto.cnf
-rw------- 1 mysql mysql 1676 4 月 21 14:17 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 4 月 21 14:17 ca.pem
-rw-r--r-- 1 mysql mysql 1112 4 月 21 14:17 client-cert.pem
-rw------- 1 mysql mysql 1676 4 月 21 14:17 client-key.pem
-rw-r----- 1 mysql mysql 1062 4 月 21 14:17 error.log
-rw-r----- 1 mysql mysql 425 4 月 21 14:17 ib_buffer_pool
-rw-r----- 1 mysql mysql 104857600 4 月 21 14:17 ibdata1
-rw-r----- 1 mysql mysql 104857600 4 月 21 14:17 ib_logfile0
-rw-r----- 1 mysql mysql 104857600 4 月 21 14:17 ib_logfile1
-rw-r----- 1 mysql mysql 104857600 4 月 21 14:17 ib_logfile2
drwxr-x--- 2 mysql mysql 4096 4 月 21 14:17 mysql
drwxr-x--- 2 mysql mysql 8192 4 月 21 14:17 performance_schema
-rw------- 1 mysql mysql 1680 4 月 21 14:17 private_key.pem
-rw-r--r-- 1 mysql mysql 452 4 月 21 14:17 public_key.pem
-rw-r--r-- 1 mysql mysql 1112 4 月 21 14:17 server-cert.pem
-rw------- 1 mysql mysql 1680 4 月 21 14:17 server-key.pem-rw-r----- 1 mysql mysql 184 4 月 21 14:17 slow.log
drwxr-x--- 2 mysql mysql 8192 4 月 21 14:17 sys

MySQL启动
[root@jumpserver software]# /usr/local/mysql/bin/mysqld \
--defaults-file=/data/mysql/mysql3306/my3306.cnf &

检查结果

2020年Jumpserver1.5.8企业生产部署指南

登陆和修改初始密码

[root@jumpserver software]# mysql -uroot -p -S /tmp/mysql3306.sock
Enter password:
mysql> alter user user() identified by '123456';
2020年Jumpserver1.5.8企业生产部署指南

5.docker部署
1、 docker 简介
docker 通过内核虚拟化技术(namespace 及 cgroups 等) 来提供容器的资源隔离与安全保障
等, 由于 docker 通过操作系统层的虚拟化实现隔离, 所以 docker 容器在运行时, 不需要类
似虚拟机额外的操作系统开销, 提供资源利用率

2、 docker vs kvm

2020年Jumpserver1.5.8企业生产部署指南

3、docker部署

https://docs.docker.com/engine/install/centos/
如之前有安装就先卸载
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y

4.docker基础操作

配置 docker 镜像加速
[root@jumpserver ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
} s
ystemctl enable docker
systemctl start docker
Docker info 查看版本及加速情况
[root@jumpserver ~]# docker pull centos ##拉取 centos 镜像
[root@jumpserver ~]# docker save -o centos.tar centos ##导出镜像
[root@jumpserver ~]# docker load -i cnetos.tar ##导入镜像
[root@jumpserver ~]# docker run --name docker-demo -itd centos /bin/bash ##生成容器
[root@jumpserver ~]# docker container ls #查看容器
2020年Jumpserver1.5.8企业生产部署指南

6.jumpserver部署

组件说明
JumpServer 为管理后台, 管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作, 用户可以通过 Web 页面进行资产登录, 文件管理等操作
koko 为 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 来访问)

端口说明
JumpServer 默认 Web 端口为 8080/tcp, 默认 WS 端口为 8070/tcp, 配置文件 jumpserver/config.yml
koko 默认 SSH 端口为 2222/tcp, 默认 Web Terminal 端口为 5000/tcp 配置文件在 koko/config.yml
Guacamole 默认端口为 8081/tcp, 配置文件 /config/tomcat9/conf/server.xml
Nginx 默认端口为 80/tcp
Redis 默认端口为 6379/tcp
Mysql 默认端口为 3306/tcp

jumpserver部署

# 创建数据库 JumpServer 并授权
$ DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`  # 生成随机数据库密码
$ echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m"

你的数据库密码是 2vWNIylwdxyHjYKLVkpBMtUz

$ mysql -uroot -p -S /tmp/mysql3306.sock -e "create database jumpserver default charset 'utf8' collate 'utf8_bin'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '$DB_PASSWORD'; flush privileges;"

[root@jumpserver data]# python3 -m venv py3
source /data/py3/bin/activate  # 退出虚拟环境可以使用 deactivate 命令

(py3) [root@localhost py3]

# 下载 JumpServer
$ cd /data/
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git

# 安装依赖 RPM 包
$ yum -y install $(cat /data/jumpserver/requirements/rpm_requirements.txt)

# 安装 Python 库依赖
$ pip install wheel
$ pip install --upgrade pip setuptools
$ pip install -r /data/jumpserver/requirements/requirements.txt   -i  https://mirrors.aliyun.com/pypi/simple/

修改配置文件

# 修改 JumpServer 配置文件
$ cd /data/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" /data/jumpserver/config.yml
$ sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /data/jumpserver/config.yml
$ sed -i "s/# DEBUG: true/DEBUG: false/g" /data/jumpserver/config.yml
$ sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /data/jumpserver/config.yml
$ sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /data/jumpserver/config.yml
$ sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /data/jumpserver/config.yml

查看最终的配置文件

[root@jumpserver ~]# cat /data/jumpserver/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: ESgqBEs6umFh0wBnyJpiewTS06XQJavc5YhEUCB1iHGLsxQY5i

# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
BOOTSTRAP_TOKEN: erIRjdkdbSaWUCvT

# 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: 2vWNIylwdxyHjYKLVkpBMtUz
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 来进行认证设置
# BASE_SITE_URL: http://localhost:8080
# AUTH_OPENID: false  # True or False
# AUTH_OPENID_SERVER_URL: https://openid-auth-server.com/
# AUTH_OPENID_REALM_NAME: realm-name
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_SHARE_SESSION: 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
#
# 启用定时任务
# PERIOD_TASK_ENABLE: True
#
# 启用二次复合认证配置
# LOGIN_CONFIRM_ENABLE: False
#
# Windows 登录跳过手动输入密码
# WINDOWS_SKIP_ALL_MANUAL_PASSWORD: False

启动jumpserver

$ cd /data/jumpserver
$ ./jms start -d  # 后台运行使用 -d 参数./jms start -d
# 新版本更新了运行脚本, 使用方式./jms start|stop|status all  后台运行请添加 -d 参数
2020年Jumpserver1.5.8企业生产部署指南
# 获取当前服务器 IP
$ Server_IP=`ip addr | grep 'state UP' -A2 | 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_koko -d -p 2222:2222 -p 127.0.0.1:5000:5000 -e CORE_HOST=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN -e LOG_LEVEL=ERROR --restart=always jumpserver/jms_koko:1.5.8

$ cd /opt
$ wget https://github.com/jumpserver/luna/releases/download/1.5.8/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna

配置nginx 代理到 jumpserver 访问即可

http://ip
默认用户名密码 admin/admin

2020年Jumpserver1.5.8企业生产部署指南
2020年Jumpserver1.5.8企业生产部署指南

至此整个生产应用部署完毕

本人曾经从0到1将jumpserver系统完全应用到公司中,整个完善过程花了三个月时间左右,现已录制了一套按照企业生产标准的jumpserver落地到企业应用视频,如有兴趣请前往
https://edu.51cto.com/sd/84158


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK