Jumpserver简介,部署及使用

1|0Jumpserver简介

Jumpserver 是一款使用 Python, Django 开发的开源跳板机系统, 为亏联网企业提供了认证,授权,审计,自动化运维等功能,基于ssh协议来管理,客户端无需安装agent。

1|1堡垒机

堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必须且只能严格按守卫的分配进入指定的建筑,且每个建筑物还有自己的权限访问控制,不同级别的人可以到建筑物里不同楼层的访问级别也是不一样的。还有就是,每个进入城堡的人的所有行为和足迹都会被严格的监控和纪录下来,一旦发生犯罪事件,城堡管理人员就可以通过这些监控纪录来追踪责任人。 目前比较优秀的开源软件是jumpserver,认证、授权、审计、自动化、资产管理,适合中小型公司或服务器不多的情况。商业的堡垒机Citrix XenApp、齐治包括一些云机构提供的堡垒机这里不做记录

1|2跳板机

跳板机就是一台服务器,开发或运维在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。

缺点

/* 1. 没有实现对运维人员操作行为的控制和审计,使用跳板机过程还会出现误操作导致的事故,一旦出现操作很难决定定位到原因和负责人. 2. 堡垒机,在一个特定的环境下,为了保障网络和数据收到外部和内部用户的破坏,而运行各种技术手段收集和监控网络环境每一个组成部分的系统状态,安全事件,网络活动,以便集中报警,及时处理及审计定责。 3. 堡垒机比跳板机多了实时收集,监控网络环境,集中报警等功能 */
1|3审计管理

审计管理其实很简单,就是把用户的所有操作都纪录下来,以备日后的审计或者事故后的追责。在纪录用户操作的过程中有一个问题要注意,就是这个纪录对于操作用户来讲是不可见的,什么意思?就是指,无论用户愿不愿意,他的操作都会被纪录下来,并且,他自己如果不想操作被纪录下来,或想删除已纪录的内容,这些都是他做不到的,这就要求操作日志对用户来讲是不可见和不可访问的,那么我们就可以通过堡垒机就可以很好的实现。

1|4堡垒机和跳板机区别
/* 跳板机: 只有跳转登录功能. 如果跳板机提供了以下几条,叫做审计系统或者堡垒机. 1. 记录用户操作 2. 实现了权限管理. 3. 监控网络环境 4. 集中报警 堡垒机要想成功起到他的作用,只靠堡垒机本身是不够的,,还需要一系列的安全对用户进行限制的配合,堡垒机从部署上,网络要达到以下条件. 1. 所有人包括运维、开发等任何需要访问业务系统的人员,只能通过堡垒机访问业务系统. 1> 挥手所有对业务系统的访问权限,做到了除堡垒机管理人员,没有人知道业务系统任何机器的登录密码. 2> 网络上限制所有人员只能通过堡垒机的跳转才能访问业务系统. 2. 确保除了堡垒机管理员之外,所有其他人对堡垒机本身无任何操作权限,只有一个登录跳转功能. 3. 确保用户的操作记录不能被用户自己以任何方式获取并篡改. */
1|5堡垒机功能实现需求

业务需求

/* 1. 兼顾业务安全目标与用户体验,堡垒机部署后,不应使用户访问业务系统的访问变的复杂,否则工作将很难推进,因为没人喜欢改变现状,尤其是改变后生活变得更艰难 2. 保证堡垒机稳定安全运行, 没有100%的把握,不要上线任何新系统,即使有100%把握,也要做好最坏的打算,想好故障预案. */

功能需求

/* 1. 所有的用户操作日志要保留在数据库中 2. 每个用户登录堡垒机后,只需要选择具体要访问的设置,就连接上了,不需要再输入目标机器的访问密码 3. 允许用户对不同的目标设备有不同的访问权限,例: 对10.0.2.34 有mysql 用户的权限 对192.168.3.22 有root用户的权限 对172.33.24.55 没任何权限 4. 分组管理,即可以对设置进行分组,允许用户访问某组机器,但对组里的不同机器依然有不同的访问权限  5. 密码对普通用户不可见 */
1|6jumpserver功能特点
/* 1. 完全开源,GPL授权 2. Python编写,容易二开 3. 实现了跳板机基本功能,身份认证、访问控制、授权、审计、批量操作等。 4. 集成了Ansible,批量命令等 5. 支持WebTerminal 6. Bootstrap编写,界面美观 7. 自动收集硬件信息 8. 录像回放 9. 命令搜索 10. 实时监控 11. 批量上传下载 */
1|7主要组件

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 来访问)

2|0部署

安装jumpserver 3.0版本,相对于jumpserver 2.0版本,在新的版本3.0中取消了LDAP授权,取而代之的是ssh进行推送;界面也有所变化,功能更完善,安装更简单。

2|1初始化
#!/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
2|2安装基础包和依赖
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 命令
2|3安装redis
(py3) [root@kvm-47 requirements]# yum -y install redis (py3) [root@kvm-47 requirements]# systemctl enable redis && systemctl start redis
2|4安装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;"
2|5安装配置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
2|6启动关闭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 # 配置自启
2|7部署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
2|8dockerGuacamole

建议使用 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
2|9部署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
2|10配置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

3|0Jumpserver环境访问方式

3|1白名单访问
/* 可在防火墙白名单中添加IP, 这种方法有局限性,因为家里上网的IP是不断变化的.随着开发人员增多,维护成本会增加。 */
3|2使用SSL VPN
/* 华为6300自带100个SSL VPN账号,可用Jumpserver发布为web资源,通过ssl vpn访问 */

4|0登录测试

# 检查应用是否已经正常运行 # 服务全部启动后, 访问 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>

5|0脚本快速部署

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

6|0仪表盘

7|0系统设置

7|1设置用户访问的URL

