赞
踩
跳板机没有实现对开发或运维人员操作行为的控制和审计,使用跳板机的过程中如果出现误操作、违规操作而导致的事故的话,是无法快速定位到原因和责任人的
- 堡垒机可以给其他服务器推送sudo用户,并且为其设置权限
- 堡垒机多了一个用户行为监控的功能,并且是录像!
名词 | 含义 |
---|---|
用户组、用户 | 添加组方便进行授权,用户是授权和登录的主体,用户可以加入用户组,进行批量管理 |
资产组、资产、IDC | 资产就是管理的机器(主机),主机信息简洁完整,用户自定义备注登录,支持自动获取主机的硬件信息,资产同样可以加入资产组,进行批量管理 |
sudo、系统用户、授权规则 | 支持sudo用户授权,系统用户用于登录客户端,授权规则是将用户、资产和系统用户关联起来 |
在线历史、登录历史、命令记录、上传下载记录 | 在线实时监控用户操作,统计用户命令记录,录像回放用户操作内容,阻断控制,详细记录用户上传和下载 |
上传、下载 | 支持文件的上传和下载,实现方式是使用rz(上传)和sz(下载)命令 |
默认设置 | 默认管理用户,设置包括用户密码密钥,默认信息为了方便添加资产而设计 |
- 登录认证:资源统一登录和认证、LDAP认证、支持OpenID,实现单点登录
- 多因子认证:MFA(Google Authenticator)
- 集中账号管理:管理用户管理、系统用户管理
- 统一密码管理:资产密码托管、自动生成密码、密码自动推送、密码过期设置
- 批量密码变更:定期批量修改密码、生成随机密码
- 多云环境的资产纳管:对私有云、公有云资产统一管理
- 资产授权管理:资产树、资产或资产组灵活授权、节点内资产自动继承授权
- RemoteApp:实现更细粒度的应用级授权
- 组织管理:实现多租户管理,权限隔离
- 多维度授权:可以对用户、用户组或者系统角色授权
- 指令限制:限制特权指令使用、支持黑白名单
- 统一文件传输:SFTP文件的上传\下载
- 文件管理:Web SFTP文件管理
- 会话管理:在线会话管理、历史会话管理
- 录像管理:linux录像支持、windows录像支持
- 指令审计:指令记录
- 文件传输审计:上传\下载记录审计
- jumpserver:jumpserver为管理后台,管理人员可以通过Web页面进行资产管理、用户管理、资产授权等操作
- Coco:Coco是SSH server和Web Terminal Server(即网页linux客户端),有了Coco用户可以通过使用自己的账号登录SSH或者Web Terminal直接访问被授权的资产,这里登录的是jumpserver的账户,用户登录jumpserver的账户就可以不用密码直接管理账户中授权的资产,新版本的Coco被Koko代替
- Luna:Luna是web前端页面,用户使用Web Terminal方式登录所需要的组件
- Guacamole:Guacamole是Windows的组件,用户可以通过Web Terminal来连接Windows资产(暂时只能通过网页终端来访问)
- 硬件要求:2个CPU核心,4G内存,50G硬盘,这是最低配置
- 操作系统:Linux发行版 X86_64位的系统
- Python:只可以使用Python3.6.X版本
- Mysql:大于等于5.6版本
- mariadb:大于等于5.5.56版本
- redis
系统 | ip地址 | Python版本 | 主机名 |
---|---|---|---|
Centos7.4 | 192.168.100.202 桥接网卡 (两块网卡) | python3.6.8 | jumpserver |
******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname jumpserver
[root@Centos7 ~]# su
[root@jumpserver ~]# systemctl stop firewalld
[root@jumpserver ~]# setenforce 0
setenforce: SELinux is disabled
[root@jumpserver ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上
[root@jumpserver ~]# vim /etc/yum.repos.d/centos.repo #修改yum源,修改为本地yum源,也可以使用网络yum源进行下载,依赖包很多
[aaa]
name=aaa
baseurl=file:///mnt
enabled=1
gpgcheck=0
[jumpserver]
name=jumpserver
baseurl=file:///root/jumpserver-packs
enabled=1
gpgcheck=0
[root@jumpserver ~]# ll #上传yum库
总用量 92708
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
-rw-r--r-- 1 root root 94928169 5月 31 18:48 jumpserver-packs.tar.gz
[root@jumpserver ~]# tar xf jumpserver-packs.tar.gz
[root@jumpserver ~]# ll
总用量 92720
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
drwxr-xr-x 3 root root 8192 12月 10 2019 jumpserver-packs
-rw-r--r-- 1 root root 94928169 5月 31 18:48 jumpserver-packs.tar.gz
******(2)上传安装包,进行安装
[root@jumpserver ~]# ll
总用量 181496
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
-rw-r--r-- 1 root root 7664345 5月 31 18:51 jumpserver-master.zip
drwxr-xr-x 3 root root 8192 12月 10 2019 jumpserver-packs
-rw-r--r-- 1 root root 94928169 5月 31 18:48 jumpserver-packs.tar.gz
-rw-r--r-- 1 root root 60226671 5月 31 18:51 pip-packs.tar.gz
-rw-r--r-- 1 root root 23010188 5月 31 18:52 Python-3.6.8.tgz
[root@jumpserver ~]# tar xf pip-packs.tar.gz
[root@jumpserver ~]# tar xf Python-3.6.8.tgz -C /usr/local/src/
[root@jumpserver ~]# yum install -y gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel #安装依赖包
。。。。。。
完毕!
[root@jumpserver ~]# cd /usr/local/src/Python-3.6.8/
[root@jumpserver Python-3.6.8]# ./configure --prefix=/usr/local/python && make -j 2 && make install #make -j 2表示使用两个cpu进行编译
[root@jumpserver Python-3.6.8]# echo $?
0
[root@jumpserver Python-3.6.8]# ln -s /usr/local/python/bin/* /usr/local/bin/ #优化python命令执行路径
[root@jumpserver Python-3.6.8]# python3 -V #查看python版本
Python 3.6.8
[root@jumpserver Python-3.6.8]# pip3 -V #查看pip版本
pip 18.1 from /usr/local/python/lib/python3.6/site-packages/pip (python 3.6)
[root@jumpserver Python-3.6.8]# cd
******(3)配置python3虚拟环境,因为centos6、7自带的python版本是python2,而yum等工具依赖的是python2,所以不能直接把python2换成python3,为了不扰乱原来的环境,可以配置python3的虚拟环境,进入虚拟环境后所有的操作都会在虚拟环境中执行
[root@jumpserver ~]# python3.6 -m venv /opt/py3 #创建虚拟环境
[root@jumpserver ~]# source /opt/py3/bin/activate #进入虚拟环境
(py3) [root@jumpserver ~]# #前面多了(py3)就是进入了虚拟环境
******(4)安装jumpserver
(py3) [root@jumpserver ~]# yum -y install unzip
。。。。。。
完毕!
(py3) [root@jumpserver ~]# unzip jumpserver-master.zip -d /opt/ #解压
(py3) [root@jumpserver ~]# cd /opt/
(py3) [root@jumpserver opt]# mv jumpserver-master/ jumpserver #重命名
(py3) [root@jumpserver opt]# cd /opt/jumpserver/requirements/
(py3) [root@jumpserver requirements]# ll
总用量 24
-rw-r--r-- 1 root root 251 7月 26 2019 alpine_requirements.txt
-rw-r--r-- 1 root root 212 7月 26 2019 deb_requirements.txt
-rw-r--r-- 1 root root 359 7月 26 2019 issues.txt
-rw-r--r-- 1 root root 54 7月 26 2019 mac_requirements.txt
-rw-r--r-- 1 root root 1551 7月 26 2019 requirements.txt
-rw-r--r-- 1 root root 204 7月 26 2019 rpm_requirements.txt
(py3) [root@jumpserver requirements]# yum -y install $(cat rpm_requirements.txt) #rpm_requirements.txt里面就是jumpserver所需要的所有rpm包,$(cat rpm_requirements.txt)可以直接全部安装
。。。。。。
完毕!
******(5)安装python库依赖
#安装python库依赖有两种方法,一种是没有网络的环境下安装,一种是有网络的环境下安装
#没有网络的环境下安装:(需要有现成的pip包,一开始已经上传了)
(py3) [root@jumpserver requirements]# pip install --no-index --find-links=/root/pip-packs/ pyasn1 six cffi pytest-runner #需要先安装这几个依赖包,--no-index是忽略包索引,不加这个的话会上网络上寻找,--find-links=为指定依赖包的路径,表示直接从这个路径下寻找
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# echo $?
0
(py3) [root@jumpserver requirements]# pip install --no-index --find-links=/root/pip-packs/ -r requirements.txt #-r的意思和刚才的$(cat rpm_requirements.txt)相同
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# echo $?
0
#在有网络的环境下安装:(修改yum源文件)
默认下载pip指的是国外的源,下载特别慢,但是可以给pip指定国内的源来提升下载速度
(py3) [root@jumpserver ~]# mkdir /root/.pip
(py3) [root@jumpserver ~]# vim /root/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple #这个是清华源
[install]
trusted-host=mirrors.aliyun.com
(py3) [root@jumpserver ~]# pip install --upgrade pip #安装之前先更新pip版本,不然会报错
(py3) [root@jumpserver ~]# pip install -r requirements.txt
******(6)安装redis,如果有预先部署好的redis可以不用安装,可以使用yum或者源码包来安装
(py3) [root@jumpserver requirements]# yum -y install redis
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# systemctl start redis
(py3) [root@jumpserver requirements]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
(py3) [root@jumpserver requirements]# echo $?
0
******(7)安装mysql,如果有预先部署好的mysql可以不用安装,可以使用yum安装mariadb或者源码安装mysql
(py3) [root@jumpserver requirements]# yum -y install mariadb mariadb-devel mariadb-server
。。。。。。
完毕!
(py3) [root@jumpserver requirements]# systemctl start mariadb
(py3) [root@jumpserver requirements]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
(py3) [root@jumpserver requirements]# echo $?
0
******(8)创建jumpserver数据库并且授权用户
(py3) [root@jumpserver requirements]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.64-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database jumpserver default charset 'utf8'; #创建jumpserver库默认字体为utf8
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'jumpserver'; #授权用户
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges; #更新权限
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
******(9)生成密钥,生成的两串随机数待会会用到
(py3) [root@jumpserver requirements]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo #/dev/urandom是一个数据流,也就是随机数,默认里面是乱码,所以需要筛选,tr -dc A-Za-z0-9就是筛选字母大小写和数字的,head -c 49;echo也就是输出49个随机数
Njkc2G6ZTbkmv6SKchQIHnR0ubk29yWyhG0annnef6IHi3xYE
(py3) [root@jumpserver requirements]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16 ; echo #和上面同理
TDYY6C1tY24iZv6j
******(10)修改jumpserver配置文件,配置文件是python格式的,不能使用tab要使用空格隔开
(py3) [root@jumpserver requirements]# cd /opt/jumpserver/
(py3) [root@jumpserver jumpserver]# cp config_example.yml config.yml
(py3) [root@jumpserver jumpserver]# vim config.yml
。。。。。。
3 # $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
4 SECRET_KEY: Njkc2G6ZTbkmv6SKchQIHnR0ubk29yWyhG0annnef6IHi3xYE #中间都有空格
5
6 # SECURITY WARNING: keep the bootstrap token used in production secret!
7 # 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
8 BOOTSTRAP_TOKEN: pehtn3wIVSIuSK1v
9
。。。。。。
35 DB_ENGINE: mysql
36 DB_HOST: 127.0.0.1
37 DB_PORT: 3306
38 DB_USER: jumpserver
39 DB_PASSWORD: jumpserver #注意密码、用户、数据库名称要和刚才数据库中的操作相同
40 DB_NAME: jumpserver
41
。。。。。。 #下面还可以修改redis配置,这里直接使用默认配置了
49 # Redis配置
50 REDIS_HOST: 127.0.0.1
51 REDIS_PORT: 6379
52 # REDIS_PASSWORD:
#保存退出
******(11)生成数据表结构和初始化数据
(py3) [root@jumpserver jumpserver]# cd /opt/jumpserver/utils/
(py3) [root@jumpserver utils]# sh make_migrations.sh
(py3) [root@jumpserver utils]# echo $?
0
******(12)运行jumpserver并且配置系统启动脚本
(py3) [root@jumpserver utils]# cd /opt/jumpserver/
(py3) [root@jumpserver jumpserver]# ./jms start all #可以加-d放到后台运行,但是需要确保已经载入python3的虚拟环境CTRL+C退出,直接编写启动脚本就可以,jumpserver默认监听端口为8080
(py3) [root@jumpserver jumpserver]# vim /usr/lib/systemd/system/jms.service
[Unit]
Description=jms
After=network.target mariadb.service redis.service docker.service
Wants=mariadb.service redis.service docker.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
ExecRestart=/opt/jumpserver/jms restart all -d
ExecStop=/opt/jumpserver/jms stop
[Install]
WantedBy=multi-user.target
(py3) [root@jumpserver jumpserver]# systemctl daemon-reload
(py3) [root@jumpserver jumpserver]# systemctl start jms #开启jumpserver服务
#启动有点慢
(py3) [root@jumpserver jumpserver]# netstat -anpt | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1389/python3.6
(py3) [root@jumpserver jumpserver]# systemctl enable jms
Created symlink from /etc/systemd/system/multi-user.target.wants/jms.service to /usr/lib/systemd/system/jms.service.
登录jumpserver
右下角可以看到jumpserver的版本号
至此,jumpServer安装完成!!!
******(1)上传软件包进行安装,Luna和Koko,先安装Koko
#Luna组件下载地址:https://github.com/jumpserver/luna/releases/download/1.5.2/luna.tar.gz
#Koko组件下载地址: https://github.com/jumpserver/koko/releases/download/1.5.2/koko-master-9ab4ea6-linux-amd64.tar.gz
(py3) [root@jumpserver ~]# ll
总用量 199368
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
-rw-r--r-- 1 root root 7664345 5月 31 2021 jumpserver-master.zip
drwxr-xr-x 3 root root 8192 12月 10 2019 jumpserver-packs
-rw-r--r-- 1 root root 94928169 5月 31 2021 jumpserver-packs.tar.gz
-rw-r--r-- 1 root root 12869702 5月 31 11:57 koko-master-6d4e69b-linux-amd64.tar.gz
-rw-r--r-- 1 root root 5414831 5月 31 11:58 luna.tar.gz
drwxr-xr-x 2 root root 8192 8月 2 2019 pip-packs
-rw-r--r-- 1 root root 60226671 5月 31 2021 pip-packs.tar.gz
-rw-r--r-- 1 root root 23010188 5月 31 2021 Python-3.6.8.tgz
(py3) [root@jumpserver ~]# tar xf koko-master-6d4e69b-linux-amd64.tar.gz -C /opt/
(py3) [root@jumpserver ~]# chown -R root:root /opt/kokodir/
(py3) [root@jumpserver ~]# cd /opt/kokodir/
(py3) [root@jumpserver kokodir]# cp config_example.yml config.yml
(py3) [root@jumpserver kokodir]# vim config.yml #修改密钥要和jumpserver主配置文件中的相同
。。。。。。
8 # 请和jumpserver 配置文件中保持一致,注册完成后可以删除
9 BOOTSTRAP_TOKEN: TDYY6C1tY24iZv6j
10
。。。。。。
27 # 加密密钥
28 SECRET_KEY: Njkc2G6ZTbkmv6SKchQIHnR0ubk29yWyhG0annnef6IHi3xYE
29
。。。。。。
#完毕!
(py3) [root@jumpserver kokodir]# ./koko & #把koko放到后台进行
(py3) [root@jumpserver kokodir]# netstat -anpt | grep 2222 #koko监听的端口是2222
tcp6 0 0 :::2222 :::* LISTEN 1624/./koko
(py3) [root@jumpserver kokodir]# echo " cd /opt/kokodir && ./koko & " >> /etc/rc.local #加入系统启动脚本
(py3) [root@jumpserver kokodir]# chmod +x /etc/rc.local #添加可执行权限
使用浏览器访问jumpserver,点击终端管理,确认安装成功
******(2)安装Luna,需要安装nginx,做反向代理,并且配置缓存,加速用户访问web终端的速度
(py3) [root@jumpserver kokodir]# cd
(py3) [root@jumpserver ~]# tar xf luna.tar.gz -C /opt/
(py3) [root@jumpserver ~]# chown -R root:root /opt/luna/
(py3) [root@jumpserver ~]# yum -y install nginx #也可以使用源码包安装
。。。。。。
完毕!
(py3) [root@jumpserver ~]# sed -i "/#/d" /etc/nginx/nginx.conf
(py3) [root@jumpserver ~]# sed -i "/^$/d" /etc/nginx/nginx.conf
(py3) [root@jumpserver ~]# vim /etc/nginx/nginx.conf #修改nginx的配置文件,直接修改为jumpserver
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
client_max_body_size 100m; #限制录像以及文件上传大小
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
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 /coco/ {
proxy_pass http://localhost:5000/coco/;
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;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
(py3) [root@jumpserver ~]# 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@jumpserver ~]# systemctl start nginx
(py3) [root@jumpserver ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
这里没有安装windows的组件guacamole,因为安装后只能通过jumpserver的web客户端来连接windows服务器,不实用。
设置站点的URL为ip地址或者域名,不能使用localhost不然邮箱可能会发不过去
这里创建的用户是指登录jumpserver的用户,这个用户可以登录jumpserver,然后管理自己的资产(服务器)
开启一台新的虚拟机主机名web
点击提交
用户可以绑定一些命令过滤器,一个过滤器可以定义多个规则,当用户使用这个系统用户登录资产时,会先检查过滤器中是否有这个命令,根据匹配规则来决定这个命令是否生效
系统用户是jumpserver跳转登录被管理机器时使用的用户,简单的来说用户使用自己的用户名登录jumpserver,这个用户是登录不了被管理机器的,想要登录被管理机器就需要创建系统用户,系统用户创建时,如果选择了自动推送,jumpserver就会调用ansible自动推送新创建的系统用户到当前jumpserver用户的所有资产当中,如果有的资产不支持ansible的话就需要jumpserver用户手动填写用户密码
图形化的界面可以自己慢慢摸索
******(1)将pip已经安装的包生成文件
(py3) [root@jumpserver ~]# pip list #查看安装的包
(py3) [root@jumpserver ~]# pip freeze > requirements.txt
#将已经通过pip安装的包的名称记录到 requirements.txt文件中
******(2)缓存pip下载的包
(py3) [root@jumpserver ~]# pip download -d /root/pip-packs/ -r requirements.txt
-d 指定缓存的目录
-r 指定缓存的软件目录
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。