跟着官网安装
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活劢,以便集中报警、及时处理及审计定责.
Jumpserver提供的堡垒机必备功能 | ||
---|---|---|
身份验证 Authentication | 登录认证 | 资源统一登录和认证 |
LDAP认证 | ||
支持OpenID,实现单点登录 | ||
多因子认证 | MFA(Google Authenticator) | |
账号管理 Account | 集中账号管理 | 管理用户管理 |
系统用户管理 | ||
统一密码管理 | 资产密码托管 | |
自动生成密码 | ||
密码自动推送 | ||
密码过期设置 | ||
批量密码变更(X-PACK) | 定期批量修改密码 | |
生成随机密码 | ||
多云环境的资产纳管(X-PACK) | 对私有云、公有云资产统一纳管 | |
授权控制 Authorization | 资产授权管理 | 资产树 |
资产或资产组灵活授权 | ||
节点内资产自动继承授权 | ||
组织管理(X-PACK) | 实现多租户管理,权限隔离 | |
多维度授权 | 可对用户、用户组或系统角色授权 | |
指令限制 | 限制特权指令使用,支持黑白名单 | |
统一文件传输 | SFTP 文件上传/下载 | |
文件管理 | Web SFTP 文件管理 | |
安全审计 Audit | 会话管理 | 在线会话管理 |
历史会话管理 | ||
录像管理 | Linux 录像支持 | |
Windows 录像支持 | ||
指令审计 | 指令记录 | |
文件传输审计 | 上传/下载记录审计 |
关闭防火墙
[root@n2 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
关闭selinux
[root@n2 ~]# getenforce
Disabled
可以用阿里镜像源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
修改字符集, 否则可能报 input/output error的问题, 因为日志里打印了中文
[root@n2 ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
[root@n2 ~]# export LC_ALL=zh_CN.UTF-8
[root@n2 ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
本机IP:192.168.231.61
安装依赖包
[root@n2 ~]# yum -y install wget gcc epel-release git
安装 Python3.6
[root@n2 ~]# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
[root@n2 Python-3.6.1]# ./configure && make && make install
(最好编译安装,yum安装后边会出错)
建立 Python 虚拟环境
因为 CentOS 7 自带的是 Python2, 而 Yum 等工具依赖原来的 Python, 为了不扰乱原来的环境我们来使用 Python 虚拟环境
[root@n2 ~]# cd /opt/
[root@n2 opt]# python3 -m venv py3
[root@n2 opt]# source /opt/py3/bin/activate
(py3) [root@n2 opt]#
# 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行
要退出python环境
(py3) [root@n2 ~]# deactivate
下载或 Clone 项目
(py3) [root@n2 opt]# git clone https://github.com/jumpserver/jumpserver.git
安装依赖 RPM 包
(py3) [root@n2 opt]# cd /opt/jumpserver/requirements
(py3) [root@n2 requirements]# yum -y install $(cat rpm_requirements.txt)
安装 Python 库依赖
(py3) [root@n2 requirements]# pip install --upgrade pip setuptools
(py3) [root@n2 requirements]# pip install -r requirements.txt
$ pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
$ pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
安装 Redis Jumpserver 使用 Redis 做 cache 和 celery broke
(py3) [root@n2 ~]# yum -y install redis
(py3) [root@n2 ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
(py3) [root@n2 ~]# systemctl start redis
安装 MySQL
使用 Mysql 作为数据库, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置
(py3) [root@n2 ~]# yum -y install mariadb mariadb-devel mariadb-server
(py3) [root@n2 ~]# systemctl enable mariadb
(py3) [root@n2 ~]# systemctl start mariadb
创建数据库 Jumpserver 并授权
(py3) [root@n2 ~]# mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'realxw'; flush privileges;"
修改 Jumpserver 配置文件
(py3) [root@n2 ~]# cd /opt/jumpserver/
(py3) [root@n2 jumpserver]# cp config_example.yml config.yml
(py3) [root@n2 jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50` # 生成随机SECRET_KEY
(py3) [root@n2 jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`# 生成随机BOOTSTRAP_TOKEN
(py3) [root@n2 jumpserver]# vim config.yml
SECRET_KEY: $SECRET_KEY# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
DEBUG: false # DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
SESSION_EXPIRE_AT_BROWSER_CLOSE: true #设置浏览器关闭,session则过期
DB_PASSWORD: realxw#数据库密码
运行 Jumpserver
(py3) [root@n2 ~]# cd /opt/jumpserver/
(py3) [root@n2 jumpserver]# ./jms start all -d
# 后台运行使用 -d 参数./jms start all -d
# 新版本更新了运行脚本, 使用方式./jms start|stop|status all 后台运行请添加 -d 参数
访问测试
页面显示不正常,等后边安装nginx后就可以正常访问了
Clone 项目
(py3) [root@n2 opt]# git clone https://github.com/jumpserver/coco.git
(py3) [root@n2 opt]# cd /opt/coco/requirements/
(py3) [root@n2 requirements]# yum -y install $(cat rpm_requirements.txt)
(py3) [root@n2 requirements]# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
修改配置文件并运行
(py3) [root@n2 requirements]# cd /opt/coco/
(py3) [root@n2 coco]# cp config_example.yml config.yml
(py3) [root@n2 coco]# vim config.yml
BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN # Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
LOG_LEVEL: ERROR
按官网sed替换$BOOTSTRAP_TOKEN,会把值直接显示出来(BOOTSTRAP_TOKEN: jfklasfjlksajfdkl),还是手动修改比较好。
后台启动cocod
(py3) [root@n2 coco]# ./cocod start -d # 后台运行使用 -d 参数./cocod start -d
Use eventlet dispatch
Start coco process
使用方式./cocod start|stop|status 后台运行请添加 -d 参数
配置文件中已经添加BOOTSTRAP_TOKEN,jumpserver会自动接受coco注册,不用再手动注册了
Luna 已改为纯前端, 需要 Nginx 来运行访问
访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包, 直接解压不需要编译
解压 Luna
(py3) [root@n2 coco]# cd /opt/
(py3) [root@n2 opt]# wget https://github.com/jumpserver/luna/releases/download/1.4.9/luna.tar.gz
(py3) [root@n2 opt]# tar xf luna-1.4.9.tar.gz
(py3) [root@n2 opt]# chown -R root.root luna-1.4.9
(py3) [root@n2 opt]# mv luna-1.4.9 luna
配置 Nginx 整合各组件
(py3) [root@n2 ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
(py3) [root@n2 ~]# yum install nginx
(py3) [root@n2 ~]# rm -rf /etc/nginx/conf.d/default.conf
(py3) [root@n2 ~]# systemctl enable nginx
准备配置文件 修改 /etc/nginx/conf.d/jumpserver.conf
(py3) [root@n2 ~]# vim /etc/nginx/conf.d/jumpserver.conf
基本不用修改
server {
listen 80; # 代理端口, 以后将通过此端口进行访问, 不再通过8080端口
# server_name demo.jumpserver.org; # 修改成你的域名或者注释掉
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/; # 如果coco安装在别的服务器, 请填写它的ip
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/; # 如果coco安装在别的服务器, 请填写它的ip
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/; # 如果guacamole安装在别的服务器, 请填写它的ip
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; # 如果jumpserver安装在别的服务器, 请填写它的ip
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
(py3) [root@n2 ~]# nginx -t # 确保配置没有问题
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(py3) [root@n2 ~]# systemctl start nginx
(py3) [root@n2 ~]# systemctl enable nginx
检查应用是否已经正常运行
(py3) [root@n2 jumpserver]# ./jms status
gunicorn is running: 13441
celery is running: 13463
beat is running: 13465
(py3) [root@n2 jumpserver]# cd /opt/coco/
(py3) [root@n2 coco]# ./cocod status
Use eventlet dispatch
Coco is running: 14670
coco:监听的HTTP/WS端口号,默认5000,监听的SSH端口号, 默认2222
Jumpserver: 默认端口为 8080/tcp,通过nginx代理,访问80端口即可
mysql:3306
redis:6379
nginx:80
访问:
服务全部启动后, 访问 http://192.168.231.61, 访问nginx代理的端口, 不要再通过8080端口访问
默认账号: admin 密码: admin
jumpserver会自动接受coco注册
linux界面登录
[root@n2 ~]# ssh -p2222 [email protected]
Systemd 管理启动 Jumpserver
适用于CentOS7
# Jumpserver
vim /usr/lib/systemd/system/jms.service
[Unit]
Description=jms
After=network.target mariadb.service redis.service
Wants=mariadb.service redis.service
[Service]
Type=forking
Environment="PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
ExecStart=/opt/jumpserver/jms start all -d
ExecReload=
ExecStop=/opt/jumpserver/jms stop
[Install]
WantedBy=multi-user.target
# Coco
vim /usr/lib/systemd/system/coco.service
[Unit]
Description=coco
After=network.target jms.service
[Service]
Type=forking
PIDFile=/opt/coco/coco.pid
Environment="PATH=/opt/py3/bin"
ExecStart=/opt/coco/cocod start -d
ExecReload=
ExecStop=/opt/coco/cocod stop
[Install]
WantedBy=multi-user.target
启动
# 开机自启设置
systemctl enable jms
systemctl enable coco
systemctl enable guacamole
# 启动
systemctl start jms
systemctl start coco
systemctl start guacamole
# 停止
systemctl stop jms
systemctl stop coco
systemctl stop guacamole
参考:http://docs.jumpserver.org/zh/docs/setup_by_centos.html