本文共 4342 字,大约阅读时间需要 14 分钟。
1、目标
从技术安全管理的角度规范服务器、数据、源代码的管理原则、流程和实现技术手段。
2、管理方法
2.1、系统架构的安全
2.1.1、可横向扩展的系统架构
可横向扩展高可用的系统架构是保证系统安全的必要手段,在服务器的各个层次设计两台以上的服务器提供服务(可扩展至N台),可抵御大范围的性能消耗性攻击。
2.1.2、设计思想
数据库层与应用程序服务器层以下简称前端与后端
1)总架构上前端与后端两层
2)前端分四层(负载均衡层、代理层、应用程序层、共享存储层)
3)后端分两层(数据库路由层、数据库层)
注:以上每一个层放置两台以上的服务器,可保证性能攻击带来的服务器拒接服务。
2.2、数据的备份安全
2.2.1、 横向架构的缺陷
横向的系统架构缺陷例子:
例如以上的数据库层,当主数据库执行以下指令:
1 | drop database db1; -- 删除数据库db1 |
从数据库也会按照指令执行。
以上可知,确保数据的安全,仅有好的系统架构还不行,好的系统架构可以防止性能消耗攻击,但无法防止人为操作失误导致的损失。
2.2.2、本地备份
1)设计专门的备份服务器(独立的系统安全性高)
2)编写自动化的备份程序(减少维护成本)
3)本地备份具有备份及时,性能优越的特点
2.2.3、异地备份
1)本地备份的缺陷
本地备份与业务系统放置在同一个地点,故而本地备份不抵御由于不可抗力(如地震、洪灾等)造成的数据损毁。
2)异地备份的实施
异地备份可通过开发自动化脚本来实现,可分为:
-- 数据备份模块
-- 数据传输模块
-- 数据应用模块
2.3、数据库安全管理规范
2.3.1、减少接触真实数据的人员
只有数据库管理员才能接到真实的数据,尽可能减少可接触数据的用户,从而减少泄密的途径。
2.3.2、数据库连接文件的安全管理
应用程序目录中用于连接数据库的连接文件需要设置权限,避免泄露。
-- root 读写
-- apache 只读
-- 其他用户无权限
2.3.3、建立测试区域数据库
1)测试区的数据库用于应用程序测试(程序员使用)
2)要求保密的数据表采用迷乱技术处理
3)技术实现基础
-- rand() 得到0~1之间的随机数
-- floor() 截取小数点前面部分的整数
-- ceil() 截取小数点后面部分的整数
-- 用户名和手机号码、邮箱使用迷乱技术
-- 用户IDCard信息使用迷乱技术
-- 用户银行卡信息使用迷乱技术
4)迷乱技术的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | select rand(); -- max 13899999999 -- min 13800000000 select (13800000000+rand()*99999999); -- 带小数的随机数 = 最小数+ (最大数-最小数)*rand() -- 带小数的随机数 = 13800000000+(13899999999-13800000000)*rand() select floor(13800000000+rand()*99999999); -- 整数随机数= floor(带小数的随机数) -- ----------------------------------------------------- -- 用户IDCard迷乱 -- max 441900198699999999 -- min 441900198600000000 select floor(441900198600000000+rand()*9999999); -- ------------------------------------------------------ -- 用户银行卡迷乱 -- max 6225887695599999 -- min 6225887695500000 select floor(6225887695500000+rand()*99999); -- ------------------------------------------------------ -- 用户邮箱迷乱 -- max 6225887695599999 -- min 6225887695500000 select concat(floor(13800000000+rand()*99999999), "@139.com" ); -- ------------------------------------------------------ -- 用户名的迷乱 select uuid_short(); 以上请改为 update 语句更新到测试库字段(例如): update tb_user set u_username = uuid_short(), u_password = 'e6b53065788c7947b43a6f10d889e0ee' , u_email = concat(floor(13800000000+rand()*99999999), "@139.com" ), u_phone = floor(13800000000+rand()*99999999); |
2.3.4、数据库授权
1)数据库授权的原则
引入最小权限原则
-- 缩小数据库操作用户的权限,只保留必要的权限
-- 部分用户根据需求进行调整
2)整库级别授权
方法一:
添加用户并授予最小权限:
1 | grant usage, select ,insert,update,delete,show view,create temporary tables,execute on 'db1' . '*' to 'user1' @10.168.0.% ' identified by ' userPwd'; |
方法二:
整库授权后删减用户权限:
1 2 | grant all privileges on 'db1' . '*' to 'user1' @10.168.0.% ' identified by ' userPwd'; revoke drop,create,references,index,alter,lock tables,create view,show view,create routine,alter routine,event,trigger on db1.* from user1@10.168.0.%; |
3)整表级别授权
1 | grant select , insert , update , delete on db1.tab1 to 'user1' @ '10.168.0.%' identified by 'userPwd' ; |
2.4、源代码安全管理规范
2.4.1、应用程序的版本控制
-- 引入版本控制服务器,对应用程序的各个版本进行记录和监控
-- 版本控制记录程序员更新的每一个版本,当发现源代码问题时可以随时回滚
-- 版本控制服务器使用双机热备的方式,防止单点故障造成版本控制失效
-- 版本控制服务器可以精细到目录级别的权限,防止程序员权限过大泄密。
2.4.2、技术方案
Subversion - 是一个自由,开源的版本控制系统。在Subversion管理下,文件和目录可以超越时空。它将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。
2.4.3、源代码分模块开发
-- 在人力许可的条件下,源代码应该分模块开发,以便控制整个平台代码涉密
-- 每个模块放置于一个独立的文件夹,由版本控制服务器控制代码的存取权限
2.4.4、源代码上线的审核
-- 源代码经过由项目经理安排测试和安全审核才能正式上线(减少bug)
-- 源代码由系统管理员负责上线,尽可能减少ftp接口被利用的机会(权限最小原则)
2.5、系统安全管理规范
2.5.1、原则
1)遵守系统服务最少原则,尽量减少被攻击的服务点
2)定期检查系统开启的服务、日志
3)服务安装配置自动化(大规模横向扩展)
4)服务器连接管理使用专用加密通道(安全性高,外部不能连接)
5)安装重要的安全补丁
2.5.2、实施
1)引入专用的系统监控主机对系统的服务日志进行监测(与服务器分离安全性高)
2)引入服务自动配置管理主机,实现线上的服务器大规模自动部署以及配置更新
3)引入VPN加密通道管理服务器
4)定期查看各大安全论坛提醒并做安全更新
2.5.3、技术方案
1)服务和日志监控方案
nagios - 是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。
2)服务自动化配置方案
puppet - 是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
3)VPN加密方案
OpenVPN - 直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。
2.6、密码的安全管理规范
2.6.1、密码复杂性要求
1)要求密码必须包含一个字母、数字和特殊字符
2)要求密码必须大于或等于8位
2.6.2、密码的定期更新
1)要求重要的密码每月更换
2)密码要求符合复杂性要求
2.6.3、密码的存放
1)存放的密码要使用加密技术存放
2)使用加密软件AxCrypt对密码存放文件进行加密
2.6.4、身份标识的使用
1)重大权限需验证用户的身份标识
2)并且配备相应的操作日志