柴少的官方网站 技术在学习中进步,水平在分享中升华

Jumpserver新版本使用操作

#官方文档:http://docs.jumpserver.org/zh/docs/admin_guide.html

一、系统设置

1.1 基本设置

image.png

#这里改完一定要点击提交哈,不然这次更改就不保存了。设置表:settings

1.2 邮件设置

image.png

1.3 LDAP设置

#LDAP这个功能挺好的,域统一管理吗,这样就可以做到一个账号多次登录了。

image.png

image.png

#图中介绍的已经很详细了,就不介绍每一个框代表什么意思了,这里解释一处小修改,有个公司为了安全考虑可能写入ldap中的密码是加密的,那么现在jumpserver发送的还是明文的形式,那么你就会用户登录失败,挺好一个功能还是要用起来的,下面以md5加密为例记录一下小修改:

#vim /opt/jumpserver/apps/authentication/ldap/backends.py  #下面只粘贴修改部分

import ldap
import hashlib  #在文件的头部引入hashlib模块
 
class LDAPAuthorizationBackend(LDAPBackend):
"""
Override this class to override _LDAPUser to LDAPUser
"""
def authenticate(self, request=None, username=None, password=None, **kwargs):
    if password or self.settings.PERMIT_EMPTY_PASSWORD:
        ldap_user = LDAPUser(self, username=username.strip(), request=request)   #在此行下面增加三行对password进行加密验证
        m = hashlib.md5()   #增加此行
        m.update(password.encode('utf-8'))   #增加此行
        password = m.hexdigest()   #增加此行
        user = self.authenticate_ldap_user(ldap_user, password)

1.4 终端设置

#暂时先保持默认吧。

资产列表排序项,可以选择按主机名或者 IP 来排序,默认是按主机名排序。心跳间隔指的是 Coco 和 Gua 等终端向 Jumpserver 发送心跳信息的频率,如果 Jumpserver 长时间(1个小时)未收到 Coco 和 Gua 发送的心跳数据,Jumpserver 则认为该终端也"死掉",在"会话管理"下的"终端管理"页面会显示该终端已掉线。会话保留时长就是定期清理会话记录,默认是9999天。

#默认终端ssh工具链接堡垒机的时候密码和秘钥都可以,但是如果你不想终端通过密码登陆的话,可以如下设置(去掉密码认证的勾选):

image.png

1.5 安全设置

image.png

#上面的SSH最大空闲时长解释的很清楚就是你终端多长时间无操作与堡垒机的连接就会断开,如果觉得30分钟太短可以调大。

#上面的MFA勾选了就是全局强制使用MFA,这样会比较麻烦一点,每个使用堡垒机的用户都需要下载一个谷歌验证器进行绑定。

image.png

#如果我们只想针对用户开启强制MFA二次认证呢,当然数据库里面的_opt_level字段设置成2就可以了,但是也不能定时任务去改哈,最好让用户注册的时候就只能选择强制启动MFA认证。

# vim /opt/jumpserver/apps/users/views/login.py   #如下面代码只留choices那个k ==2的那一行

    def get_form(self, step=None, data=None, files=None):
        form = super().get_form(step, data, files)
        form.instance = self.request.user

        if isinstance(form, forms.UserMFAForm):
            choices = form.fields["mfa_level"].choices
            #if self.request.user.mfa_force_enabled:
            choices = [(k, v) for k, v in choices if k == 2]
            #else:
            #    choices = [(k, v) for k, v in choices if k in [0, 1]]
            form.fields["mfa_level"].choices = choices
            form.fields["mfa_level"].initial = self.request.user.mfa_level
        return form

二、资产管理

2.1 管理用户

管理用户是服务器的 root,或拥有 NOPASSWD: ALL sudo 权限的用户,Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。名称可以按资产树来命名。用户名 root。密码和 SSH 私钥必填一个,当然如果秘钥设置了密码的话就需要用到密码了。

博文来自:www.51niux.com

image.png

#这个是存在assets_adminuser表:

*************************** 1. row ***************************
           id: 71204f78e54a48959d3c27c9a0da44ad
         name: work
     username: work
    _password: NULL
 _private_key: 
  _public_key: 
 date_updated: 2018-11-24 12:56:38.358501
   created_by: admin1
       become: 1
become_method: sudo
  become_user: root
 _become_pass: 
       org_id:

