一、准备一台Linux主机
1、开SSH
systemctl enable sshd
2、关闭SELINUX
vi /etc/sysconfig/selinux
修改下边红字部分
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
3、安装rz
yum -y install lrzsz
之后上传文件一定要用-be参数(其中-b是--binary用二进制的方式上传,-e是--escape强制escape所有控制字符),否则上传的文件不完整
rz –be
4、安装wget
yum -y install wget
5、更换yum源,用于提速yum
(1)备份yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
(2)下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清理缓存
yum clean all
重新生成缓存
yum makecache
6、用firewalld开80、8181、8080、3306、443、2222端口(80用于Nginx连接,8080用于Jumpserver连接,8081用于guacamole连接,5000用于Coco连接,3306用于MySQL连接、2222用于ssh连接)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd –reload
7、修改字符集,否则可能报 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
二、MySQL
1、安装:
(1)、配置YUM源
在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/
(2)下载mysql源安装包
cd /home
mkdir software
cd software
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
(3)安装mysql源
yum localinstall mysql57-community-release-el7-11.noarch.rpm
(4)检查mysql源是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
(5)安装MySQL
yum install mysql-community-server
如果之前安装CentOS时选择了安装MySQL,则先用yum remove mariadb*卸载掉才能继续安装
2、启动:
systemctl start mysqld
查看是否启动:
systemctl status mysqld出现Active: active (running)和PID代表启动成功
得到默认密码:
grep 'temporary password' /var/log/mysqld.log
用root登录进去:
mysql -uroot -p
注意:如果默认密码带有任何标点符号,需要在每个标点符号前加转义字符:\,否则会提示如下错误
修改默认密码:
mysql> set password for 'root'@'localhost' = password('********');
设置任何IP都可以远程访问MySQL,没有这行的话之后配置数据库会出错
mysql> grant all privileges on *.* to 'root'@'%' identified by '********';
退出MySQL
mysql> quit
3、设置开机启动:yum安装的MySQL默认就是服务,可以用systemctl list-unit-files查看,但开机没启动(disabled状态),所以要用systemctl enable mysqld激活开机启动,然后systemctl daemon-reload
MySQL默认配置文件路径: 配置文件:/etc/my.cnf 日志文件:/var/log//var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid
三、准备 Python3 和 Python 虚拟环境
1、安装依赖包
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
2、编译安装
cd /home/software
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
tar xvf Python-3.6.1.tar.xz && cd Python-3.6.1
./configure && make && make install
# 这里必须执行编译安装,否则在安装 Python 库依赖时会有麻烦...
3、建立 Python 虚拟环境
因为 CentOS 6/7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python 虚拟环境
cd /opt
python3 -m venv py3
source /opt/py3/bin/activate
# 看到下面的提示符代表成功
以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均在该虚拟环境中运行
四、安装 Jumpserver 1.3.3
1、下载或 Clone 项目
项目提交较多时 git clone较大,你可以选择去 Github 项目页面直接下载zip包。
git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master
echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env # 进入 jumpserver 目录时将自动载入 python 虚拟环境
# 首次进入 jumpserver 文件夹会有提示,按 y 即可
# Are you sure you want to allow this? (y/N) y
2、安装依赖 RPM 包
cd /opt/jumpserver/requirements
yum -y install $(cat rpm_requirements.txt) # 如果没有任何报错请继续
3、安装 Python 库依赖
(1)加速pip
cd ~
mkdir .pip
ls ~/.pip
vi ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
(2)安装
cd /opt/jumpserver/requirements
pip install -r requirements.txt # 不要指定-i参数,因为镜像上可能没有最新的包,如果没有任何报错请继续
上边这条命令执行时间会非常长,大概15-20分钟
如果有下载不过去的,等了很久的:修改requirements.txt,把那个包的行注释掉,然后手动在本机下载,再rz –be上传上去用pip install 包=版本 安装
4、安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke
yum -y install redis
systemctl start redis
systemctl enable redis
5、创建Jumpserver数据库并授权
mysql -uroot -p
mysql> create database jumpserver default charset 'utf8';
mysql> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '********';
mysql> flush privileges;
mysql> quit
6、修改 Jumpserver 配置文件
cd /opt/jumpserver
cp config_example.py config.py
vi config.py
# 我们计划修改 DevelopmentConfig 中的配置,因为默认 Jumpserver 使用该配置,它继承自 Config
注意: 配置文件是 Python 格式,不要用 TAB,而要用空格
"""
jumpserver.config
~~~~~~~~~~~~~~~~~
Jumpserver project setting file
:copyright: (c) 2014-2017 by Jumpserver Team
:license: GPL v2, see LICENSE for more details.
"""
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
class Config:
# Use it to encrypt or decrypt data
# Jumpserver 使用 SECRET_KEY 进行加密,请务必修改以下设置
# SECRET_KEY = os.environ.get('SECRET_KEY') or '2vky!997d64mnz06ngffdhgfdhrdrwe54356765fgdgd353s_qj$1%x'
SECRET_KEY = '请随意输入随机字符串(推荐字符大于等于 50位)'
# Django security setting, if your disable debug model, you should setting that
ALLOWED_HOSTS = ['*']
# DEBUG 模式 True为开启 False为关闭,默认开启,生产环境推荐关闭
# 注意:如果设置了DEBUG = False,访问8080端口页面会显示不正常,需要搭建 nginx 代理才可以正常访问
DEBUG = os.environ.get("DEBUG") or True
# 日志级别,默认为DEBUG,可调整为INFO, WARNING, ERROR, CRITICAL,默认INFO
LOG_LEVEL = os.environ.get("LOG_LEVEL") or 'DEBUG'
LOG_DIR = os.path.join(BASE_DIR, 'logs')
# 使用的数据库配置,支持sqlite3, mysql, postgres等,默认使用sqlite3
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# 默认使用SQLite3,如果使用其他数据库请注释下面两行
# DB_ENGINE = 'sqlite3'
# DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
# 如果需要使用mysql或postgres,请取消下面的注释并输入正确的信息,本例使用mysql做演示(mariadb也是mysql)
DB_ENGINE = os.environ.get("DB_ENGINE") or 'mysql'
DB_HOST = os.environ.get("DB_HOST") or '127.0.0.1'
DB_PORT = os.environ.get("DB_PORT") or 3306
DB_USER = os.environ.get("DB_USER") or 'jumpserver'
DB_PASSWORD = os.environ.get("DB_PASSWORD") or ' ********'
DB_NAME = os.environ.get("DB_NAME") or 'jumpserver'
# Django 监听的ip和端口,生产环境推荐把0.0.0.0修改成127.0.0.1,这里的意思是允许x.x.x.x访问,127.0.0.1表示仅允许自身访问
# ./manage.py runserver 127.0.0.1:8080
HTTP_BIND_HOST = '127.0.0.1'
HTTP_LISTEN_PORT = 8080
# Redis 相关设置
REDIS_HOST = os.environ.get("REDIS_HOST") or '127.0.0.1'
REDIS_PORT = os.environ.get("REDIS_PORT") or 6379
REDIS_PASSWORD = os.environ.get("REDIS_PASSWORD") or ''
REDIS_DB_CELERY = os.environ.get('REDIS_DB') or 3
REDIS_DB_CACHE = os.environ.get('REDIS_DB') or 4
def __init__(self):
pass
def __getattr__(self, item):
return None
class DevelopmentConfig(Config):
pass
class TestConfig(Config):
pass
class ProductionConfig(Config):
pass
# Default using Config settings, you can write if/else for different env
config = DevelopmentConfig()
7、生成数据库表结构和初始化数据
cd /opt/jumpserver/utils
bash make_migrations.sh
8、运行 Jumpserver
cd /opt/jumpserver
./jms start all # 后台运行使用 -d 参数./jms start all -d
# 新版本更新了运行脚本,使用方式./jms start|stop|status|restart all 后台运行请添加 -d 参数
运行不报错,请浏览器访问 http://192.168.1.15:8080/ 注意:这里只是 Jumpserver, 没有 Web Terminal,所以访问 Web Terminal 会报错。如果不能访问请检查主机8080端口号是否能访问,AWS 的 EC2 的80、8080端口受到限制,需要 ICP 备案才可以开放,遇到这种情况,可到 config.py 文件里修改 Jumpserver 端口为8888。
查看8080端口是否正常
netstat -lntup | grep 8080
Jumpserver默认账号: admin 密码: admin
附上重启的方法
ps axu | egrep '(gunicorn|celery|beat)'
ps axu | egrep '(gunicorn|celery|beat)' | awk '{ print $2 }' | xargs kill -9
五、安装 SSH Server 和 WebSocket Server: Coco
1、下载或 Clone 项目
另开一个终端,连接测试机,别忘了 source /opt/py3/bin/activate
cd /opt
source /opt/py3/bin/activate
git clone https://github.com/jumpserver/coco.git && cd coco && git checkout master
echo "source /opt/py3/bin/activate" > /opt/coco/.env # 进入 coco 目录时将自动载入 python 虚拟环境
# 首次进入 coco 文件夹会有提示,按 y 即可
# Are you sure you want to allow this? (y/N) y
2、安装依赖
cd /opt/coco/requirements
yum -y install $(cat rpm_requirements.txt)
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
requirements.txt文件内容:
asn1crypto==0.24.0
bcrypt==3.1.4
boto3==1.6.5
botocore==1.9.5
cachetools==2.0.1
certifi==2018.1.18
cffi==1.11.2
chardet==3.0.4
click==6.7
crcmod==1.7
cryptography==2.1.4
docutils==0.14
dotmap==1.2.20
elasticsearch==6.1.1
Flask==1.0.2
Flask-SocketIO==2.9.2
idna==2.6
itsdangerous==0.24
Jinja2==2.10
jmespath==0.9.3
jms-storage==0.0.18
jumpserver-python-sdk==0.0.44
MarkupSafe==1.0
oss2==2.4.0
paramiko==2.4.0
psutil==5.4.1
pyasn1==0.4.2
pycparser==2.18
PyNaCl==1.2.1
pyte==0.8.0
python-dateutil==2.6.1
python-engineio==2.1.0
python-gssapi==0.6.4
python-socketio==1.8.3
pytz==2018.3
requests==2.18.4
s3transfer==0.1.13
simplejson==3.13.2
six==1.11.0
tornado==4.5.2
urllib3==1.22
wcwidth==0.1.7
eventlet==0.22.1
Werkzeug==0.14.1
3、查看配置文件并运行
cd /opt/coco
cp conf_example.py conf.py # 如果 coco 与 jumpserver 分开部署,请手动修改 conf.py
./cocod start # 后台运行使用 -d 参数./cocod start -d
# 新版本更新了运行脚本,使用方式./cocod start|stop|status|restart 后台运行请添加 -d 参数
这时需要去 Jumpserver 管理后台-会话管理-终端管理(http://192.168.1.15:8080/terminal/terminal/)接受 Coco 的注册
Coco version 1.0.0, more see https://www.jumpserver.org
Starting ssh server at 0.0.0.0:2222
Quit the server with CONTROL-C.
4、测试连接:ssh端口2222
IP:192.168.1.15
账号:admin
密码:admin
如果能登陆代表部署成功
六、安装 Web Terminal 前端: Luna
Luna 已改为纯前端,需要 Nginx 来运行访问。新开终端,访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包,直接解压,不需要编译
cd /opt
source /opt/py3/bin/activate
wget https://github.com/jumpserver/luna/releases/download/1.3.3/luna.tar.gz
tar xvf luna.tar.gz
chown -R root:root luna
ls /opt/luna
七、安装 Windows 支持组件
因为手动安装 guacamole 组件比较复杂,这里提供打包好的 docker 使用, 启动 guacamole
1、Docker安装 (仅针对CentOS7,CentOS6安装Docker相对比较复杂)
# 安装所需的软件包 yum-utils、device-mapper-persistent-data和 lvm2
yum remove docker-latest-logrotate docker-logrotate docker-selinux dockdocker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
# 国内部分用户可能无法连接docker官网提供的源,这里提供阿里云的镜像节点供测试使用
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
rpm --import http://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum makecache fast
yum -y install docker-ce
启动docker和检查运行状态
systemctl start docker
systemctl status docker
将服务加入到启动项
systemctl enable docker
2、启动 Guacamole
修改下面 docker run 里的 JUMPSERVER_SERVER 参数,填上 Jumpserver 的 url 地址, 启动成功后去 Jumpserver 会话管理-终端管理(http://192.168.1.15:8080/terminal/terminal/)接受[Gua]开头的一个注册,如果页面显示不正常可以等部署完成后再处理
# 注意:这里一定要改写一下本机的IP地址, 否则会出错, 此过程时间大概需要1-2小时
docker run --name jms_guacamole -d \
-p 8081:8080 -v /opt/guacamole/key:/config/guacamole/key \
-e JUMPSERVER_KEY_DIR=/config/guacamole/key \
-e JUMPSERVER_SERVER=http://192.168.1.15 \
registry.jumpserver.org/public/guacamole:latest
Guacamole故障处理:
1)如果重启服务器后可能会出现连接Windows远程桌面白屏的情况,
这可能是docker镜像停了,需要再次启动
docker ps #查看目前运行的镜像
发现没有docker镜像
docker镜像启动的方法:
用docker ps -a查看所有镜像
找到对应的CONTAINER ID,用docker start
2)"终端管理"里发现"在线"是红色的
同时在web终端连接Windows时会提示下边的信息:
解决方法如下:
(1)停止 或 删掉 guacamole 的docker
docker stop jms_guacamole # 如果名称更改过或者不对,请使用docker ps 查询容器的 CONTAINER ID ,然后docker stop
(2)在 Jumpserver后台 会话管理 - 终端管理 删掉它们
(3)启动guacamole 的docker
docker start jms_guacamole
问题解决
八、Nginx
1、安装Nginx:
安装pcre
yum -y install pcre pcre-devel
注意如果CentOS7是基础环境安装的还要安装gcc-c++包
yum -y install gcc-c++
安装openssl,否则下边编译nginx时会报如下错误
yum -y install openssl openssl-devel
检查OpenSSL的版本,不能低于1.0.2,否则不支持https v2
openssl version
下载最新版nginx并解压
wget http://nginx.org/download/nginx-1.15.2.tar.gz
tar -zxvf nginx-1.15.2.tar.gz
cd nginx-1.15.2
加入需要安装的模块,编译,如果路径用的是nginx默认的,这里就不再写上了,否则要加路径参数
./configure \
--with-pcre \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_secure_link_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_sub_module
make
make install
查看nginx版本号,安装了哪些模块
/usr/local/nginx/sbin/nginx -V
2、启动
在系统服务目录里创建nginx.service文件
vi /lib/systemd/system/nginx.service
内容如下
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
解释:
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
启动nginx服务
systemctl start nginx
设置开机启动
systemctl enable nginx
2、配置Nginx:
②修改nginx默认用户
添加nginx用户,且不给登录权限
groupadd nginx
useradd nginx -g nginx -s /sbin/nologin -M
vi /usr/local/nginx/conf/nginx.conf
将
#user nobody;
修改为
user nginx nginx;
③关闭nginx版本号显示
vi /usr/local/nginx/conf/nginx.conf
在http标签中加入server_tokens off;如下:
http
{
……
server_tokens off;
……
}
④优化nginx性能
vi /usr/local/nginx/conf/nginx.conf
因为是4核处理器,所以将
worker_processes 1;
修改为
worker_processes 4;
再加一行,平均分配CPU每个核心
worker_cpu_affinity 0001 0010 0100 1000;
⑤将Jumpserver全部组件加入Nginx
server {
listen 80; # 代理端口,以后将通过此端口进行访问,不再通过8080端口
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/; # 如果coco安装在别的服务器,请填写它的ip
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 /guacamole/ {
proxy_pass http://localhost:8081/; # 如果guacamole安装在别的服务器,请填写它的ip
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;
client_max_body_size 100m; # Windows 文件上传大小限制
}
location / {
proxy_pass http://localhost:8080; # 如果jumpserver安装在别的服务器,请填写它的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
⑤防爬虫优化
vi /usr/local/nginx/conf/nginx.conf
在server标签中加:
server
{
……
## Block spider agents ##
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}
……
}
⑥TCP优化
vi /etc/sysctl.conf
加入下边几行语句:
# nginx服务器只需要开下边几个
net.ipv4.tcp_syncookies = 1
# 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
# 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
使上述内核配置生效
/sbin/sysctl -p
nginx -t # 确保配置没有问题, 有问题请先解决
systemctl restart nginx
然后浏览器打开页面看一下,OK了
九:关于开机自启动所有程序的说明
MySQL启动:
systemctl start mysqld
MySQL开机自启动:
systemctl enable mysqld
Redis启动:
systemctl start redis
Redis开机自启动:
systemctl enable redis
Python
Jumpserver启动:
source /opt/py3/bin/activate
cd /opt/jumpserver
./jms start all # 后台运行使用 -d 参数./jms start all -d
Coco启动:
source /opt/py3/bin/activate
cd /opt/coco
./cocod start # 后台运行使用 -d 参数./cocod start -d
docker启动:
systemctl start docker
docker开机自启动:
systemctl enable docker
jms_guacamole启动:
docker start jms_guacamole
Nginx启动:
systemctl start nginx
Nginx开机自启动:
systemctl enable nginx
开机自启动脚本jumpserverstart.sh
#!/bin/bash
sleep 5
source /opt/py3/bin/activate || true
cd /opt/jumpserver || true
./jms start all -d || true
sleep 30
cd /opt/coco || true
./cocod start -d || true
sleep 10
docker start jms_guacamole || true
exit
在/etc/rc.d/rc.local加一行,不要讲脚本放到jumpserver目录下,以免影响后期升级。注意CentOS7默认不执行/etc/rc.d/rc.local,需要chmod +x /etc/rc.d/rc.local命令修改权限才可以
bash /opt/jumpserverstart.sh
重启测试是否部署成功:
如果登录客户端是 Windows,Xshell Terminal 登录语法如下
ssh [email protected] 2222
sftp [email protected] 2222
# sftp默认上传的位置在资产的 /tmp 目录下
# windows拖拽上传的位置在资产的 Guacamole RDP上的 G 目录下
密码: admin
如果能登陆代表部署成功