前言
Jumpserver是一种用于访问和管理远程设备的Web应用程序,通常用于对服务器进行安全访问。它基于SSH协议,提供了一个安全和可管理的环境来管理SSH访问。Jumpserver是基于Python开发的一款开源工具,其提供了强大的访问控制功能,可以轻松实现用户、主机、命令和审计日志的管理。
Jumpserver的主要功能包括:
访问控制:Jumpserver提供了灵活的访问控制,可以根据用户、角色、主机、命令和时间等因素实现精细的控制。
统一认证:Jumpserver支持LDAP、AD、Radius等认证方式,可以实现与企业内部认证系统的集成。
会话管理:Jumpserver可以记录所有SSH会话并生成审计日志,以便管理人员了解用户的操作情况。
实时监控:Jumpserver可以实时监控SSH会话,并提供了实时监控面板,可以随时了解用户的操作情况。
审计日志:Jumpserver提供了完整的审计日志功能,包括用户登录、会话记录、命令执行情况等,方便管理人员进行安全审计和追溯。
多租户:Jumpserver支持多租户功能,可以实现不同租户的资源隔离和安全管理。
总之,Jumpserver是一款功能强大的安全访问控制系统,可以为企业提供强大的安全管理和审计功能。
目录
1 环境配置
2 修改字符集
3 安装软件包
4 编译安装
5 克隆(git clone)
6 下载Jumpserver
7 配置Jumpserver
7.1 安装所需的Python modules
7.2 安装Redis
7.3 安装MySQL
7.4 修改Jumpserver配置文件
7.5 把配置写入config.yml文件
8 启动/关闭Jumpserver
9 部署koko
9.1 使用docker部署
9.2 手工下载部署
9.2.1 部署
9.2.2 启动koko
10 部署guacamole
10.1 部署
10.2 列出本地镜像
11 部署luna
12 配置nginx
12.1 nginx的安装
12.2 配置nginx
12.3 运行nginx
12.4 修改nginx的主配置文件
13 Jumpserver登录测试
(1)关闭防火墙。
systemctl stop firewalld
(2)关闭SELinux。
setenforce 0
# setenforce 1 #设置SELinux为强制模式
# setenforce 0 #设置SELinux为宽容模式
普及:
获取SELinux状态:
getenforce
getenforce是一个Linux命令,用于查看SELinux(Security-Enhanced Linux)安全机制的状态(SELinux是一款基于Linux内核的安全模块)。该命令可以显示当前SELinux的强制模式状态:enforcing(强制模式)、permissive(宽容模式)或disabled(禁用模式)。
修改字符集,否则可能报“input/output error”问题,因为日志里打印了中文。【逐个输入并运行以下命令】
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
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
如图,显示“完毕!”即表示我们安装成功!
接下来我们使用wget命令下载个Python的包,下载时间过长,耐心等待。
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
为了确保我们安装成功,我们可以使用ls命令查看下
如图即表示安装成功~接下来我们使用tar命令解压压缩包。
tar xf Python-3.6.1.tar.xz
使用ls命令查看,发现有Python-3.6.1即表示我们解压成功!
首先我们要进入到Python-3.6.1这个目录。
cd Python-3.6.1
编译安装(时间漫长,耐心等待)
./configure && make && make install
进入opt目录下
cd /opt
使用Python3的环境。
python3 -m venv py3
source /opt/py3/bin/activate
运行完毕后会出现:(py3) [root@localhost opt]#
使用git命令克隆
git clone git://github.com/kennethreitz/autoenv.git
【问题解决】 http://t.csdnimg.cn/OQUcr
问题一:
fatal: unable to connect to github.com:
github.com[0: 20.205.243.166]: errno=????
这是因为有些网络环境可能会限制Git 协议默认使用端口的访问,或者直接阻止使用Git协议。因此,我们需要将git://github.com/替换为https://github.com/,这样可以确保与GitHub进行通信。
git clone https://github.com/kennethreitz/autoenv.git
问题二:
fatal: unable to access 'https://github.com/kennethreitz/autoenv.git/': TCP connection reset by peer
我们需要取消http和https代理。
git config --global --unset http.proxy
git config --global --unset https.proxy
如图即表示我们成功啦~
克隆完成后,source默认使用bashrc
echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
使环境变量生效。
source ~/.bashrc
我们还是使用克隆命令(git clone)下载并进入jumpserver目录(cd jumpserver)并将工作目录切换到主分支(git checkout master)。(时间漫长,耐心等待)
git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master
在此过程中遇到同等问题还是取消http、https代理即可。
进入 jumpserver 目录时将自动载入 python 虚拟环境.
echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env
安装依赖RPM包
cd requirements/
输入y
yum -y install $(cat rpm_requirements.txt)
安装Python依赖
pip install --upgrade pip
阿里云源下载(更快)
pip install -r requirements.txt
【问题解决】
ERROR: Could not open requirements file: [Errno 2] 没有那个文件或目录: 'requirements.txt'
先创建requirements.txt
pip freeze > requirements.txt
重新执行命令
pip install -r requirement.txt
yum -y install redis
设置开机自启
systemctl enable redis
启动redis
systemctl start redis
在centos里,默认的数据库是mariadb
yum -y install mariadb mariadb-devel mariadb-server
启动mariadb
systemctl start mariadb
设置开机自启
systemctl enable mariadb
进入mariadb
mysql
创建jumpserver数据库默认使用utf8字符集
create database jumpserver default charset 'utf8';
给本机授权
grant all on jumpserver.* to 'jumpserveradmin'@'127.0.0.1' identified by 'jumpserverpwd';
刷新数据库
flush privileges;
\q退出
\q
先进入/opt/jumpserver目录下。(因为我们刚才在/opt/jumpserver/requirements下,所以直接cd ..进入上一目录即可。)
cd ..
cp config_example.yml config.yml
生成随机SECRET_KEY
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
注意:A-Za-z0-9 中不能有空格!且符号`不能写错,位置也不能错,否则将会遇到“-bash: /dev/urandom: 权限不够”的情况。
echo $SECRET_KEY
把SECRET_KEY写入bashrc中。
echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
生成随机BOOTSTRAP_TOKEN
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
echo $BOOTSTRAP_TOKEN
把BOOTSTRAP_TOKEN写入bashrc中。
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
echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"
echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"
确认内容有没有错误 vi config.yml
vi config.yml
修改如图所示内容
修改成如图所示:
配置完成啦~
在/opt/jumpserver路径下。
启动
./jms start
【看到一堆ok即表示启动成功,如果没成功显示error则表示配置有问题,则重新vi config.yml配置】
后台启动(后台运行使用 -d 参数)
./jms start -d
关闭
./jms stop
【问题解决】http://t.csdnimg.cn/8XoNi
Traceback (most recent call last):
File "./jms", line 11, in
import django
ModuleNotFoundError: No module named 'django'
使用pip install 模块名下载。
pip install Django
下载完成后重新启动就好。
如果下载不成功,出现一堆红色下载不成功。
更新 pip 到最新版本
pip install --upgrade pip
再执行一次就好了。
pip install Django
最后一行显示successfully installed等表示成功安装django。
成功啦~
koko支持终端管理,默认端口(port)为2222。
【提供两种方法,自行选择部署】
下载docker
yum -y install docker
启动docker
systemctl start docker
查看自己的IP地址。(IP地址在“2:ens33:”中inet后面)
ip a
Server_IP=自己的IP地址。
Server_IP=192.168.10.111
查看BOOTSTRAP_TOKEN值
echo $BOOTSTRAP_TOKEN
根据查看的值输入下面指令。(值不一样,不要照搬下面指令)
BOOTSTRAP_TOKEN=BZYt8bkFhzZjAjc2
docker run --name jms_koko -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_koko:1.5.5
显示comolete就说明部署完成啦~
【本人采用docker部署,所以手工部署就不附图啦~】
进入/opt目录。
cd /opt
使用wget命令下载压缩包。【官方网站:https://github.com/jumpserver/koko/releases】
wget https://github.com/jumpserver/koko/releases/download/1.5.2/koko-master-37daa82-linux-amd64.tar.gz
解压
tar -xf koko-master-37daa82-linux-amd64.tar.gz
进入/opt/kokodir
cd /opt/kokodir
授权
chown -R root:root /opt/kokodir
先使用cp命令备份一下(cp 源文件路径 目标文件夹)
cp config_example.yml config.yml
编辑config.yul https://docs.jumpserver.org/zh/v3/installation/source_install/koko_install/#13
vi config.yml
【BOOTSTRAP_TOKEN需要 jumpserver/config.yml 里面获取,保证一致】
# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: {{ Hostname }}
# Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080 # Core 的地址
# Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: ******** # 和 Core config.yml 的值保持一致
# 启动时绑定的ip, 默认 0.0.0.0
BIND_HOST: 0.0.0.0
# 监听的SSH端口号, 默认2222
SSHD_PORT: 2222 # 使用 0.0.0.0:2222
# 监听的HTTP/WS端口号,默认5000
HTTPD_PORT: 5000 # 使用 0.0.0.0:5000
# 项目使用的ACCESS KEY, 默认会注册,并保存到 ACCESS_KEY_STORE中,
# 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret
# ACCESS_KEY: null
# ACCESS KEY 保存的地址, 默认注册后会保存到该文件中
# ACCESS_KEY_FILE: data/keys/.access_key
# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: DEBUG # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
# SSH连接超时时间 (default 15 seconds)
# SSH_TIMEOUT: 15
# 语言 [en,zh]
# LANGUAGE_CODE: zh
# SFTP的根目录, 可选 /tmp, Home其他自定义目录
# SFTP_ROOT: /tmp
# SFTP是否显示隐藏文件
# SFTP_SHOW_HIDDEN_FILE: false
# 是否复用和用户后端资产已建立的连接(用户不会复用其他用户的连接)
# REUSE_CONNECTION: true
# 资产加载策略, 可根据资产规模自行调整. 默认异步加载资产, 异步搜索分页; 如果为all, 则资产全部加载, 本地搜索分页.
# ASSET_LOAD_POLICY:
# zip压缩的最大额度 (单位: M)
# ZIP_MAX_SIZE: 1024M
# zip压缩存放的临时目录 /tmp
# ZIP_TMP_PATH: /tmp
# 向 SSH Client 连接发送心跳的时间间隔 (单位: 秒),默认为30, 0则表示不发送
# CLIENT_ALIVE_INTERVAL: 30
# 向资产发送心跳包的重试次数,默认为3
# RETRY_ALIVE_COUNT_MAX: 3
# 会话共享使用的类型 [local, redis], 默认local
# SHARE_ROOM_TYPE: local
# Redis配置
# REDIS_HOST: 127.0.0.1 # 如果需要部署多个 koko, 需要通过 redis 来保持会话
# REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_CLUSTERS:
# REDIS_DB_ROOM:
./koko
【基于HTML5和 JavaScript 的VNC查看器】
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.5
显示如图所示内容即表示部署成功!
【问题解决】
/usr/bin/docker-current: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See '/usr/bin/docker-current run --help'.
启动下docker就好啦~
systemctl start docker
或者重新启动下docker服务。
systemctl restart docker.service
docker images
与nginx结合支持Web Terminal前端。
进入opt目录。
cd /opt/
wget命令下载luna压缩包。
wget https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
【问题解决】http://t.csdnimg.cn/h1KAe
[root@localhost opt]# wget https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
--2023-10-10 10:41:10-- https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
正在解析主机 github.com (github.com)... 20.205.243.166
正在连接 github.com (github.com)|20.205.243.166|:443... 已连接。
无法建立 SSL 连接。
原因:
wget在使用HTTPS协议时,默认会去验证其网站的证书,而这个证书验证经常会失败。
问题解决:
方法一:在后面加“--no-check-certificate”。(执行时候不验证SSL)
--no-check-certificate
【在最后加,在wget后面加还会报同样的错误】
搞定啦~
方法二:将https换成http (更换协议,将https协议换成http)
解压
tar xf luna.tar.gz
授权
chown -R root:root luna
http://t.csdnimg.cn/p03bl
1.配置nginx所需环境
yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel
pcre使nginx支持http rewrite模块
openssl 使nginx支持ssl
zlib提供nginx对http包的内容进行gzip压缩
2.获取nginx压缩包
方法一:在官网(https://nginx.org/en/download.html)直接下载.tar.gz压缩包,然后直接拉到linux里面/使用rz命令上传。(1.如果压缩包拉不进去,使用yum -y install lrzsz指令,再进行拉取。2.rz命令上传需先下载rz)
yum -y install lrzsz
方法二:使用wget命令下载(需要系统提前安装wget,如果没有安装,使用yum install wget进行安装。)
3.解压
解压到 /usr/local 下
tar xzvf nginx-1.23.1.tar.gz -C /usr/local/
4.配置
进入解压后的目录下。
cd /usr/local/nginx-1.23.1/
可以配置啦~ O(∩_∩)O哈哈~
./configure --prefix=/usr/local/nginx
5.编译安装
make && make install
编译安装成功!
cd /usr/local/nginx/conf/
ls命令查看
创建conf.d文件夹
mkdir conf.d
cd conf.d/
创建并编辑Jumpserver.conf【注意:一定是以.conf结尾。】
vi 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 /koko/ {
proxy_pass http://localhost:5000/koko/;
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;
}
}
/usr/local/nginx/sbin/nginx
后面加-t,显示ok,successful即表示运行成功~
cd /usr/local/nginx/conf/
编辑nginx.conf文件。
vi nginx.conf
编辑前:
在keepalive_timeout 65;下面添加如下命令。
include /usr/local/nginx/conf/conf.d/*.conf;
编辑后:
编辑完成后保存退出。
重新启动nginx。
/usr/local/nginx/sbin/nginx -s reload
没有报错,就可以开始登录测试吧~
【如果报错,则表示刚才配置文件编写有问题,回去重新检查。】
浏览器使用IP地址登录。
错误页面
正确页面会显示Jumpserver开源堡垒机登录页面。
好啦,接下来就可以使用Jumpserver开源堡垒机啦~
创作不易,给个三连吧~