2.2 命令过滤

      系统用户可以绑定一些命令过滤器,一个过滤器可以定义一些规则 当用户使用这个系统用户登录资产,然后执行一个命令 这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配, 当一个规则匹配到了,如果规则的动作是 允许, 这个命令会被放行, 如果规则的动作是 禁止,命令将会被禁止执行, 否则就匹配下一个规则,如果最后没有匹配到规则,则允许执行 

image.png

#过滤器表:assets_commandfilter

*************************** 1. row ***************************
      org_id: 
          id: f3b168f0e0da44fd98e96335f8474372
        name: 禁止rm
   is_active: 1
     comment: 禁止rm操作
date_created: 2018-11-24 12:51:24.750644
date_updated: 2018-11-24 13:06:08.302660
  created_by: admin1

image.png

image.png

#规则表assets_commandfilterrule,里面跟过滤器id想关联:

*************************** 1. row ***************************
      org_id: 
          id: a0fd061759c24707bc6a8a8b83393fc7
        type: command
    priority: 100
     content: reboot
rm -f
rm -rf
shutdown
rm
      action: 0
     comment: 
date_created: 2018-11-24 13:06:42.854837
date_updated: 2018-11-24 13:09:13.661711
  created_by: admin1
   filter_id: f3b168f0e0da44fd98e96335f8474372
1 row in set (0.00 sec)

2.3 资产列表:

资产树的创建:

#在新版的jumpserver上面已经没有了资产组,转而用更好的节点树来取代资产组,这样一个立体的节点数是更方便管理维护的。

image.png

#资产和节点的对应关系是表:assets_asset_nodes(里面是节点asset_id和node_id),节点表:assets_node(节点的详细信息)

查看和创建资产:

image.png

#资产表:assets_asset

image.png

博文来自:www.51niux.com

#创建资产比较简单跟以前差别不大就是从选择资产组换成了选择节点。

2.4 系统用户

      系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户,如 web, sa, dba('ssh web@some-host'), 而不是使用某个用户的用户名跳转登录服务器('ssh xiaoming@some-host'); 简单来说是 用户使用自己的用户名登录 Jumpserver, Jumpserver 使用系统用户登录资产。

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

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

创建一个需要推送的用户:

image.png

#特别注意:

这个系统默认推送确实很方便你主机关联到对应的节点之后系统用户就会自动推送过去,但是这个数量少是没啥问题的,但是当你主机数量很多的时候你重启jumpserver如果不制定-d后台运行的话,你会看到输出很疯狂的在推送然后你会看到你的CPU干满了内存也用了很多因为大批量机器的ansible是很耗费资源的,然后堡垒机使用不了了,这时候手工把自动推送关闭也是没用的。但是你把系统用户的自动推送功能关闭了就又没有推送按钮了,怎么办呢?可以选择在初始化的时候将对应的用户提前创建并进行sudoer权限配置并传输对应的秘钥,如果需要更新sudoer权限配置或者秘钥的话可以用中控机来解决或者等着夜深人静的时候开启自动推送按钮默默的推送一把再关闭掉此功能。

#系统用户信息在表:assets_systemuser

image.png

#系统用户和过滤器的关联关系表:assets_systemuser_cmd_filters(里面只有系统用户的id和过滤器的id)

推送系统用户:

image.png

#系统用户和推送资产的关联表:assets_systemuser_assets(只有系统用户id和资产id),系统用户和节点的对应表assets_systemuser_nodes

推送系统用户在做什么?

推送系统用户就是看看被推送节点有没有这个用户没有就创建,然后又没有公钥文件没有则创建,有没有堡垒机的公钥没有则添加。

系统用户推送的时候报错小记录?

报错信息:

 UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh_exchange_identification: read: Connection reset by peer\r\n", "unreachable": true}

登录报错:Error reading SSH protocol banner

解决办法:可以尝试直接SSH指定失败的服务器看看报什么错误,比如像ssh_exchange_identification: read: Connection reset by peer这种报错,就是被登录机器/etc/hosts.allow和/etc/hosts.deny做了来源机器的SSH登陆限制。

#关于系统推送用户要特别注意一下:

