第17章 jumpserver的搭建
17.1 jumpserver的介绍
- jumpserver是全球首款开源的堡垒机,使用的是GNU,GPL的开源协议.
- jumpserver是用python和go语言进行开发的,使用的是web界面进行使用的,方便,简单
- jumpserver现在支持ssh,telnet,vnc协议资产
17.2 搭建jumpserver的意义
- jumpserver可以拦截非法访问和恶意攻击,对不符合法的命令进行阻断
- jumpserver建立了完善的用户权限管理制度,可以更加的精确的指定用户所特有的服务器,最大的程度导致越权造成的问题,提高运维的安全性
- jumpserver可以集中账号的管理,提高管理效率
17.3 支持的系统
- 硬件:ssh协议的硬件设备
- 软件:centos,redhat,fedora,linux,Debian,SUSE,Ubuntu,FreeBSD
17.4 jumpserver的特点
- 完全开源,GPL授权
- python开发,容易再次开发
- 实现了跳板机的基本功能.认证,授权,审计
- 支持web界面,界面美观
- 录像回放
- 监控管理
- 批量上传下载
17.5 jumpserver命令行配置
17.5.1 关闭防火墙和selinux
[root@jumpserver ~] # systemctl status firewalld 关闭
● 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)
[root@jumpserver ~] # getenforce
Disabled 关闭
[root@jumpserver ~] #
17.5.2 安装所需的jumpserver的软件信息
yum -y install git python-pip mysql-devel mariadb-server gcc automake autoconf python-devel vim sshpass lrzsz readline-devel
17.5.3 下载jumpserver
[root@jumpserver opt] # cd /opt/
[root@jumpserver opt] # git clone https://git.coding.net/jumpserver/jumpserver.git
Cloning into \'jumpserver\'...
Receiving objects: 100% (11559/11559), 13.56 MiB | 218.00 KiB/s, done.
Resolving deltas: 100% (7897/7897), done.
You have new mail in /var/spool/mail/root
[root@jumpserver opt] #
17.5.4 安装python依赖的软件
17.5.4.1 更新pip源
[root@jumpserver opt] # mkdir ~/.pip/
You have new mail in /var/spool/mail/root
[root@jumpserver opt] # vim ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
17.5.4.2 安装的python的依赖软件
[root@jumpserver opt] # cd /opt/jumpserver/install/
[root@jumpserver install] # pip install -r requirements.txt
17.5.4.3 重启数据库
[root@jumpserver install] # systemctl restart mariadb
[root@jumpserver install] #
17.5.5 软件进行初始化的过程
[root@jumpserver install] # python /opt/jumpserver/install/install.py
请务必先查看wiki https://github.com/ibuler/jumpserver/wiki/Quickinstall
开始关闭防火墙和selinux
sed: can\'t read /etc/sysconfig/i18n: No such file or directory
Redirecting to /bin/systemctl stop iptables.service
Failed to stop iptables.service: Unit iptables.service not loaded.
请输入您服务器的IP地址,用户浏览器可以访问 [10.0.0.81]: 10.0.0.81
是否安装新的MySQL服务器? (y/n) [y]: y
请输入SMTP地址: smtp.qq.com
请输入SMTP端口 [25]:
请输入账户: 460523471@qq.com
请输入密码: enoncgdkvjhlbjbd
请登陆邮箱查收邮件, 然后确认是否继续安装
是否继续? (y/n) [y]: y
开始写入配置文件
请输入管理员用户名 [admin]: admin
请输入管理员密码: [5Lov@wife]: admin
请再次输入管理员密码: [5Lov@wife]: admin
Starting jumpsever service:manage.py not running
run_websocket.py not running
[SUCCESS]
安装成功,请访问web, 祝你使用愉快。
请访问 https://github.com/ibuler/jumpserver 查看文档
You have new mail in /var/spool/mail/root
[root@jumpserver install] #
17.5.1.1 出现启动失败的处理情况
[root@jumpserver install] # cd /opt/jumpserver/
You have new mail in /var/spool/mail/root
root@jumpserver jumpserver] # ./service.sh start
Starting jumpsever service: [ OK ]
[root@jumpserver jumpserver] #
17.6 jumpserver web界面配置
17.6.1 登录web界面(账号:admin,密码:admin)
17.6.2 用户管理操作
17.6.2.1 添加用户(一般添加的为普通用户)
17.6.2.2 添加用户常见的问题
- 创建用户邮件没有发送成功
- 查看你在后台和你linux界面的邮箱地址是否一样(vim /etc/jumpserver.conf)
- 查看邮箱服务是否正常,如果正常,重启看下
17.6.3 资产管理操作(资产管理主要是让什么用户来进行资产的管理)
17.6.3.1 添加资产
17.6.3.2 批量添加资产信息
17.6.4 授权管理
17.6.4.1 添加sudo别名(普通用户由于权限没什么,所以现在获得了权限)
17.6.4.2 系统用户的添加(定义资产用户的)
17.6.4.3 授权管理(就是告诉那个登录jumpserver,并且可以管理的资产,和登录资产用户所使用的普通用户是哪个)
17.6.5 登录普通用户
17.6.5.1 查看lyx普通用户可以管理的主机信息
17.6.5.2 查看普通用户管理的主机是否连接成功,系统用户是不是正常的
17.6.5.3 批量执行命令,目前这里只管理一台主机,现在在去添加一台主机(操作就是上面的用户推送的时候推送给哪台主机)
17.6.5.4 单个服务器进行操作
17.6.6 日志审核
17.6.6.1 在线
17.6.6.2 登录历史
17.6.6.3 命令记录
17.6.7 上传下载
17.6.7.1 上传(把东西上传到指定的服务器上面,以web01服务器为主)
17.6.7.2 下载(将服务器的信息下载到指定的本地上)
17.6.8 在liunx界面操作
17.6.8.1 登录成功的界面信息
17.6.8.2 分析jumpserver软件的一些功能
- 上述开机就会出现,是因为他调用了一个位置的脚本(/etc/profile.d)
- 不是广宏伟的用户
- 是广宏伟的用户
17.6.9 jumpserver常见的错误信息
17.6.9.1 权限问题
17.6.9.2 用户问题
17.6.9.3 查看日志
tail -f /opt/jumpserver/logs/jumpserver.log
注:里面包含了详细的日志,包含了账号和密码,一切完成后,请将 jumpserver.conf中的log改为 warning等
17.6.9.4 推送系统用户失败,Authentication failed,报错如下图
- 在系统用户列表,点击系统用户名称,查看系统用户详情,把鼠标放到失败按钮上或点击,会看到失败的原因,如下图
- 原因:管理用户不对或密码不对
- 解决:查检你的管理帐号设置的正确,管理帐号是后端服务器真实存在的,再重新推送。如下图
17.6.9.5 安装时或加用户发送邮件发送失败
- 原因:出现mail,smtp等错误通常都是由于发送邮件导致的
- 解决:请尝试不同提供商的邮件设置
- 原因:该邮箱并不存在
- 解决:使用真实邮箱
- 原因:ssl没有启用
- 解决:vim /opt/jumpserver/jumpserver.conf 中 email_use_tls = False 将False改为True
17.6.9.6 server启动失败
- 请进入/opt/jumpserver目录,手动运行./service.sh restart
- 注:如果启动失败端口是否被占用,默认端口是80,web访问要加上:8000,可以vim /opt/jumpserver.conf 80修改为8000
17.6.9.7 Permission denied /home/test/.python-eggs,PYTHON_EGG_CACHE
> 原因:没有权限创建
> 解决:vim /etc/profile
> export PYTHON_EGG_CACHE=/tmp/.python-eggs
> 保存后执行命令:
> source /etc/profile
17.6.9.8 mpz_powm_sec
> 原因:系统自带 gmp 库版本太低,需要升级到 gmp 5.x
> 解决:
> 1.gmp-6.1.0.tar.bz2 下载最新版并解压
> tar xjvf gmp-6.1.0.tar.bz2
> 2.编译安装
> cd gmp-6.1.0
> ./configure
> make
> make install
> 3.加入 ldconfig
> echo "/usr/local/lib" >> /etc/ld.so.conf.d/gmp.conf
> ldconfig
> 4.查看确认是否已经加入
> strings /etc/ld.so.cache|grep gmp
> 5.重新安装 pycrypto
> pip uninstall pycrypto
> pip install pycrypto
17.6.9.9 Crypto,getStrongprime,HAVE_DECL_MPZ_POWM_SEC等错误
> 很常见的错误,通常是由 pycrypto的版本问题,请卸载重新安装
> pip uninstall pycrypto
> rm -rf /usr/lib64/python2.6/site-packages/Crypto/
> rm -rf /usr/lib64/python2.6/site-packages/pycrypto-2.6.1-py2.6-linux-x86_64.egg(大部分不执行这条就能解决)
> pip install pycrypto==2.4.1
17.6.9.10 web登录,当前帐号是admin 账号,想WebTerminal,报没有授权系统用户如下图
> 原因:admin超级管理员也是需要在授权规则里添加
> 解决:授权规则里添加 admin,如下图
报错 django.db.utils.OperationalError: (1045, Access denied for user jumpserver 127.0.0.1 (using password: YES))
- 原因: 通常是配置信息不对
- 解决:先查检 mysql -u jumpserver -p -h 127.0.0.1 正常登录 ,再查检一下jumpserver.conf 配置文件中[db]部分信息是否正确
17.6.9.12 安装完成后,使用admin登陆,输入正确密码点击登陆还是停留在登陆页面,也不提示用户名密码失败。若估计输入错误的用户名密码就会提示密码错误
- 原因:IE浏览器不兼容,兼容问题
- 解决:换成Chrome、火狐、360要用极速模式
17.6.9.13 ./install.py 报错安装Jumpserver依赖的python的库失败
> 原因:可能被墙了
> 解决:pip install -r requirements.txt 多尝试几次
> 或者指定源安装
> `pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com`
17.6.9.14 web terminal 登陆失败
> 原因:系统默认只允许tty登录
> 解决:开启允许后台运行:vim /etc/sudoers 需注释掉 #Default requiretty
> 原因:资产不是网络设备而是主机,推送系统用户 使用了模拟推送,此时[]里面是空的
> 解决:选择使用密钥,然后在推送系统用户
> 原因:推送系统用户,选择使用密钥推送,此时[]里面有主机名,而终端登陆客户端没问题
> 解决:先清除浏览器的缓存,在尝试 web terminal登陆,如果不行在删除 /opt/jumpserver/keys/user目录下的key,在次尝试 web terminal登陆
> 原因:客户端sshd_config 中 AuthorizedKeysFile .ssh/abc/authorized_keys 路径修改过
> 解决:AuthorizedKeysFile .ssh/authorized_keys 修改回默认路径,service sshd restart 重启服务
> ![webterminal](https://github.com/jumpserver/static/blob/master/wiki/faq/69.png)
> 原因:python manage.py runserver 10.10.100.176 8888,这样启动JMS而tornado并没有启动
> 解决: ./service.sh restart 启动JMS
> ![webterminal](https://github.com/jumpserver/static/blob/master/wiki/faq/68.png)
> 原因:客户端sshd_config 中 AuthorizedKeysFile 指定了其它用户的公钥
> 解决:AuthorizedKeysFile .ssh/authorized_keys 修改回默认路径,service sshd restart 重启服务
> ![webterminal](https://github.com/jumpserver/static/blob/master/wiki/faq/67.png)
> 原因:添加系统用户设置密码时,用了特殊字符如@、中文等,从jumpserver.log 中可以看到role_pass是串编码
> 解决:设置密码不要用特殊字符如@、中文等
> 原因:资产的主机名称太长
> 解决:资产的主机名称小于54个字符,git pull 到最新代码,已限制53个字符
> 原因:资产的主机名称有中文
> 解决:修改资产的主机名称不要有中文
> 原因:登录JMS本机
> 解决:不要登录JMS本机(不能管理本机)
> 原因:客户端之前安装过0.3.0 版本或者JMS之前安装是0.3.0版本
> 解决:cd /etc/profile.d/ && rm -rf zzjumpserver.sh
> 原因:资产的主机名称包含"/"字符
> 解决:资产的主机名称不要有"/"字符,最好用"_"下划线
> 原因:连接登陆时间跨天的问题
> 解决:可以通过创建计划任务,定时修改日志权限
> vim date.sh 内容如下
> `mkdir /opt/jumpserver/logs/tty/$(date +%Y%m%d)`
> `chmod -R 777 /opt/jumpserver/logs/tty/$(date +%Y%m%d)`
> crontab -e 添加计划任务,每天0时1分创建或者修改目录
> `1 0 * * * /root/date.sh`
> crontab -l 查看计划任务
> 1 0 * * * /root/date.sh
17.6.9.15 ServerError: 端口可能不对 Connect SSH Socket Port Error, Please Correct it.
原因:后端服务器是否没有启动,关机状态。
17.6.9.16 报错如图
解决:pip install paramiko --upgrade
17.6.9.20 推送系统用户时,报错:visudo:command not found
> 原因:centos 系统版本 < 6.0会有这个问题
> 解决:ln -s /usr/sbin/visudo /usr/bin/visudo 加了个软连接 可以了
17.6.9.21 报错UnicodeEncodeError如图
> 原因:主机名不支持用中文
> 解决:主机名不要用中文
17.6.9.22 ssh密钥登录不上,如图
> 原因:172.19.16.230是客户端,不能直接登录客户端
> 解决:35054用户应该先登录JMS在跳转登录172.19.16.230客户端
> 原因:客户端iptablse或者SElinux 阻止了ssh登陆
> 解决:修改iptablse规则、SElinux关掉
> 原因:/权限不对,如图
> 解决:修改/权限为555
> 原因:进行二次开发集成了域,而JMS的/etc/passwd下并没有这个用户
17.6.9.23 jumpserver如何更新代码
cd /opt/jumpserver
git pull
17.6.9.24 推送系统用户失败:错误提示是/var/tmp/scl5N8iRw: line 8: -k: command not found
> 原因:客户端安装了软件(如devtoolset)会修改PATH 导致sudo命令的路径不是/usr/bin/sudo
which sudo查看sudo命令的路径是否为/usr/bin/sudo
> 解决:可以弄个软链接 或者 把路径改回去 或者 卸载软件
17.6.9.25 输入g没有显示组
> 原因:授权规则 方式中 没有选择资产组 授权
> 解决:授权规则 方式中 选择资产组 授权 输入g 才会显示
17.6.9.25 Error: ansible requires a json module, none found!
> 原因:client 端python版本过低,python < 2.6
> 解决:要不升级python要不就安装python-simplejson
17.6.9.26 推送系统用户报错cp:/etc/sudoers: NO such file or directory ..
> 原因:FreeBSD 默认在/usr/local/etc/sudoers
> 解决:ln -s /usr/local/etc/sudoers /etc/sudoers
17.6.9.27 推送系统用户报错如图 LANG=C:command not found
> 原因:FreeBSD 系统默认shell 为csh
> 解决:安装bash
> cd /usr/ports/shells/bash
> make install clean
> chsh -s /usr/local/bin/bash
> 退出:
> exit
> 在登录执行:
> echo $SHELL // 显示/usr/local/bin/bash说明更改成功
> 创建软链接:
> ln -s /usr/local/bin/bash /bin/bash
17.6.9.28 SSH Error: Permission denied (publickey)
> 原因:/etc/ssh/sshd_config 关闭ssh密码登录
> 解决:PasswordAuthentication yes #不能关闭ssh密码登录
17.6.9.29 推送系统用户报错:Aborting, target useres selinux but python bindings( libselinux-python)are n\'t installed!
> 原因:后端服务器开启了selinux
> 解决:yum install libselinux-python -y
17.6.9.30 认证失败 Authentication Error 如下图
> 原因:如果推送系统用户时有选:使用密钥,并且推送成功,keys/user目录下key问题
> 解决:cd /opt/jumpserver/keys/user 然后删除所有key或以登录失败用户名开头的所有key,再尝试登录
> 原因:客户端的sshd_config 中 UsePAM no
> 解决:改为 UsePAM yes
> 原因:客户端的.ssh/authorized_keys 文件被人删掉
> 解决:从其他的正常客户端重新考一份
17.6.9.31 推送系统用户报错:FAILED: key cannot be used for signing
> 原因:批量导入资产:其中管理账号(使用默认),而默认设置并没有设置
> 解决:设置-->默认设置
17.6.9.32 报错如下图
> 原因:后端服务器没有启动
> 解决:启动后端服务器
17.6.9.33 git clone 失败
> 原因:系统时间没对上
> 解决:设置一下系统时间
17.6.9.34 安装报错: gcc:error: /usr/lib/rpm/redhat/redhat-hardened-cc1: NO such file or directory
> 原因:依赖包没有装全
> 解决:yum -y install rpm-build
17.6.9.35 报错: failed to open a SFTP connection,如图
> 原因:客户端sshd_config 中SFTP默认路径信息不对
> cat /etc/ssh/sshd_conf
> Subsystem sftp /usr/libexec/sftp-server
> ll /usr/libexec/sftp-server 是否会列出该文件信息,可用于判断路径对不对
> 解决:一种/usr/libexec/sftp-server路是对的
> ln -s /usr/libexec/openssh/sftp-serve /usr/libexec/sftp-server 创建软连接
> vim /etc/ssh/sshd_conf
> Subsystem sftp /usr/libexec/openssh/sftp-serve
> 另一种/usr/libexec/sftp-server路是不对,正确路径是/usr/libexec/openssh/sftp-serve
> vim /etc/ssh/sshd_conf
> Subsystem sftp /usr/libexec/openssh/sftp-serve
> 注:修改后保存 service sshd restart
17.6.9.36 报错: failed to open a SFTP connection ((1, \'Administratively prohibited\'))
> 原因:客户端sshd_config中启用了
> MaxAuthTries 4
> MaxSessions 2
> 解决:用#号注释掉保存, service sshd restart
> jms 服务重启 ./service.sh restart
17.6.9.37 报错如图
> 原因:在python交互式下导入ssl报错,说明系统没有安装_ssl module
> 解决:yum install openssl openssl-devel
> 解决:Ubuntu: apt-get install libssl-dev
> 注:如果是编译安装的python,安装openssl后需重新编译下
17.6.9.38 ImportError: No module named cryptography.hazmat.backends
> 解决:pip install cryptography --force-reinstall
17.6.9.39 推送用户失败,如下图
> 原因:客户端默认关闭sftp
> 解决:开启sftp
17.6.9.40 报错如图
> 原因:客户端上给普通用户添加sudo权限作为管理帐号,添加sudo权限语法不对
> 解决:添加语法请看FAQ第34条
17.6.9.41 Error: Package: git-1.7.12.4-1.el5.rf.x86_64 (rpmforge)报错如图
> 解决:
> [root@test28 install]#rpm -qa|grep rpmforge
> rpmforge-release-0.5.2-2.el6.rf.x86_64
> [root@test28 install]# rpm --erase rpmforge-release-0.5.2-2.el6.rf.x86_64
> warning: /etc/yum.repos.d/rpmforge.repo saved as /etc/yum.repos.d/rpmforge.repo.rpmsave
> [root@test28 install]# yum install git
> Setting up Install Process
> Package git-1.7.1-4.el6_7.1.x86_64 already installed and latest version
17.6.9.42 添加用户选发送邮件,收到邮件中的URL少了端口
> 原因:JMS默认端口使用8000
> 解决:修改jumpserver.conf配置
> port = 8000 修改成80 或者修改url = http://[ip|域名]:8000
> ./service.sh restart 让修改配置生效
17.6.9.43 完成JMS安装,启动失败,即便手动./service.sh restart还是启动失败
> 原因:使用virtualenv环境,而service.sh中python环境会使用宿主机的
> 解决:修改service.sh中python,改成pyenv中python绝对路径就行了
17.6.9.44 报错如图
> 原因:没有jumpserver.conf配置文件(可能被你移动到别目录),或者[base]部分代码不对(被修改过)
> 解决:cp一份回来