7|2设置邮箱及验证
/* 点击页面上边的"邮件设置", 进入邮件设置页面 默认使用 25 端口, 不勾选 SSL 和 TLS; 如果需要勾选 SSL, 端口需要修改成 465; 如果需要勾选 TLS, 端口需要改成 587 不可以同时勾选 SSL 和 TLS 发送账号一定要填 配置邮件服务后, 点击页面的"测试连接"按钮, 如果配置正确, JumpServer 会发送一条测试邮件到您的 SMTP 账号邮箱里面, 确定收到测试邮件后点击保存即可使用 */

7|3终端设置

密码认证”和”密钥认证”是 SSH 连接跳板机时所使用的认证方式(都不选会造成无法使用 SSH 方式连接登录跳板机, 不影响 web 登录)

“Telnet成功正则表达式” telnet设备登陆失败需要设置

“命令存储””录像存储”位置设置

“命令存储””录像存储”修改后, 需要在Jumpserver 会话管理-终端管理 修改terminal的配置 录像存储 命令记录, 然后重启 Jumpserver 服务

设置后重启 koko 才能生效

7|4安全设置

“MAF二次认证”勾选会开启全局强制”MFA”, 所有 jumpserver 用户必须使用动态口令进行认证登录(即时生效)

“限制登录失败”和”限制登录时间”设置需要重启 jumpserver 才能生效

“SSH最大空闲时间”设置需要重启 koko 才能生效

“密码校验规则”设置立即生效

8|0用户管理

8|1用户组设置

添加用户组
用户名即jumpserver登陆账号,用户组是用来资产授权,当某个资产对一个用户组授权后,这个用户组下面的所有用户都可以使用这个资产了.角色用于区分一个用户是管理员还是普通用户.

点击用户管理–>用户组–>添加用户组

8|2用户设置

9|0资产管理

9|1管理用户

管理用户是被管理服务器的 root,或拥有 NOPASSWD: ALL sudo 权限的用户,Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。

9|2系统用户

系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户, Jumpserver使用系统用户登录资产。
系统用户的 Sudo 栏填写允许当前系统用户免sudo密码执行的程序路径,如默认的/sbin/ifconfig,意思是当前系统用户可以直接执行 ifconfig 命令或 sudo ifconfig 而不需要输入当前系统用户的密码,执行其他的命令任然需要密码,以此来达到权限控制的目的。

此处的权限应该根据使用用户的需求汇总后定制,原则上给予最小权限即可。

系统用户创建时,如果选择了自动推送 Jumpserver 会使用 Ansible 自动推送系统用户到资产中,如果资产(交换机、Windows )不支持 Ansible, 请手动填写账号密码。

Linux 系统协议项务必选择 ssh 。如果用户在系统中已存在,请去掉自动生成密钥、自动推送勾选

9|3网域列表

网域功能是为了解决部分环境无法直接连接而新增的功能,原理是通过网关服务器进行跳转登录。
这个功能,一般情况不用到。

9|4资产列表

点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。

点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息。

IP 地址和管理用户要确保正确,确保所选的管理用户的用户名和密码能”牢靠”地登录指定的 IP 主机上。资产的系统平台也务必正确填写。公网 IP 信息只用于展示,可不填,Jumpserver 连接资产使用的是 IP 信息。

如果资产不能正常连接,请检查管理用户的用户名和密钥是否正确以及该管理用户是否能使用 SSH 从 Jumpserver 主机正确登录到资产主机上。
我在操作时也有连不上的情况,我的情况是更改配置文件 或者更改了其他东西,只重启了jumpserver进程,而没有全部重启,比如koko ,Guacamole。都要重启。

10|0权限管理

10|1资产授权

节点,对应的是资产,代表该节点下的所有资产。

用户组,对应的是用户,代表该用户组下所有的用户。

系统用户,及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。

节点,用户组,系统用户是一对一的关系,所以当拥有 Linux、Windows 不同类型资产时,应该分别给 Linux 资产和 Windows 资产创建授权规则。

授权后,终端连接过去才可以查看到资产

11|0会话管理

11|1Web终端

Web 终端是资产使用界面, 管理员和用户都是从这里登录到资产上, 执行操作。点击资产名字连接资产, 点击"Server"下的"Disconnect"断开资产连接。

11|2文件管理

文件管理允许对 SSH 协议资产进行文件上传下载创建删除操作(不支持上传文件夹), 目前也不支持系统用户是手动登录的资产。

11|3命令记录

命令记录里面存放的是用户在资产上执行过哪些命令, 单击一行记录, 会展示命令执行的结果:

11|4历史会话

历史会话同在线会话包含的信息一样, 都有用户、资产和 IP 地址等信息。

JumpServer 提供历史会话的录像观看。点击左侧的"回放"按钮, 即可观看录像。

终端管理

终端列表页面列出了 JumpServer 正在使用的终端有哪些, 例如:koko、Gua 等。终端第一次使用, 会首先向 JumpServer 发送请求注册, 在 JumpServer 中接受注册后就可以正常使用该终端了。

12|0作业中心

12|1批量命令

可以通过该功能快速下发命令到资产, 目前仅支持能被 ansible 管理的资产, 要求 系统用户 登陆方式为 自动登陆。

12|2任务列表

作业是 JumpServer 向其所管理下的资产发送的指令, 例如, 测试资产可连接性、获取资产硬件信息、测试管理用户可连接性和测试系统用户可连接性等命令。默认展示最近7天的作业记录。

13|0日志审计

13|1登录日志

13|2FTP日志

13|3操作日志

13|4改密日志

13|5批量命令


__EOF__

本文作者一入IT深似海,从此妹子是路人
本文链接https://www.cnblogs.com/you-men/p/13939724.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   常见-youmen  阅读(16800)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示