1. 旧版的Jumpserver是没有自动推送的,新版的添加完主机到对应的节点之后就可以自动推送了,但是要特别注意的是,这个系统用户是要跟节点直接绑定
才能到达自动添加资产到系统用户下面自动推送,比如说直接跟ROOT节点每次你添加完主机都要删除掉ROOT节点再添加ROOT节点才能自动推送,但是如果你直接
绑定的是权限这个节点,然后你在权限节点下面添加资产就能达到系统用户自动推送的目的,所以系统用户要跟最底层的节点相关联,所以节点最好也不要分太细。
2. 这个自动推送的触发是当你添加资产到节点那次触发的,如果这次推送失败了,你在系统用户这里能看到新添加的资产,但是用户是没有推送过去的需要手工推送一下。

关于命令过滤需要注意的一点:

image.png

#从上图可以看到命令被禁止了

$ cat 1.sh

#!/bin/bash
rm -f nihao

$ sudo sh 1.sh   #这种方式依然可以删除掉

#这是因为过滤也只是对要执行的命令进行了过滤,如果你降要执行的命令包在了脚本里面或者通过其他的语言封装一下依旧无法检测到的,所以授权的时候还是需要什么权限就给什么权限。

#当然你系统用户可以:ALL,!/bin/rm   #这样它就不能删除root用户或者其他用户下的文件或者目录了

#当然如果一个用户想除了不能rm或者修改某些文件以外想获取更多的权限,可以sudoer文件里这样设置:

