CentOS7下搭建JumpServer
JumpServer 部署架构图

JumpServer 功能架构图
- JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。
- JumpServer 使用 Python 开发,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。
- JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制
为什么需要跳板机,堡垒机?
其实运维工作,出现各种问题是在所难免的,不仅要有很好的分析处理能力,而且还要避免问题再次发生。
要清楚认识到出现问题的真实原因:
- 没有规范管理,人与服务器之间的界限不清晰;
- 没有实名机制,登录服务器前没有实名验证;
- 没有密码托管,服务器的密码太多,很难做到定期修改,自己保管怕丢失;
- 没有操作预警,对高危、敏感的操作无法做到事前防御;
- 没有传输控制,对重要服务器无法控制文件传输;
- 没有回溯过程,不能完整还原运维过程;
跳板机概述
- 跳板机属于内控堡垒机范畴,是一种用于单点登录的主机应用系统。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。但跳板机并没有实现对运维人员操作行为的控制和审计,此外,跳板机存在严重的安全风险,一旦跳板机系统被攻入,则将后端资源风险完全暴露无遗。
- 跳板机优缺点
- 优势:集中式进行管理
- 缺点:没有实现对运维人员操作行为的控制与审计,使用跳板机的过程中还是会出现误操作,违规操作等导致的事故,一旦出现操作事故很难定位到原因和责任人。
堡垒机概述
- 堡垒机的理念起于跳板机,人们逐渐认识到跳板机的不足,需要更新,更好的安全技术理念来实现运维操作管理,需要一种能满足角色管理与授权审批,信息资源访问控制,操作记录和审计,系统变更和维护控制要求,并生成一些统计比报表配合管理规范来不断提升IT内控的合规性的产品。结合了跳板机的优点堡垒机应运而生,它有效地降低了运维操作风险,使得运维操作管理变得更简单,更安全。
- 堡垒机作用
- 核心系统运维和安全审计管控;
- 过滤和拦截非法访问,恶意攻击,阻断不合法命令,审计监控,报警,责任追踪;
- 报警,记录,分析,处理;
堡垒机核心功能
- 单点登录功能
支持对X11、Linux、Unix、数据库、网络设备、安全设备等一系列授权账号进行密码的自动化周期更改,简化密码管理,让使用者无需记忆众多系统密码,即可实现自动登录目标设备,便捷安全;
- 账号管理
设备支持统一账户管理策略,能够实现对所有服务器、网路设备、安全设备等账号进行集中管理,完成对账号整个生命周期的监控,并且可以对设备进行特殊角设置,如:审计巡检员、运维操作员、设备管理员等自定义,以满足审计需求;
- 身份认证
设备提供统一的认证接口,对用户进行认证,支持身份认证模式包括动态口令、静态密码、硬件key、生物特征等多种认证方式,设备具有灵活的定制接口,可以与其他第三方认证服务器直接结合;
安全的认证模式,有效提高了认证的安全性和可靠性;
- 资源授权
设备提供基于用户、目标设备、时间、协议类型IP、行为等要素实现细粒度的操作授权,最大限度保护用户资源的安全;
- 访问控制
设备支持对不同用户进行不同策略的制定,细粒度的访问控制能够最大限度的保护用户资源的安全,严防非法、越权访问事件的发生;
- 操作审计
设备能够对字符串、图形、文件传输、数据库等安全操作进行行为审计;通过设备录像方式监控运维人员对操作系统、安全设备、网络设备、数据库等进行的各种操作,对违规行为进行事中控制;对终端指令信息能够进行精确搜索,进行录像精确定位;
堡垒机应用场景
- 多个用户使用同一账号
多出现在同一工作组中,由于工作需要,同时系统管理员账号唯一,因此只能多用户共享同一账号;如果发生安全事故,不仅难以定位账号的实际使用者和责任人,而且无法对账号的使用范围进行有效控制,存在较大的安全风险和隐患;
- 一个用户使用多个账号
目前一个维护人员使用多个账号时较为普遍的情况,用户需要记忆多套口令同时在多套主机系统、网络设备之间切换,降低工作效率,增加工作复杂度;
- 缺少统一的权限管理平台,难以实现更细粒度的命令权限控制
维护人员的权限大多是粗放管理,无基于最小权限分配原则的用户权限管理,难以实现更细粒度的命令权限控制,系统安全性无法充分保证;
- 无法制定统一的访问审计策略,审计粒度粗。
各个网络设备、主机系统、数据库是分别单独审计记录访问行为,由于没有统一审计策略,而且各系统自身审计日志内容深浅不一,难以及时通过系统自身审计发现违规操作行为和追查取证;
- 传统的网路安全审计系统无法对维护人员经常使用的SSH、RDP等加密、图形操作协议进行内容审计。
准备环境
- [root@JumpServer ~]# cat /etc/redhat-release
- CentOS Linux release 7.9.2009 (Core)
- [root@JumpServer ~]# uname -r
- 3.10.0-1160.el7.x86_64
- [root@JumpServer ~]# setenforce 0
- [root@JumpServer ~]# systemctl stop friewalld
- [root@JumpServer ~]# hostname -I
- 172.16.70.181
- [root@JumpServer ~]# yum update -y
- [root@JumpServer ~]# yum install wget curl tar gettext iptables vim net-tools lrzsz tree -y
搭建Jumpserver
- [root@JumpServer ~]# cd /opt
- [root@JumpServer opt]# wget https://github.com/jumpserver/installer/releases/download/v2.28.6/jumpserver-installer-v2.28.6.tar.gz
- [root@JumpServer opt]# tar -xf jumpserver-installer-v2.28.6.tar.gz
- [root@JumpServer opt]# mv jumpserver-installer-v2.28.6 jumpserver
- [root@JumpServer opt]# ls jumpserver
- compose config-example.txt config_init jmsctl.sh LICENSE locale quick_start.sh README.md scripts static.env utils
- [root@JumpServer opt]# tree jumpserver
- jumpserver
- ├── compose
- │ ├── docker-compose-app.yml
- │ ├── docker-compose-db-tls.yml
- │ ├── docker-compose-es.yml
- │ ├── docker-compose-init-db.yml
- │ ├── docker-compose-init-tls.yml
- │ ├── docker-compose-init-xpack.yml
- │ ├── docker-compose-lb.yml
- │ ├── docker-compose-mariadb.yml
- │ ├── docker-compose-minio.yml
- │ ├── docker-compose-mysql.yml
- │ ├── docker-compose-network_ipv6.yml
- │ ├── docker-compose-network.yml
- │ ├── docker-compose-redis.yml
- │ ├── docker-compose-task.yml
- │ └── docker-compose-xpack.yml
- ├── config-example.txt
- ├── config_init
- │ ├── core
- │ │ └── config.yml
- │ ├── koko
- │ │ └── config.yml
- │ ├── mariadb
- │ │ └── mariadb.cnf
- │ ├── mysql
- │ │ └── my.cnf
- │ ├── nginx
- │ │ ├── cert
- │ │ │ ├── server.crt
- │ │ │ └── server.key
- │ │ └── lb_http_server.conf
- │ ├── README.md
- │ └── redis
- │ └── redis.conf
- ├── jmsctl.sh
- ├── LICENSE
- ├── locale
- │ ├── en
- │ │ └── LC_MESSAGES
- │ │ ├── jumpserver-installer.mo
- │ │ └── jumpserver-installer.po
- │ └── zh_CN
- │ └── LC_MESSAGES
- │ ├── jumpserver-installer.mo
- │ └── jumpserver-installer.po
- ├── quick_start.sh
- ├── README.md
- ├── scripts
- │ ├── 0_prepare.sh
- │ ├── 1_config_jumpserver.sh
- │ ├── 2_install_docker.sh
- │ ├── 3_load_images.sh
- │ ├── 4_install_jumpserver.sh
- │ ├── 5_db_backup.sh
- │ ├── 6_db_restore.sh
- │ ├── 7_upgrade.sh
- │ ├── 8_uninstall.sh
- │ ├── const.sh
- │ ├── docker.service
- │ └── utils.sh
- ├── static.env
- └── utils
- ├── build.sh
- └── messages.sh
- 16 directories, 48 files
- 根据需要修改配置文件模板, 如果不了解用途可以跳过修改此配置文件, 系统会自动填入。
- [root@JumpServer opt]# ls jumpserver/config-example.txt
- jumpserver/config-example.txt
执行安装
- [root@JumpServer opt]# bash jumpserver/jmsctl.sh install
- ██╗██╗ ██╗███╗ ███╗██████╗ ███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗
- ██║██║ ██║████╗ ████║██╔══██╗██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗
- ██║██║ ██║██╔████╔██║██████╔╝███████╗█████╗ ██████╔╝██║ ██║█████╗ ██████╔╝
- ██ ██║██║ ██║██║╚██╔╝██║██╔═══╝ ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝ ██╔══██╗
- ╚█████╔╝╚██████╔╝██║ ╚═╝ ██║██║ ███████║███████╗██║ ██║ ╚████╔╝ ███████╗██║ ██║
- ╚════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝
- Version: v2.28.6
- 1. Check Configuration File
- Path to Configuration file: /opt/jumpserver/config
- /opt/jumpserver/config/config.txt [ √ ]
- /opt/jumpserver/config/nginx/cert/server.crt [ √ ]
- /opt/jumpserver/config/nginx/cert/server.key [ √ ]
- complete
- >>> Install and Configure Docker
- 1. Install Docker
- Starting to download Docker engine ...
- Starting to download Docker Compose binary ...
- complete
- 2. Configure Docker
- Do you want to support IPv6? (y/n) (default n):
- complete
- 3. Start Docker
- Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.
- complete
- >>> Loading Docker Image
- [jumpserver/redis:6.2]
- ......
- [jumpserver/mariadb:10.6]
- ......
- [jumpserver/core:v2.28.6]
- ......
- [jumpserver/koko:v2.28.6]
- ......
- [jumpserver/lion:v2.28.6]
- ......
- [jumpserver/magnus:v2.28.6]
- ......
- [jumpserver/web:v2.28.6]
- ......
- complete
- >>> Install and Configure JumpServer
- 1. Configure Private Key
- SECRETE_KEY: NmUxMzRkNTYtNTk5MS1kM2I0LWJiZTUtZmIwMWE0YzNhYWM1
- BOOTSTRAP_TOKEN: NmUxMzRkNTYtNTk5MS1kM2I0
- complete
- 2. Configure Persistent Directory
- Do you need custom persistent store, will use the default directory /data/jumpserver? (y/n) (default n):
- complete
- 3. Configure MySQL
- Do you want to use external MySQL? (y/n) (default n):
- complete
- 4. Configure Redis
- Do you want to use external Redis? (y/n) (default n):
- complete
- 5. Configure External Port
- Do you need to customize the JumpServer external port? (y/n) (default n):
- complete
- 6. Init JumpServer Database
- ......
- complete
- >>> The Installation is Complete
- 1. You can use the following command to start, and then visit
- cd /opt/jumpserver
- ./jmsctl.sh start
- 2. Other management commands
- ./jmsctl.sh stop
- ./jmsctl.sh restart
- ./jmsctl.sh backup
- ./jmsctl.sh upgrade
- For more commands, you can enter ./jmsctl.sh --help to understand
- 3. Web access
- http://172.16.70.181:80
- Default username: admin Default password: admin
- 4. SSH/SFTP access
- ssh -p2222 admin@172.16.70.181
- sftp -P2222 admin@172.16.70.181
- 5. More information
- Official Website: https://www.jumpserver.org/
- Documentation: https://docs.jumpserver.org/
安装完成后,配置文件详情
- [root@JumpServer opt]# cat jumpserver/config/config.txt
- # JumpServer configuration file example.
- #
- # 如果不了解用途可以跳过修改此配置文件, 系统会自动填入
- # 完整参数文档 https://docs.jumpserver.org/zh/master/admin-guide/env/
- ################################## 镜像配置 ###################################
- #
- # 国内连接 docker.io 会超时或下载速度较慢, 开启此选项使用华为云镜像加速
- # 取代旧版本 DOCKER_IMAGE_PREFIX
- #
- # DOCKER_IMAGE_MIRROR=1
- ################################## 安装配置 ###################################
- #
- # JumpServer 数据库持久化目录, 默认情况下录像、任务日志都在此目录
- # 请根据实际情况修改, 升级时备份的数据库文件(.sql)和配置文件也会保存到该目录
- #
- VOLUME_DIR=/data/jumpserver
- # 加密密钥, 迁移请保证 SECRET_KEY 与旧环境一致, 请勿使用特殊字符串
- # (*) Warning: Keep this value secret.
- # (*) 勿向任何人泄露 SECRET_KEY
- #
- SECRET_KEY=NmUxMzRkNTYtNTk5MS1kM2I0LWJiZTUtZmIwMWE0YzNhYWM1
- # 组件向 core 注册使用的 token, 迁移请保持 BOOTSTRAP_TOKEN 与旧环境一致,
- # 请勿使用特殊字符串
- # (*) Warning: Keep this value secret.
- # (*) 勿向任何人泄露 BOOTSTRAP_TOKEN
- #
- BOOTSTRAP_TOKEN=NmUxMzRkNTYtNTk5MS1kM2I0
- # 日志等级 INFO, WARN, ERROR
- #
- LOG_LEVEL=ERROR
- # JumpServer 容器使用的网段, 请勿与现有的网络冲突, 根据实际情况自行修改
- #
- DOCKER_SUBNET=192.168.250.0/24
- # ipv6 nat, 正常情况下无需开启
- # 如果宿主不支持 ipv6 开启此选项将会导致无法获取真实的客户端 ip 地址
- #
- USE_IPV6=0
- DOCKER_SUBNET_IPV6=fc00:1010:1111:200::/64
- ################################# MySQL 配置 ##################################
- # 外置 MySQL 需要输入正确的 MySQL 信息, 内置 MySQL 系统会自动处理
- #
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=root
- DB_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW
- DB_NAME=jumpserver
- # 如果外置 MySQL 需要开启 TLS/SSL 连接, 参考 https://docs.jumpserver.org/zh/master/install/install_security/#ssl
- #
- # DB_USE_SSL=True
- ################################# Redis 配置 ##################################
- # 外置 Redis 需要请输入正确的 Redis 信息, 内置 Redis 系统会自动处理
- #
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW
- # 如果使用外置 Redis Sentinel, 请手动填写下面内容
- #
- # REDIS_SENTINEL_HOSTS=mymaster/192.168.100.1:26379,192.168.100.1:26380,192.168.100.1:26381
- # REDIS_SENTINEL_PASSWORD=your_sentinel_password
- # REDIS_PASSWORD=your_redis_password
- # REDIS_SENTINEL_SOCKET_TIMEOUT=5
- # 如果外置 Redis 需要开启 TLS/SSL 连接, 参考 https://docs.jumpserver.org/zh/master/install/install_security/#redis-ssl
- #
- # REDIS_USE_SSL=True
- ################################## 访问配置 ###################################
- # 对外提供服务端口, 如果与现有服务冲突请自行修改
- # 如果不想对外提供访问可以使用 127.0.0.1:<port>, eg: 127.0.0.1:33060
- #
- HTTP_PORT=80
- SSH_PORT=2222
- MAGNUS_PORTS=30000-30100
- ################################# HTTPS 配置 #################################
- # 参考 https://docs.jumpserver.org/zh/master/admin-guide/proxy/ 配置
- #
- # HTTPS_PORT=443
- # SERVER_NAME=your_domain_name
- # SSL_CERTIFICATE=your_cert
- # SSL_CERTIFICATE_KEY=your_cert_key
- #
- # Nginx 文件上传下载大小限制
- #
- CLIENT_MAX_BODY_SIZE=4096m
- ################################## 组件配置 ###################################
- # 组件注册使用, 默认情况下向 core 容器注册, 集群环境需要修改为集群 vip 地址
- #
- CORE_HOST=http://core:8080
- PERIOD_TASK_ENABLED=True
- # Core Session 定义,
- # SESSION_COOKIE_AGE 表示闲置多少秒后 session 过期,
- # SESSION_EXPIRE_AT_BROWSER_CLOSE=true 表示关闭浏览器即 session 过期
- #
- # SESSION_COOKIE_AGE=86400
- SESSION_EXPIRE_AT_BROWSER_CLOSE=True
- # Lion 开启字体平滑, 优化体验
- #
- JUMPSERVER_ENABLE_FONT_SMOOTHING=True
- ################################# XPack 配置 #################################
- # XPack 包, 开源版本设置无效
- #
- RDP_PORT=3389
- ################################## 其他配置 ##################################
- # 终端使用宿主 HOSTNAME 标识, 首次安装自动生成
- #
- SERVER_HOSTNAME=JumpServer
- # 当前运行的 JumpServer 版本号, 安装和升级完成后自动生成
- #
- CURRENT_VERSION=v2.28.6
- ==============================================================================
- # 配置文件前后对比如下
- [root@JumpServer opt]# diff jumpserver/config-example.txt jumpserver/config/config.txt
- 24c24
- < SECRET_KEY=
- ---
- > SECRET_KEY=NmUxMzRkNTYtNTk5MS1kM2I0LWJiZTUtZmIwMWE0YzNhYWM1
- 31c31
- < BOOTSTRAP_TOKEN=
- ---
- > BOOTSTRAP_TOKEN=NmUxMzRkNTYtNTk5MS1kM2I0
- 53c53
- < DB_PASSWORD=
- ---
- > DB_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW
- 65c65
- < REDIS_PASSWORD=
- ---
- > REDIS_PASSWORD=NmUxMzRkNTYtNTk5MS1kM2I0LW
- 124c124
- < SERVER_HOSTNAME=${HOSTNAME}
- ---
- > SERVER_HOSTNAME=JumpServer
- 128c128
- < CURRENT_VERSION=
- ---
- > CURRENT_VERSION=v2.28.6
jumpserver命令解析
- [root@JumpServer opt]# bash jumpserver/jmsctl.sh --help
- 或
- [root@JumpServer opt]# jmsctl --help
- JumpServer Deployment Management Script
- Usage:
- ./jmsctl.sh [COMMAND] [ARGS...]
- ./jmsctl.sh --help
- Installation Commands:
- install Install JumpServer
- upgrade [version] Upgrade JumpServer
- check_update Check for updates JumpServer
- reconfig Reconfiguration JumpServer
- Management Commands:
- start Start JumpServer
- stop Stop JumpServer
- close Close JumpServer
- restart Restart JumpServer
- status Check JumpServer
- down Offline JumpServer
- uninstall Uninstall JumpServer
- More Commands:
- load_image Loading docker image
- backup_db Backup database
- restore_db [file] Data recovery through database backup file
- raw Execute the original docker-compose command
- tail [service] View log
启动jumpserver
- [root@JumpServer opt]# jmsctl status
- NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
- jms_mysql jumpserver/mariadb:10.6 "docker-entrypoint.s…" mysql 13 minutes ago Up 13 minutes (healthy) 3306/tcp
- jms_redis jumpserver/redis:6.2 "docker-entrypoint.s…" redis 13 minutes ago Up 13 minutes (healthy) 6379/tcp
- [root@JumpServer opt]# jmsctl start
- [+] Running 8/8
- ⠿ Container jms_redis Healthy 0.6s
- ⠿ Container jms_mysql Healthy 0.6s
- ⠿ Container jms_core Healthy 11.9s
- ⠿ Container jms_magnus Started 14.1s
- ⠿ Container jms_celery Started 12.4s
- ⠿ Container jms_web Started 12.6s
- ⠿ Container jms_koko Started 12.4s
- ⠿ Container jms_lion Started 12.5s
- [root@JumpServer opt]# jmsctl status
- NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
- jms_celery jumpserver/core:v2.28.6 "./entrypoint.sh sta…" celery About a minute ago Up About a minute (healthy) 8070/tcp, 8080/tcp
- jms_core jumpserver/core:v2.28.6 "./entrypoint.sh sta…" core About a minute ago Up About a minute (healthy) 8070/tcp, 8080/tcp
- jms_koko jumpserver/koko:v2.28.6 "./entrypoint.sh" koko About a minute ago Up About a minute (healthy) 0.0.0.0:2222->2222/tcp, :::2222->2222/tcp, 5000/tcp
- jms_lion jumpserver/lion:v2.28.6 "./entrypoint.sh" lion About a minute ago Up About a minute (healthy) 4822/tcp, 8081/tcp
- jms_magnus jumpserver/magnus:v2.28.6 "./entrypoint.sh" magnus About a minute ago Up About a minute (healthy) 0.0.0.0:30000-30100->30000-30100/tcp, :::30000-30100->30000-30100/tcp
- jms_mysql jumpserver/mariadb:10.6 "docker-entrypoint.s…" mysql 15 minutes ago Up 15 minutes (healthy) 3306/tcp
- jms_redis jumpserver/redis:6.2 "docker-entrypoint.s…" redis 15 minutes ago Up 15 minutes (healthy) 6379/tcp
- jms_web jumpserver/web:v2.28.6 "/docker-entrypoint.…" web About a minute ago Up About a minute (healthy) 0.0.0.0:80->80/tcp, :::80->80/tcp
页面访问
- http://ip:80,默认账号密码:admin,admin;首次登录需修改密码。
CentOS7下搭建JumpServer的更多相关文章
- 在Centos7下搭建Socks5代理服务器
在Centos7下搭建Socks5代理服务器 http://blog.51cto.com/quliren/2052776 采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器 ...
- 第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误,
第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误, 注意:版本,不然会报错 Docker >=1.11Compose >1.6.0 通过d ...
- Hyperledger超级账本在Centos7下搭建运行环境
超级账本(hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,加入成员包括:荷兰银行(ABN AMRO).埃森哲(Accenture)等十几个不同利益体 ...
- centos7下搭建ceph luminous(12.2.1)--无网或网络较差
本博客的主要内容是在centos7下搭建luminous,配置dashboard,搭建客户端使用rbd,源码安装ceph,最后给出一些较为常用的命令.本博客针对初次接触ceph的人群. 搭建环境: 主 ...
- CentOS7下搭建zabbix监控(四)——Zabbix报警设置
CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置 CentOS7下搭建zabbix监控(三)——Zabbix ...
- CentOS7下搭建zabbix监控(三)——Zabbix监控服务配置
CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置 (1).配置Zabbix监控Apache服务 主机名:yo ...
- CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置
Zabbix监控端配置请查看:CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 (1).在CentOS7(被监控端)上部署Zabbix Agent 主机名:youxi2 IP地址: ...
- Linux系统:Centos7下搭建PostgreSQL关系型数据库
本文源码:GitHub·点这里 || GitEE·点这里 一.PostgreSQL简介 1.数据库简介 PostgreSQL是一个功能强大的开源数据库系统,具有可靠性.稳定性.数据一致性等特点,且可以 ...
- CentOS7下搭建邮件服务器(dovecot + postfix + SSL)
CentOS 花了基本上两天的时间去配置CentOS7下的邮件服务器.其中艰辛太多了,一定得总结下. 本文的目的在于通过一系列配置,在CentOS 7下搭建dovecot + postfix + ...
- Centos7下搭建LAMP平台环境 (转载)
1.启用Apache(httpd) Centos7默认已经安装httpd服务,只是没有启动.如果你需要全新安装,可以yum install -y httpd 启动服务:systemctl start ...
随机推荐
- Docker容器虚拟化
Docker容器虚拟化 目录 Docker容器虚拟化 虚拟化网络 单节点容器间通信 不同节点容器间通信 虚拟化网络 Network Namespace 是 Linux 内核提供的功能,是实现网络虚拟化 ...
- javaweb 导出文件名乱码的问题解决方案
fileName = new String(fileName.getBytes("ISO8859-1"), "UTF-8"); 或者 String finalF ...
- Sqoop 之 安装
Sqoop 之 安装 前言 安装 Sqoop 的前提是已经具备 Java 和 Hadoop 的环境. 一.下载并解压 1) 下载地址:http://mirrors.hust.edu.cn/apache ...
- HNOI2008GT考试
题目链接 考虑dp,f(i,j)表示做到了第i位(共n位),当前的后缀串与A1~Aj相匹配 接下来的方案数.转移的话枚举一个k=0~9表示这位选什么,如果选了以后,匹配的位置会改变到 j' ,j'可以 ...
- C语言之走迷宫深度和广度优先(利用堆栈和队列)
完成以下迷宫 利用二维数组储存每一个数组里的值,若是不能走则为1,若是可行就是0,走过了就设为2. 一般是再复制一个数组,用来记录. 堆栈的思想就是将一个点的上下左右都遍历一遍,若可行进栈,跳出遍历, ...
- C#-等待异步函数执行结果-将调用异步方法的函数变成非异步执行
先来简单了解一下async.await 使用async await 的前提条件:需要C# 5.0以上版本 .NET Framework 4.5以上 Visual Studio 2012以上. asyn ...
- (二)Three光线检测-实现摄像机向鼠标点击位置滑动动画
(二)Three.js光线检测 摘要:使用three.js中的光线检测 Raycaster() ,实现一下效果: 通过点击处的坐标,修改摄像机位置,实现摄像机由远及近的过渡动态效果(由远景到近景) 1 ...
- 谷歌浏览器xpath获取网页按钮路径
谷歌浏览器打开要获取的页面按下F12打开开发者工具 点击最左边的元素选择器,高亮后光标移动到对应元素框(这里只选择里层的元素,如这里要选到input级别) 点击后下方HTML会高亮显示,鼠标移动上去右 ...
- Oracle性能优化之内存管理
Oracle实例中的内存使用分为两类:程序全局区(program global area, PGA)和系统全局区(system global area, SGA).前者专门供每个会话使用,后者由所有O ...
- 【笔记】CF1607F Robot on the Board 2 及相关
题目传送门 记忆化搜索 首先,这题 \(10000\) 组 \(2000\times 2000\) 的数据直接爆搜肯定会超时.想到,如果一个点的答案已经被更新过,之后走到这个点能再多走的点也就确定了, ...