ops ALL=(ALL) NOPASSWD:ALL,!/bin/bash,!/bin/tcsh,!/bin/su,!/usr/bin/passwd,!/usr/bin/passwd root,!/bin/vi /etc/sudoers,!/usr/bin/vim /etc/sudoers,!/usr/sbin/visudo,!/usr/bin/sudo -i,!/bin/vi /etc/ssh/*,!/bin/chmod 777 /etc/*,!/bin/chmod 777*,!/bin/chmod 777,!/bin/chmod -R 777 *,!/bin/rm /*,!/bin/rm /,!/bin/rm -rf /,!/bin/rm -rf /*,!/bin/rm /etc,!/bin/rm -r /etc,!/bin/rm -rf /etc,!/bin/rm /etc/*,!/bin/rm -r /etc/*,!/bin/rm -rf /etc/*,!/bin/rm /root,!/bin/rm -rf /root,!/bin/rm /root/*,!/bin/rm -r /root/*,!/bin/rm -rf /root/*,!/bin/rm /bin,!/bin/rm -r /bin,!/bin/rm /bin/*,!/bin/rm -r /bin/*,!/bin/rm -rf /bin/*,!/bin/vim /var/spool/cron/root,!/bin/vi /var/spool/cron/root

2.5 标签管理

创建标签:

点击页面左上角"创建标签"按钮,进入创建标签页面:

给资产打上标签便于查询和管理。标签信息有名称和值:名称可以是描述功能信息,例如:用途,值则可以是具体信息,例如:组织1-部门1-研发。标签创建的时候可以选择为已存在的资产打上该标签。

image.png

标签名称可以重名,一个资产可以有多个标签产。标签删除,资产上的标签信息会自动消失。

#标签的信息表:assets_label 

*************************** 1. row ***************************
      org_id: 
          id: 51a15987340a4148bfcdbdda6daeb463
        name: 用途
       value: 销售部门-权限组
    category: U
   is_active: 1
     comment: NULL
date_created: 2018-11-26 12:31:07.807344
*************************** 2. row ***************************
      org_id: 
          id: a2d66c159e974c4db3d2d0221404d228
        name: 用途
       value: 测试部门-QA测试
    category: U
   is_active: 1
     comment: NULL
date_created: 2018-11-26 12:27:01.090057

主机添加标签:

image.png

根据标签进行搜索:

image.png

#资产和标签的关联表示:assets_asset_labels (里面是资产id和标签id)

三、用户管理

#堡垒机是给人用的,那么就是创建用户了

3.1 用户组

       用户组,顾名思义,给用户分组。用户组信息很有用,在分配资产权限的时候,针对的某个用户组下的所有用户,可以为一个用户分配多个用户组。

       点击页面左侧"用户管理"菜单下的"用户组",进入用户组列表页面。

image.png

#这里注意用户组一般跟节点也就是资产组绑定在一起,然后再资产授权那里授权一下,当用户组删除的时候,资产授权的那条规则自然就没有了,但是当你再把用户组创建出来,资产授权那里不会添加的需要重新绑定一下。

image.png

#用户组的基本信息表:users_usergroup

image.png

#用户组和用户组的对应关系表:users_user_groups

3.2 创建用户

管理台创建用户:

点击页面左侧"用户列表"菜单下的"用户列表",进入用户列表页面。

点击页面左上角"创建用户"按钮,进入创建用户页面,填写账户,角色安全,个人等信息。

其中,用户名即 Jumpserver 登录账号。用户组是用于资产授权,当某个资产对一个用户组授权后,这个用户组下面的所有用户就都可以使用这个资产了。角色用于区分一个用户是管理员还是普通用户。

image.png

#关于MFA前面已经说过了,如果在系统设置那里选择了开启MFA,那么用户就只有开启MFA一条路。

image.png

#用户信息表:users_user

用户个人的操作:

image.png

#用户收到邮件之后就跟着邮件链接去创建自己的密码,绑定MFA,下载秘钥等完善信息等操作。

3.3 禁止用户修改自己的个人信息

#特别强调jumpserver最新版默认这里就禁止更改了所以这里可以忽略了。

image.png

image.png

#操作日志的的信息记录在数据库的audits_operatelog表。

#从上图中操作日志的截图中也可以看到用户可以自由的对自己的个人信息改来改去。

#我靠这么玩你怎么管理,按理说用户的个人信息应该掌握在管理员的手里面,jumpserver如何禁止用户修改自己的个人信息呢?

简单的解决办法:

# vim /opt/jumpserver/apps/users/templates/users/user_profile.html   #找到下面的三句话并注释掉

                            <!--
                            <li class="pull-right">
                                <a class="btn btn-outline btn-default" href="{% url 'users:user-profile-update' %}"><i class="fa fa-edit"></i>{% trans 'Setting' %}</a>
                            </li>
                            -->

#这是把用户个人信息节点右上角的设置给注释掉了,用户找不到设置的按钮了。

#但是问题依旧没有解决,用户个人信息界面还有更改密码,更改秘钥等操作都会跳转到设置的界面,我们还要在前端页面上面注释点东西:

# vim /opt/jumpserver/apps/users/templates/users/user_profile_update.html  #找到下面三句话并注释掉或者删除掉,删掉最好

                                    <!--
                                    {% bootstrap_field  form.username layout="horizontal" %}
                                    {% bootstrap_field  form.name layout="horizontal" %}
                                    {% bootstrap_field  form.email layout="horizontal" %}
                                    -->

image.png

#下面是V1.5.9或者V1.5.8的html文件注释

#vim /opt/jumpserver/apps/users/templates/users/user_profile.html

                                <table class="table">
                                    <tbody>
                                    <!--
                                    <tr class="no-borders-tr">
                                        <td>{% trans 'Set MFA' %}:</td>
                                        <td>
                                            <span class="pull-right">
                                                <a type="button" class="btn btn-primary btn-xs" style="width: 54px" id=""
                                                   href="
                                                        {% if request.user.mfa_enabled %}
                                                            {% if request.user.mfa_force_enabled %}
                                                                " disabled >{% trans 'Disable' %}
                                                            {% else %}
                                                                {% url 'users:user-otp-disable-authentication' %}
                                                                ">{% trans 'Disable' %}
                                                            {% endif %}
                                                        {% else %}
                                                            {% url 'users:user-otp-enable-start' %}
                                                            ">{% trans 'Enable' %}
                                                        {% endif %}
                                                </a>
                                            </span>
                                        </td>
                                    </tr>
                                    {% if request.user.mfa_enabled %}
                                    <tr>
                                        <td>{% trans 'Update MFA' %}:</td>
                                        <td>
                                            <span class="pull-right">
                                                <a type="button" class="btn btn-primary btn-xs" style="width: 54px" href="{% url 'users:user-otp-update' %}">{% trans 'Update' %}</a>
                                            </span>
                                        </td>
                                    </tr>
                                    {% endif %}
                                    {% if request.user.can_update_password %}
                                    <tr class="no-borders">
                                        <td>{% trans 'Update password' %}:</td>
                                        <td>
                                            <span class="pull-right">
                                                <a type="button" class="btn btn-primary btn-xs" style="width: 54px" href="{% url 'users:user-password-update' %}">{% trans 'Update' %}</a>
                                            </span>
                                        </td>
                                    </tr>
                                    {% endif %}
                                    {% if request.user.can_update_ssh_key %}
                                    <tr>
                                        <td>{% trans 'Update SSH public key' %}:</td>
                                        <td>
                                            <span class="pull-right">
                                                <a type="button" class="btn btn-primary btn-xs" style="width: 54px" href="{% url 'users:user-pubkey-update' %}">{% trans 'Update' %}</a>
                                            </span>
                                        </td>
                                    </tr>
                                    -->

#下面是效果图:

image.png

3.4 资产授权列表

image.png

#授权规则表:perms_assetpermission (只有最基本的授权规则的id基本信息):

*************************** 1. row ***************************
          id: 90055b29a8ce46008e86179ce4d7fc51
        name: 测试
   is_active: 1
date_expired: 2088-11-06 13:00:00.000000
  created_by: admin1
date_created: 2018-11-24 13:01:01.232704
     comment: 
  date_start: 2018-11-24 13:00:00.000000
      org_id: 
*************************** 2. row ***************************
          id: c75d557ebbd945f0b9e0baea8aed813d
        name: 权限组
   is_active: 1
date_expired: 2088-11-09 07:19:00.000000
  created_by: admin1
date_created: 2018-11-27 07:20:34.854874
     comment: 
  date_start: 2018-11-27 07:19:00.000000
      org_id:

#授权规则和单独资产的关系表perms_assetpermission_assets

#授权规则和节点的关联关系表perms_assetpermission_nodes:

*************************** 1. row ***************************

                id: 1

assetpermission_id: 90055b29a8ce46008e86179ce4d7fc51

           node_id: 0260956f57044395ad7c0dc10ab7765f

*************************** 2. row ***************************

                id: 2

assetpermission_id: c75d557ebbd945f0b9e0baea8aed813d

#授权规则和系统用户的id对应关系表perms_assetpermission_system_users

*************************** 1. row ***************************
                id: 4
assetpermission_id: 90055b29a8ce46008e86179ce4d7fc51
     systemuser_id: 37d33b9fd90a45d196ca6c3622816325
*************************** 2. row ***************************
                id: 3
assetpermission_id: c75d557ebbd945f0b9e0baea8aed813d
     systemuser_id: 81a809fcea954b158eb8a0fbe62bbc82

#授权规则和用户组的id对应关系表perms_assetpermission_user_groups

#授权规则和用户的id对应关系表perms_assetpermission_users

3.4 Web终端

#个人用户可以通过Web界面访问jumpserver授权的机器,点击左侧的Web终端便可以了。

image.png

#文件管理,点击文件管理有个连接,点击连接就可以在页面左侧就可以把自己有权限的主机显示出来,也是锁定在/tmp用户下面,然后就可以创建目录,创建文件以及上传文件了(上传文件点击选中主机页面右侧灰色的界面就会有相关选项)。

3.5 数据库应用

#此功能在V1.5.8-V1.5.9上面有,V1.4.8是没有的,中间有几版有就不去深究了。新功能就简单记录补充下。

创建数据库应用:

image.png

创建数据库系统用户(跟创建资产系统用户一样):

image.png

权限管理-数据库授权(跟Linux主机授权一样):

image.png

如何登陆呢?

要通过Web终端来登陆,如果用SSH终端是搜索不到的。

image.png

五、日志审计

5.1 登录日志

登录日志,记录 Jumpserver 用户的登录信息,包含用户名、类型:通过网页登录(Web)还是终端登录(Terminal)、Agent:所用代理、登录的 IP 地址、登录的地点以及登录日期。

还可以指定某一用户,查询其登录的历史记录。

点击页面左侧"用户管理"菜单下的"登录日志"按钮,进入登录日志页面:


image.png

#登录信息存储在了数据库的users_loginlog表。

5.2 FTP日志

image.png

#可以看到谁往哪台机器做了什么上传操作。

#这个信息存储在了数据库的audits_ftplog表。

5.3 改密日志

#这个就不截图了,就是哪个用户谁改了密码的记录。这个信息记录在audits_passwordchangelog表。

5.4 命令执行

#这个命令执行就是记录普通用户对所拥有的机器批量执行命令操作的记录,就可以理解为用户选择多个主机然后用ansible推送操作。

特别注意:

批量执行操作确实很方便但是这个操作应该交由中控机来做,也不应该交给个人用户来批量去操作一些东西,所以可以试着注释掉这个功能。

# vim /opt/jumpserver/apps/ops/templates/ops/command_execution_create.html   #只留一个解释

<div class="wrapper wrapper-content">
<p>此功能禁止使用,请使用其他功能</p>
</div>
{% endblock %}
 
{% block custom_foot_js %}
{% endblock %}

image.png

#只是注释掉了Html页面可能觉得还是不靠谱,那就再把代码注释掉

#vim /opt/jumpserver/apps/ops/views/command.py

class CommandExecutionStartView(TemplateView):
     template_name = 'ops/command_execution_create.html'   #只留这一句其他的都注释掉

#不过在新版堡垒机就不用这么麻烦了,只要用管理员将此功能去掉普通用户就不能执行命令了

image.png

六、作业中心

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

image.png

点击作业名称可以查看作业的具体详情、作业的历史版本以及作业执行的历史记录。

命令记录

#在表terminal_command

image.png

#另外在线回话可以查看当前的在线用户,历史回话可以查看录像回放。

七、一些问题处理和非官网文档的东西

博文来自:www.51niux.com

7.1 如何搞多个Jumpserver节点负载均衡?

#首先先在一台机器上面把jumpserver配置好后,直接把jumpserver目录发送到其他的节点上面去(当然数据库和redis都是远端),cocod服务器连接本地,然后nginx配置一样,前端直接顶负载均衡就可以了。

#还有一步没有做完,/opt/jumpserver/data,这个data目录要做共享,里面celery安日期存储了日志,media是我们的录像。

7.2  如何将个人用户界面的命令执行,web终端,文件管理 三个菜单项全部隐藏掉,也就是只让用户可以查看个人信息。

#vim /opt/jumpserver/apps/templates/_nav_user.html    #注释掉 Command execution, Web terminal, File manager 这三个<li> </li> 标签

{% load i18n %}
<li id="assets">
    <a href="{% url 'assets:user-asset-list' %}">
        <i class="fa fa-files-o" style="width: 14px"></i><span class="nav-label">{% trans 'My assets' %}</span><span class="label label-info pull-right"></span>
    </a>
</li>
<!--
<li id="ops">
    <a href="{% url 'ops:command-execution-start' %}">
        <i class="fa fa-terminal" style="width: 14px"></i> <span class="nav-label">{% trans 'Command execution' %}</span><span class="label label-info pull-right"></span>
    </a>
</li>
-->
<li id="users">
    <a href="{% url 'users:user-profile' %}">
        <i class="fa fa-user" style="width: 14px"></i> <span class="nav-label">{% trans 'Profile' %}</span><span class="label label-info pull-right"></span>
    </a>
</li>
<!--
<li>
    <a href="{% url 'terminal:web-terminal' %}" target="_blank"><i class="fa fa-window-maximize" style="width: 14px"></i>
        <span class="nav-label">{% trans 'Web terminal' %}</span>
    </a>
</li>
<li>
    <a href="{% url 'terminal:web-sftp' %}" target="_blank"><i class="fa fa-file" style="width: 14px"></i>
        <span class="nav-label">{% trans 'File manager' %}</span>
    </a>
</li>
-->

7.3 去掉前端页面更改MFA功能和去掉更改SSH密钥前端显示

image.png

#如果不想用户更改MFA。

#更改SSH密钥功能是让用户可以自定义的产生密钥对并上传自己的公钥,当时如果想前端页面去掉此功能(但是在个人信息设置里面还有此功能,所以此功能还是保存下来的只是在个人信息那个页面看不到了)。

# vim /opt/jumpserver/apps/users/templates/users/user_profile.html

<!--
{% if request.user.otp_enabled and request.user.otp_secret_key %}
<tr>
<td>{% trans 'Update MFA' %}:</td>
<td>
<span class="pull-right">
<a type="button" class="btn btn-primary btn-xs" style="width: 54px" href="{% url 'users:user-otp-update' %}">{% trans 'Update' %}</a>
</span>
</td>
</tr>
{% endif %}
<tr>
<td>{% trans 'Update SSH public key' %}:</td>
<td>
<span class="pull-right">
<a type="button" class="btn btn-primary btn-xs" style="width: 54px" href="{% url 'users:user-pubkey-update' %}">{% trans 'Update' %}</a>
</span>
</td>
</tr>
-->

#注释上面的两段就可以起到在前端界面注释掉两个功能的效果了。

image.png

7.4 cocod下面的录像文件没有放到jumpserver的data/media/replay下面导致录像未找到的补全操作

#如果你用了一段时间你会发现你有些/opt/coco/data/replays/目录是空的但是还有些目录里面还有文件。

image.png

#如上图用du -sh 查看大部分目录是空的这是正常的因为录像文件在在线会话的时候会一直在/opt/coco/data/replays/下的对应文件中记录然后等到会话结束之后就会转储到/opt/jumpserver/data/media/replay/对应的时间目录下面。但是可能会因为录像文件太大超过了上传了你nginx配置的上传限制或者是因为当时cocod进程不定出现什么问题导致你这个录像文件格式不正常没有转储到jumpserver的录像目录下。

我们先来找找是哪个哥们干了啥导致了录像文件那么大:

第一步:先查看是什么录像文件这么大?

# ls -Slhr 2019-04-01

总用量 11G
-rw-rw-r--+ 1 root root 11G 4月   3 00:27 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b

第二步:进数据库查看是谁干的?

select * from terminal_session where id="786c4f9eaee1480898b2d63bf4cc6d4b"\G
*************************** 1. row ***************************
              id: 786c4f9eaee1480898b2d63bf4cc6d4b
            user: 51niux
           asset: 线下-测试机器-01
     system_user: work
      login_from: ST
     is_finished: 1
      has_replay: 0
     has_command: 0
      date_start: 2019-04-01 13:41:20.000000
        date_end: 2019-04-10 06:18:59.460896
     terminal_id: d70963251a084f31ac4983e0ff6f98f6
     remote_addr: 192.168.1.4
date_last_active: 2019-04-01 13:41:20.449310
        protocol: ssh
          org_id: 
1 row in set (0.00 sec)

第三步:已经拿到了使用人:51niux,使用资产:线下-测试机器-01,系统用户:work,然后时间是:2019-04-01

image.png

#根据数据库中获取的信息选择对应的搜索条件然后就会获取到查看录像回放的操作,然后没多少挨个点一下保险一点,然后直到提示:

image.png

#可以看到URL链接末尾的UUID号码跟你cocod对应日期下面的那个录像文件名称是一致的。

已经是谁导致了录像文件那么大,得看看他干了啥啊?这就涉及到录像文件的手工转储了。

#先来一个错误的:

#cp 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b.replay

#gzip 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b.replay

#cd 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b.replay.gz  /opt/jumpserver/data/media/replay/2019-04-01/

image.png

#提示无法加载,既然已经将压缩文件拷贝过去了为啥还无法加载,那是因为文件格式不全。

#正常的录像格式文件末尾是"0":""},而这个有问题的日志格式是没有这些字段的也就是不是一个完成的json格式,所以正确的操作。

#cp 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b.replay

#echo '"0":""}' >> 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b.replay

#gzip 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b.replay

#cd 786c4f9e-aee1-4808-98b2-d63bf4cc6d4b.replay.gz  /opt/jumpserver/data/media/replay/2019-04-01/

#然后再点击回放功能就能正常查看了,你就知道这哥们都干啥了。

7.5 修改主机名的问题

#修改主机名很简单,界面就能直接更新,但是你要注意到,当你修改完主机名,历史会话和操作命令关于这个IP的历史记录你就搜不到了。为什么?因为历史会话和操作命令是两张表,而表里面是以主机名为搜索关键字的,比如你主机名叫"aaa"那么操作命令都是跟"aaa"相关联的,当你换成"bbb"的时候这些操作你就搜不到了,当然官网说这个问题后续会优化,但是截至到博文编写还未优化。

如何来屏蔽掉这个问题呢?

#修改操作记录里面的值从旧的名称换成新的主机名称
sql = 'update terminal_command set asset="%s" where asset="%s";' %(new_hostname,old_hostname)
#修改会话信息里面的值从旧的主机名称替换成新的主机名称
sql = 'update terminal_session set asset="%s" where asset="%s";' %(new_hostname,old_hostname)

#就是当你修改了堡垒机的主机名称之后需要做这两步sql执行,下面你就是看你放到程序里面还是手工来执行了。

7.6 COCO或者是KOKO超时时间设置

#这是一个小知识点,默认是15秒,如果一个主机登录失败那么等待连接的时间太长了,可以将其修改为3-5秒体验会好SSH_TIMEOUT: 3。

#另外随着审计工作的升级,新版本堡垒机增加了审计员的角色也是一个不错的功能。

#另外新版的堡垒机资产权限变更后,已经不需要再SSH终端再输入r了,终端直接就可以看到新增加的资产了这也是不错的功能。

作者:忙碌的柴少 分类:Jumpserver 浏览:25160 评论:1
留言列表
zhangtianguang
zhangtianguang 牛!  回复
发表评论
来宾的头像