H3C交换机配置SSH源地址登录限制和SNMP源地址限制的方法

需求1:对SSH远程管理进行限源,仅允许10.0.1.0/24,210.1.0.0/24段ip进行登录;
需求2:对SNMP管理进行限源,仅允许210.1.0.200-210.1.0.202这3个ip进行访问。

配置方法:
ssh登录后,输入:
sys
acl number 2000 match-order config
rule 1 permit source 10.0.1.0 0.0.0.255
rule 2 permit source 210.1.0.0 0.0.0.255
rule 3 deny source any
quit
acl number 2001 match-order config
rule 1 permit source 210.1.0.200 0
rule 2 permit source 210.1.0.201 0
rule 3 permit source 210.1.0.202 0
rule 4 deny source any
quit
ssh server acl 2000
snmp-agent community read public acl 2001
save

即可。

深信服防火墙AF管理员登录地址限制以及SNMP源地址限制的方法

深信服防火墙AF管理员登录地址限制的配置方法是在控制台页面,网络——接口/区域,区域,在WEBUI下勾选允许管理此设备的IP选择指定的IP即可。如图:

对SNMP源地址限制,其实在配置SNMPd的时候就要配置主机或者网段,只需要在这里配置即可。如图:

深信服上网行为管理AC的OID表

zabbix监控深信服上网行为管理AC时,会需要用到上网行为管理的OID,以下就是截止2020年9月,最新的OID表格:

CPU占用率,以百分比为单位1.3.6.1.4.1.33333.1.1.1.0
设备类型(如M5000)1.3.6.1.4.1.33333.1.1.2.0
剩余内存,free+buffers,以KB为单位1.3.6.1.4.1.33333.1.1.3.0 
设备运行时间(UPTIME),以1/100秒为单位。1.3.6.1.2.1.1.3.0
系统描述1.3.6.1.2.1.1.1.0
设备型号1.3.6.1.2.1.1.5.0 
接口数量1.3.6.1.2.1.2.1.0
接口描述信息(不同的x数值代表不同的接口,视设备回复而定)1.3.6.1.2.1.2.2.1.2.x 
接口接收总流量,以Byte为单位(不同的x数值代表不同的接口,视设备回复而定)1.3.6.1.2.1.2.2.1.10.x
接口发送总流量,以Byte为单位(不同的x数值代表不同的接口,视设备回复而定)1.3.6.1.2.1.2.2.1.16.x
接口接口状态(1-up,2-down)(不同的x数值代表不同的接口,视设备回复而定)1.3.6.1.2.1.2.2.1.8.x
接口速率,以10bps为单位(不同的x数值代表不同的接口,视设备回复而定)(查看接口是千兆还是百兆)1.3.6.1.2.1.2.2.1.5.x

关于深信服防火墙AF的OID可查看这篇文章:深信服防火墙AF的OID表https://www.eumz.com/2020-10/2064.html

深信服防火墙AF的OID表

zabbix监控深信服防火墙AF时,会需要用到防火墙的OID,以下就是截止2020年9月,最新的OID表格:

NameDescriptionOID
sysDescr系统描述.1.3.6.1.2.1.1.1
sysContact联系.1.3.6.1.2.1.1.4
sysName系统名.1.3.6.1.2.1.1.5
sysLocation位置.1.3.6.1.2.1.1.6
sysServices系统服务.1.3.6.1.2.1.1.7
sysConnNum连接数.1.3.6.1.2.1.1.10
sysCpuUsagcpu占用率.1.3.6.1.2.1.1.11
sysMemUsage内存占用率.1.3.6.1.2.1.1.12
sysDiskUsage磁盘占用率.1.3.6.1.2.1.1.13
sysNewConnTable新建连接表.1.3.6.1.2.1.1.14
hrSystemDate系统日期.1.3.6.1.2.1.25.1.2
hrSystemUptime运行的时间.1.3.6.1.2.1.25.1.1

系统信息

NameDescriptionOID
hrSystemUptime运行的时间.1.3.6.1.2.1.25.1.1
hrSystemDate系统日期.1.3.6.1.2.1.25.1.2
hrSystemNumUsers用户数.1.3.6.1.2.1.25.1.5
hrSystemProcesses进程数.1.3.6.1.2.1.25.1.6
hrSystemMaxProcesses最大进程数.1.3.6.1.2.1.25.1.7
hrMemorySize系统内存.1.3.6.1.2.1.25.2.2
hrStorageTable存储设备信息表(内存,磁盘的使用情况).1.3.6.1.2.1.25.2.3
hrDeviceTable系统设备列表.1.3.6.1.2.1.25.3.2
hrSWRunTable系统进程列表.1.3.6.1.2.1.25.4.2

CPU

NameDescriptionOID
ssCpuUser用户使用CPU情况.1.3.6.1.4.1.2021.11.9
ssCpuSystem系统使用CPU情况.1.3.6.1.4.1.2021.11.10
ssCpuIdle空闲CPU.1.3.6.1.4.1.2021.11.11
sysCpuUsagcpu占用率.1.3.6.1.2.1.1.11.0

内存

NameDescriptionOID
memTotalSwap总swap分区.1.3.6.1.4.1.2021.4.3
memAvailSwap可用swap分区.1.3.6.1.4.1.2021.4.4
memTotalReal内存总量(真实内存).1.3.6.1.4.1.2021.4.5
memAvailReal可用内存(真实内存).1.3.6.1.4.1.2021.4.6
memTotalFree可用内存(真实内存+虚拟内存).1.3.6.1.4.1.2021.4.11
memShared共享内存数量.1.3.6.1.4.1.2021.4.13
memBufferbuffer内存数量.1.3.6.1.4.1.2021.4.14
memCachedCache内存数量.1.3.6.1.4.1.2021.4.15
hrMemorySize内存总量.1.3.6.1.2.1.25.2.2
hrStorageTable存储设备信息表(内存,磁盘).1.3.6.1.2.1.25.2.3

硬盘

NameDescriptionOID
sysDiskUsage磁盘占用率.1.3.6.1.2.1.1.13
hrStorageTable存储设备信息表(内存,磁盘).1.3.6.1.2.1.25.2.3

网口

NameDescriptionOID
ifNumber接口总数.1.3.6.1.2.1.2.1
ifTable接口表(接口名,开启状态,MAC,出口流量,入口流量等).1.3.6.1.2.1.2.2
ifIndex索引.1.3.6.1.2.1.2.2.1.1
ifName网口.1.3.6.1.2.1.2.2.1.2
ifType接口类型.1.3.6.1.2.1.2.2.1.3
ifMtu接口MTU.1.3.6.1.2.1.2.2.1.4
ifPhysAddress接口mac地址.1.3.6.1.2.1.2.2.1.6
ifAdminStatus所希望的接口工作状态.1.3.6.1.2.1.2.2.1.7
ifOperStatus当前接口工作状态.1.3.6.1.2.1.2.2.1.8
ifInOctets接口收到的字节总数.1.3.6.1.2.1.2.2.1.10
ifOutOctets接口发送的字节总数.1.3.6.1.2.1.2.2.1.16

地址转换表

NameDescriptionOID
atTable地址转换表.1.3.6.1.2.1.3.1

IP

NameDescriptionOID
ipForwarding是否作为一个IP网关.1.3.6.1.2.1.4.1
ipDefaultTTLIP头中的Time To Live字段的值.1.3.6.1.2.1.4.2
ipInReceivesIP层从下层接收的数据报总数.1.3.6.1.2.1.4.3
ipInHdrErrors由于IP头出错而丢弃的数据报.1.3.6.1.2.1.4.4
ipInAddrErrors地址出错(无效地址、不支持的地址和非本地主机地址)的数据报.1.3.6.1.2.1.4.5
ipForwDatagrams已转发的数据报.1.3.6.1.2.1.4.6
ipInUnknownProtos不支持数据报的协议,因而被丢弃.1.3.6.1.2.1.4.7
ipInDiscards因缺乏缓冲资源而丢弃的数据报.1.3.6.1.2.1.4.8
ipInDelivers由IP层提交给上层的数据报.1.3.6.1.2.1.4.9
ipOutRequests由IP层交给下层需要发送的数据报,不包括ipForwDatagrams.1.3.6.1.2.1.4.10
ipOutDiscards在输出端因缺乏缓冲资源而丢弃的数据报.1.3.6.1.2.1.4.11
ipOutNoRoutes没有到达目标的路由而丢弃的数据报.1.3.6.1.2.1.4.12
ipReasmTimeout数据段等待重装配的最长时间(秒).1.3.6.1.2.1.4.13
ipReasmReqds需要重装配的数据段.1.3.6.1.2.1.4.14
ipReasmOKs成功重装配的数据段.1.3.6.1.2.1.4.15
ipReasmFails不能重装配的数据段.1.3.6.1.2.1.4.16
ipFragOKs分段成功的数据段.1.3.6.1.2.1.4.17
ipFragFails不能分段的数据段.1.3.6.1.2.1.4.18
ipFragCreates产生的数据报分段数.1.3.6.1.2.1.4.19
ipAddrTableIP地址表.1.3.6.1.2.1.4.20
ipRouteTableIP路由表.1.3.6.1.2.1.4.21
ipNetToMediaTableIP与物理地址转换表.1.3.6.1.2.1.4.22
ipRoutingDiscards无效的路由项,包括为释放缓冲空间而丢弃路由项.1.3.6.1.2.1.4.23

TCP

NameDescriptionOID
tcpRtoAlgorithm重传时间算法.1.3.6.1.2.1.6.1
tcpRtoMin 重传时间最小值.1.3.6.1.2.1.6.2
tcpRtoMax重传时间最大值.1.3.6.1.2.1.6.3
tcpMaxConn可建立的最大连接数.1.3.6.1.2.1.6.4
tcpActiveOpens主动打开的连接数.1.3.6.1.2.1.6.5
tcpPassiveOpens被动打开的连接数.1.3.6.1.2.1.6.6
tcpAttemptFails连接建立失败数.1.3.6.1.2.1.6.7
tcpEstabResets连接复位数.1.3.6.1.2.1.6.8
tcpCurrEstab状态为established或closeWait的连接数.1.3.6.1.2.1.6.9
tcpInSegs接收的TCP段总数.1.3.6.1.2.1.6.10
tcpOutSegs发送的TCP段总数.1.3.6.1.2.1.6.11
tcpRetransSegs重传的TCP段总数.1.3.6.1.2.1.6.12
tcpConnTable连接表.1.3.6.1.2.1.6.13
tcpInErrors接收的出错TCP段数.1.3.6.1.2.1.6.14
tcpOutRests发出的含RST标志的段数.1.3.6.1.2.1.6.15

UDP

udpInDatagrams接收的数据报总数.1.3.6.1.2.1.7.1
udpNoPorts没有发现端口而无法提交的数据报.1.3.6.1.2.1.7.2
udpInErrors出错的数据报.1.3.6.1.2.1.7.3
udpOutDatagrams上层协议要求输出的数据报.1.3.6.1.2.1.7.4
udpTableUDP表.1.3.6.1.2.1.7.5

SNMP

snmpInPktsSNMP模块接收到的分组数.1.3.6.1.2.1.11.1
snmpInTotalReqVars被成功读取的Object数,包括get-request和get-next操作.1.3.6.1.2.1.11.13
snmpInGetRequestsSNMP模块接收到并处理的get-request的分组数.1.3.6.1.2.1.11.15
snmpInGetNextsSNMP模块接收到并处理的get-next的分组数.1.3.6.1.2.1.11.16
snmpOutGetResponsesSNMP模块发出的get-responses的分组数.1.3.6.1.2.1.11.28
snmpEnableAuthenTraps标记是否允许代理程序产生检验失败警告.1.3.6.1.2.1.11.30

关于深信服上网行为管理AC的OID可查看这篇文章:深信服上网行为管理AC的OID表https://www.eumz.com/2020-10/2064.html

HW总结报告模板之一

今天终于结束了为期XX天的HW行动,中间的心酸曲折与案例回顾本来想写点,但总结回顾相关文章挺多了,不喜欢重复。从前天开始就有小伙伴已经开始接总结报告了,向我寻求一份模板,毕竟有保密协议,脱敏的道路还是有些累的,所以此文章主要是模板,内容未必真实,帮大家解决最后一公里路程,希望有点帮助——从HW的痛苦中结束,投入到70周年重保的痛苦中去~~~

由于每家企业防护手段不一、组织架构不一,并且以下案例未必真实,所以完全照抄的可能性不大,所以仅供参考~~~:

 201X年X月X日-201X年X月X日,XX发起了针对关键信息基础设施进行攻防演练的HW工作。XXXX平台作为防守方,成功防御了XX的攻击,没有被攻破,同时发现并处理了XXXX,经XX确认,得分X分。

平台按照XX和XX的统一部署,重预警、早排查,演练期间,加强安全专项巡检,做好相关汇报工作,对发现的安全问题及时整改,按照组织要求认真做好各阶段工作,顺利完成了防守任务,提升了XX平台的网络应急安全应急处置与协调能力,提升了XX平台安全防护水平。

具体情况如下:

一、前期准备

1、成立XX平台HW201X工作专项小组,并由公司负责人牵头,各部门协力配合,做到了分工明确,责任具体到人;同时完善相关安全制度优化完成《XXXX平台应急处置方案》和《XX平台防守组工作方案》,保障HW工作正常有序开展。

2、开展运维自检自查工作以及第三方协查工作。通过资产梳理工作,对XX平台网络策略优化xx项,修复高危安全漏洞xx余项,其中自主发现高危安全漏洞xx项,XX协助发现高危漏洞x个,包含在自主发现漏洞中,已做到对高危漏洞清零,检测发现并修复平台弱口令xx项。

3、组织防护工作演练,编写《xxxx平台工作部署》方案,对HW期间工作进行紧密部署,加强完善平台安全巡检,增强团队协作能力。

4、组织协调第三方能力,在此期间对物理机房、云服务商监测加强监控、检测要求,XX协助提供x云安全监测服务,并配置入侵检测系统,同时安全部对公司内部进行安全意识宣贯,降低被钓鱼攻击风险。

二、组织实施

(一)加强组织协调

在公司内部设置专项防守场地,安排XX平台各部门负责人、核心部门驻场值守。安排专人进行对接,随时与防守团队保持联络,通过电话会议每日协商,汇总当日所发生的安全事件,针对安全事件进行应急响应和处置。

(二)安排重点值守

各部门各司其职,加强防守整改。其中XX部整体把握XX防守情况,负责与总体防守组的沟通联系,负责信息对接,保持随时联络,提交防守成果。XX部负责对网络安全策略进行梳理,删除无效策略;XX部负责对主机系统安全基线进行检查落地,修复主机漏洞,对中间件平台进行升级;XX梳理数据库相应安全权限,对权限进行严格控制;XX部负责对代码层安全漏洞进行修复,并对后台管理进行安全防护;XX部负责撰写整体《安全应急相应方案》以及《HW工作安排部署方案》,加强安全监测预警、安全防护和应急处置能力。

(二)开展防守工作

  攻防实施阶段

1、严格落实值班制度。平台加强了每日巡检力度,从巡检次数从每日二次调整为每日三次,同时安排专人负责安全巡检,对巡检项进行详细记录,并于每日下午X点前上报;并安排专人在部机关值守,确保信息沟通顺畅。

2、认真落实报告制度。安排专人到XX负责联络工作X周,并每日于X点、X点进行工作汇报总结,对攻击手段、封禁IP地址,账号爆破情况进行梳理归纳,发现攻击问题第一时间上报总体防守组。编制X份防守成果报告,经演戏指挥部确认,得分XX分。

3、全面做好检测预警工作。平台对WAF、IDS、以及邮箱、VPN等账户,系统状态、网络状态等进行全方位监控,共发现账户破解、扫描、命令执行、SQL注入等攻击数百次,对异常IP进行及时封禁,共计封禁IPXX余个,未发现攻击成功现象。

4、 加强监控应急处理能力。在平台发现被爆破的账号后,并在第一时间对问题账户进行删除操作;发现并删除恶意木马文件XX个,并阻止该恶意程序运行,上报防守成果,同时优化平台相关服务,关闭木马上传路径。

5、攻防实施阶段XX平台共检测到恶意扫描攻击XX次,平台封禁恶意IP地址XX余个,公司邮箱账户被尝试爆破XX余个,均未成功,XX平台业务账户被尝试暴力破解XX个,成功X个,VPN账号被尝试暴力破解X个,未成功,发现XXXXXXXX公司官网网站有异常IP入侵,发现XX平台、XX平台有异常IP入侵,采取封禁IP措施,对XX平台网站应用系统弱口令问题进行整改。

三、威胁汇总及整改情况

演习结束后,根据XX与XX相关要求,对攻防演习工作中发现的问题成果进行梳理,共有X项其中XX平台安全隐患X项,非XX平台安全隐患共X项,通知相关部门进行整改,已经完全整改完毕。

(一)XX平台威胁整改情况

本次参演的XX平台共被发现X处安全隐患,存在XX问题,目前已全部修复。

(二)非目标系,统威胁整改情况

本次演习攻击方对演习目标所属公司系统进行了攻击渗透,共发现威胁X个。截止目前,已完成所有问题整改、漏洞修复。

四、存在问题

(一)XX平台系统此次攻防演习过程中,存在问题如下:

    1、基础运维存在薄弱环节….

    2、系统存在弱口令问题…..

(二)公司存在的问题

公司的其他信息系统不在本次攻防演习范围内,故本次演习前准备阶段未对XXX平台、XXX平台进行风险隐患排查和整改加固。

经分析,攻击方主要是通过三种途径开展渗透攻击:一是利用系统已知漏洞,获得系统服务器权限,对内网开展渗透共计;二是利用用户弱口令漏洞,获取网络及信息系统关键信息;三是通过SQL注入、文件上传漏洞等攻击方式,对目标系统开展攻击,获取系统权。根据上述攻击方式,反映出公司存在的问题有:

    xxxxxxx……

下一步工作

针对XX平台存在的问题,我司将进一步提高认识,加强人员往来安全意识教育,组织信息安全培训,不断提高全员安全意识。针对上述存在的安全问题整改完成后,举一反三,查找存在类似安全隐患并整改,不断完善网络及信息系统的网络架构规划及制度管理。主要措施如下:

(一)基础运维方面

1、加强设备管理,梳理资产信息,严格核对CMDB中信息,将密码变更列入季度安全运维工作,对不在用的策略、服务器进行清理线下,将继续使用的设备进行资产审核,确认资产信息准确性。

2、严格杜绝系统弱口令,加强口令强度设置;需要用户注册功能的,要对注册用户加以限制,要对上传文件格式限制;加强信息系统及用户账号的管理,定期查看使用情况,确认不用的系统、用户账号及时进行关停处理。

3、需要对防火墙策略申请、端口映射申请进行周期性梳理,删除无效、无用策略,防止内部服务被误开放到互联网平台。

4、严格控制运维、研发、测试等技术型人员在服务器上明文存储备份账号密码,随意开放查看权限,对离职员工账号密码进行严格审查,删除,关闭。

(二)安全防护方面

1、加强公司网络边界防护,更新升级防火墙、防毒墙等安全设备,做好外部入侵防护控制。

2、加强网络安全设备如VPN、堡垒机等权限管理,对人员进行基于角色划分管理权限。

3、对各平台网络严格按照等级保护要求进行区域区分,加强信息系统安全防护和管理。

4、对数据安全加强防护,防止未授权访问敏感数据,防止技术和业务人员对数据误操作或恶意操作导致数据泄露。

(三)安全监测方面

1、充分利用安全设备及监控平台进行监控。分析安全设备的日志,对应用系统的运行状态、资源占用率等情况进行查看,及时发现和应对攻击行为,根据记录的入侵源IP、攻击类型、攻击访问等特征进行关联分析。

2、增加安全预警手段。推进公司预警监测和态势感知能力,加强主机端安全监控能力,将安全设备及系统逐步进行整合。

(四)应急处置方面

1、建立健全安全预防和预警机制。加强信息网络系统和设备的安全防护工作,加强信息网络日常运行状况的检测分析,对外部和内部可能对信息网络产生重大影响的事件进行预警,保障信息网络安全畅通。

2、加强应急处置和演练。发生突发性事件时,启动应急预案,根据事件级别,根据《XXXXXXXXXX平台应急相应预案》采取相应处置措施,确保网络通畅,业务连续性以及信息安全。有计划、有重点的组织技术人员针对不同情况对预案进行演练,对预案中存在的问题和不足及时补充、完善。

下一步,我司将进一步推进网络安全和信息化工作,进一步用好攻防演练成果,在XX的指导下,提升态势感知和应急处置能力,提高关键信息基础设施防护水平,不断完善网络安全工作体制机制,构建与信息化工作相适应的网络安全保障体系,有力维护XX平台业务及数据安全。

HW总结报告模板之二

1. HW背景
能源:“xxx是国家的支柱能源和经济命脉,其安全稳定运行不仅关系到国家的经济发展,而且维系国家安全。随着xxx规模的逐渐扩大,安全事故的影响范围越来越大,安全问题越来越突出,xxx网络安全运行已经成为全球的研究热点。”

银行:”随着我国信息化发展的日新月异,信息系统的风险评估也被国家决策层纳为重要项目。银行信息安全是至关重要的问题,因为在任何一个环节出现问题,就会影响到整个系统的发展,造成全局性的失误。所以其中的信息安全成为重中之重。银行给客户提供服务的同时,必须要为客户提供可靠的环境以及信息的准确性和安全性。”

(以上选一即可)201X年X月X日-201X年X月X日,XX发起了针对关键信息基础设施进行攻防演练的HW工作。XXXX平台作为防守方,成功防御了XX的攻击,没有被攻破,同时发现并处理了XXXX。
XXXX在演练期间,加强安全专项巡检,做好相关汇报工作,对发现的安全问题及时整改,按照组织要求认真做好各阶段工作,顺利完成了防守任务,提升了XXXX的网络应急安全应急处置与协调能力,提升了XXXX网安全防护水平。

2、人员安排
现场专家:
研判分析人员:
监控人员:

3、驻场时间
如:2019年X月X日到2019年X月X日。

4、前期准备
1、成立XX平台HW201X工作专项小组,并由公司负责人牵头,各部门协力配合,做到了分工明确,责任具体到人;同时完善相关安全制度优化完成《XXXX平台应急处置方案》和《XX平台防守组工作方案》,保障HW工作正常有序开展。

2、开展运维自检自查工作以及第三方协查工作。通过资产梳理工作,对XX平台网络策略优化xx项,修复高危安全漏洞xx余项,其中自主发现高危安全漏洞xx项,XX协助发现高危漏洞x个,包含在自主发现漏洞中,已做到对高危漏洞清零,检测发现并修复平台弱口令xx项。

3、组织防护工作演练,编写《xxXX平台工作部署》方案,对HW期间工作进行紧密部署,加强完善平台安全巡检,增强团队协作能力。

4、组织协调第三方能力,在此期间对物理机房、云服务商监测加强监控、检测要求,XX协助提供x云安全监测服务,并配置入侵检测系统,同时安全部对公司内部进行安全意识宣贯,降低被钓鱼攻击风险。

5. 组织实施

(一)加强组织协调

在公司内部设置专项防守场地,安排XX平台各部门负责人、核心部门驻场值守。安排专人进行对接,随时与防守团队保持联络,通过电话会议每日协商,汇总当日所发生的安全事件,针对安全事件进行应急响应和处置。

(二)安排重点值守

各部门各司其职,加强防守整改。其中XX部整体把握XX防守情况,负责与总体防守组的沟通联系,负责信息对接,保持随时联络,提交防守成果。XX部负责对网络安全策略进行梳理,删除无效策略;XX部负责对主机系统安全基线进行检查落地,修复主机漏洞,对中间件平台进行升级;XX梳理数据库相应安全权限,对权限进行严格控制;XX部负责对代码层安全漏洞进行修复,并对后台管理进行安全防护;XX部负责撰写整体《安全应急相应方案》以及《HW工作安排部署方案》,加强安全监测预警、安全防护和应急处置能力。

(三)开展防守工作

攻防实施阶段

1、严格落实值班制度。平台加强了每日巡检力度,从巡检次数从每日二次调整为每日三次,同时安排专人负责安全巡检,对巡检项进行详细记录,并于每日下午X点前上报;并安排专人在部机关值守,确保信息沟通顺畅。

2、认真落实报告制度。安排专人到XX负责联络工作X周,并每日于X点、X点进行工作汇报总结,对攻击手段、封禁IP地址,账号爆破情况进行梳理归纳,发现攻击问题第一时间上报总体防守组。编制X份防守成果报告,经演戏指挥部确认,得分XX分。

3、全面做好检测预警工作。平台对WAF、IDS、以及邮箱、VPN等账户,系统状态、网络状态等进行全方位监控,共发现账户破解、扫描、命令执行、SQL注入等攻击数百次,对异常IP进行及时封禁,共计封禁IPXX余个,未发现攻击成功现象。

4、 加强监控应急处理能力。在平台发现被爆破的账号后,并在第一时间对问题账户进行删除操作;发现并删除恶意木马文件XX个,并阻止该恶意程序运行,上报防守成果,同时优化平台相关服务,关闭木马上传路径。

5、攻防实施阶段XX平台共检测到恶意扫描攻击XX次,平台封禁恶意IP地址XX余个,公司邮箱账户被尝试爆破XX余个,均未成功,XX平台业务账户被尝试暴力破解XX个,成功X个,VPN账号被尝试暴力破解X个,未成功,发现XXXXXXXX公司官网网站有异常IP入侵,发现XX平台、XX平台有异常IP入侵,采取封禁IP措施,对XX平台网站应用系统弱口令问题进行整改。

6、威胁汇总及整改情况

演习结束后,根据XX与XX相关要求,对攻防演习工作中发现的问题成果进行梳理,共有X项其中XX平台安全隐患X项,非XX平台安全隐患共X项,通知相关部门进行整改,已经完全整改完毕。

(一)XX平台威胁整改情况

本次参演的XX平台共被发现X处安全隐患,存在XX问题,目前已全部修复。

(二)非目标系,统威胁整改情况

本次演习攻击方对演习目标所属公司系统进行了攻击渗透,共发现威胁X个。截止目前,已完成所有问题整改、漏洞修复。

7、企业暴露弱点

经分析,攻击方主要是通过三种途径开展渗透攻击:一是利用系统已知漏洞;二是利用用户弱口令漏洞;三是通过SQL注入、文件上传漏洞等攻击方式,对目标系统开展攻击;四是利用逆向调试;五是通过新爆0day漏洞。

其中在对HW期间的防守工作中,发现企业暴露弱点如下:

1 人员安全意识较低,内网账号弱口令较多,应用平台以及系统账号存在弱口令。

2 外包管理资产不明确,发现告警行为无法第一时间对应到资产,造成几次判断失误。

3 内部网络交互不明确,内网服务器与内网服务器的交互,内网终端与域控验证服务器的交互等,内部网络交互不明确造成几次研判失误。

4 缺少内部资产统一管理平台、以及缺少安全技术人员定期对内部资产进行跟踪整理。

5 缺少安全技术人员定期对内部资产进行渗透测试,缺少安全技术人员定期对业务服务器进行基线检查。

6 日常工作中缺少安全技术人员对最新安全事件的跟踪,而不应该只在护网期间紧急更新补丁。

8、安全防护建议

1  安全意识培训

通过信息安全培训提高xxx企业员工的信息安全意识水平,将全员信息安全意识的点滴提升作用到具体的工作中,可以成倍地放大信息安全工作的效果。xxx企业信息安全培训必要性主要表现在:

1.1、xxx企业涉及信息的敏感性极高,主要包括:与客户相关的信息,客户基本信息、客户账户信息以及客户交易信息等,这几类信息都涉及客户的个人利益。

1.2、xxx企业信息安全意识仍然普遍较为薄弱;

企业自身痛点以及培训内容范围:

1. 1、企业人员对网络安全意识不足,内网账号弱口令较多。

1. 2、业务线人员对安全意识不足,应用平台以及系统账号存在弱口令。

1.3、不仅要在护网前对账号密码统一整改,在平时工作要创建密码定期更改的管理制度。

1.4、定期对企业内部人员以及研发技术人员的安全培训,包括安全意识培训,办公网终端管控、密码管理制度、安全编码规范培训,体系制度培训等。

 2   外包安全管理

2.1、综合考虑信息科技战略、外包市场环境、自身风险控制能力、制定合适的外包管理制度

2.2、建立企业长期有效的资产管理平台,由各业务线负责人对资产进行定期更改(其中包括业务线、ip、域名、端口、web服务器以及数据库服务器等相关的资产信息),安全人员统一管理平台,发现安全事件,通过资产管理平台第一时间定位到相关负责人。

2.3、事前预防:外包项目风险评估,安全人员定期对资产管理平台同业务线相关负责人进行审核,审核是否有资产不对应或更新不及时。

2.4、考核外包商基本情况和战略,是否具有持久发展潜力。检测外包商的硬件情况、整体组织结构、关联公司、市场占有率、以及产品安全性、研发以及运维技术团队实力、重点关注外包商的安全团队实力以及安全管理制度等。

3  安全测试

3.1、安全技术人员季度性对内部资产进行渗透测试检测,发现问题并上报问题。

3.2、针对第三方外包业务,企业安全负责人应安排技术人员进行抽查式测试,发现问题并及时上班。

3.3、针对第三方外包业务,新上线项目,在经过第三方安全技术人员测试后,需出示相关安全检测、渗透测试报告,并由企业安全负责人安排技术人员进行安全测试,检测外包方安全检测是否全面,是否还存在安全问题,发现问题并上报问题。

4  0day跟踪与处置

由企业安全技术人员对最新爆出来的0day事件,进行跟踪,分析是否影响企业应该安全,并与网络、运维商定最快处置方案,在不影响业务情况下对系统进行打补丁或升级处置。

5  企业内网安全

5.1、安全域:网络安全域是指同一系统内有相同的安全保护需求、相互信任、并具有相同的安全访问控制和边界控制策略的子网或网络,相同的网络安全域共享一样的安全策略。广义的安全域是指具有相同业务要求和安全要求的IT系统要素的集合。

安全域的划分是一个非常重要的工作,企业按自己的实际情况划分不同的安全域同时还需要指定各安全域的安全策略并加以实现。

5.2、终端安全:终端安全涉及资产管理、补丁管理、终端准入、防病毒、外设管控、上网行为管理等内容。办公终端电脑设置网络隔离,在该网段可以部署蜜罐,在感染病毒木马的情况下,可有效提升发现速度,对进出该网段的流量进行监控,入站邮件内容进行更多层的分析。

5.3、重点关注安全:活动目录、邮件系统、VPN、堡垒机。

5.4、蜜罐体系建设:除了依靠各种安全配置基线、部署防御设备直面安全问题外,在内网可以使用欺骗技术来发现可以行为,蜜罐。蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对他们实施攻击,从而可以对攻击行为进行捕获和分析。

6 基础运维方面

6.1、加强设备管理,梳理资产信息,严格核对CMDB中信息,将密码变更列入季度安全运维工作,对不在用的策略、服务器进行清理线下,将继续使用的设备进行资产审核,确认资产信息准确性。

6.2、严格杜绝系统弱口令,加强口令强度设置;需要用户注册功能的,要对注册用户加以限制,要对上传文件格式限制;加强信息系统及用户账号的管理,定期查看使用情况,确认不用的系统、用户账号及时进行关停处理。

6.3、需要对防火墙策略申请、端口映射申请进行周期性梳理,删除无效、无用策略,防止内部服务被误开放到互联网平台。

6.4、严格控制运维、研发、测试等技术型人员在服务器上明文存储备份账号密码,随意开放查看权限,对离职员工账号密码进行严格审查,删除,关闭。

6.5、端口管控,即在防火墙上严格限制对外开放的端口,原则上DMZ服务器只允许对外开放80和443,而且DMZ服务器不允许主动访问外部。

6.6、端口管控工作是基础,做好端口管控后,重点放在web安全上。web应用防火墙:针对常规扫描行为,web应用防火墙基本上可以直接拦截。入侵检测/防御系统:对WAF后端的流量进行分析,发现恶意行为。漏洞扫描和渗透测试:针对企业应用季度性的安全检测,同上面提到的 2.3 安全检测。

7  安全防护方面

7.1、加强公司网络边界防护,更新升级防火墙、防毒墙等安全设备,做好外部入侵防护控制。

7.2、加强网络安全设备如VPN、堡垒机等权限管理,对人员进行基于角色划分管理权限。

7.3、对各平台网络严格按照等级保护要求进行区域区分,加强信息系统安全防护和管理。

7.4、对数据安全加强防护,防止未授权访问敏感数据,防止技术和业务人员对数据误操作或恶意操作导致数据泄露。

8  安全监测方面

8.1、充分利用安全设备及监控平台进行监控。分析安全设备的日志,对应用系统的运行状态、资源占用率等情况进行查看,及时发现和应对攻击行为,根据记录的入侵源IP、攻击类型、攻击访问等特征进行关联分析。

8.2、增加安全预警手段。推进公司预警监测和态势感知能力,加强主机端安全监控能力,将安全设备及系统逐步进行整合。

8.3、蜜罐体系建设:除了依靠各种安全配置基线、部署防御设备直面安全问题外,在内网可以使用欺骗技术来发现可以行为,蜜罐。蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对他们实施攻击,从而可以对攻击行为进行捕获和分析。

8.3.1 核心系统安全

应当警惕从合作机构或内部IP发送的可疑请求,如有发现内网主机存在扫描或登录失败次数过多等可疑行为且确认非内部测试的行为后应及时阻断并对其进行分析,避免内网被攻陷,维护核心系统安全。

9  蜜罐的主动防御

HW的大规模推广以及溯源技术的普及,尤其蜜罐的作用在今年HW行动中大放异彩,蜜罐的推广与普及也必然成为攻击溯源的趋势。蜜罐的部署可以提前捕获长期盯着xxx企业业务的一些apt组织,可通过主动手段提前发现潜在威胁。

蜜罐可用于长期安全设备,部署在外网,通过扫描探测可以提前发现攻击行为,通过指纹抓取可以定位到攻击者信息。部署在内网,在边界失守的情况下,内网蜜罐可提前发现攻击者的内网探测行为,利用自身所带漏洞引诱并拖延攻击者的内网横向行为,并抓取攻击者信息使溯源到攻击者身份。

10  应急处置方面

10.1、建立健全安全预防和预警机制。加强信息网络系统和设备的安全防护工作,加强信息网络日常运行状况的检测分析,对外部和内部可能对信息网络产生重大影响的事件进行预警,保障信息网络安全畅通。

10.2、加强应急处置和演练。发生突发性事件时,启动应急预案,根据事件级别,根据《应急预案》采取相应处置措施,确保网络通畅,业务连续性以及信息安全。有计划、有重点的组织技术人员针对不同情况对预案进行演练,对预案中存在的问题和不足及时补充、完善。

10.3、加强监控应急处理能力。如发现异常紧急处置、在平台发现被爆破的账号后,并在第一时间对问题账户进行删除操作;发现外围目录爬取、漏洞扫描,并在第一时间对该IP进行封禁。

10.4、新爆0day漏洞,分析对业务是否有影响,并对服务器进行紧急打补丁处置。

Linux 命令行,bash shell和环境变量

bash shell

bashshell 是可用于 Linux 的几个 shell 之一,也被称为 Bourne-again shell,是根据一个早期的 shell (/bin/sh) 的创建者 Stephen Bourne 来命名的。Bash 高度兼容 sh,但它在函数和编程功能上都提供了许多改进。它合并了来自 Korn shell (ksh) 和 C shell (csh) 的特性,想要成为一个符合 POSIX 的 shell。

在深入了解 bash 之前,回想一下 shell是一个接受和执行命令的程序。它还支持编程结构,允许使用更小的部件构建复杂的命令。这些复杂命令或 脚本可保存为文件,独自成为新命令。实际上,典型 Linux 系统上的许多命令 都是脚本。

Shell 有一些 内置命令,比如 cdbreakexec。其他命令是 外部命令。

Shell 也使用 3 种标准 I/O

  • stdin标准输入流,它向命令提供输入。
  • stdout标准输出流,它显示来自命令的输出。
  • stderr标准错误流,它显示来自命令的错误输出。

输入流向程序提供输入,这些输入通常来自终端击键。输出流打印文本字符,通常打印到终端。终端最初为 ASCII 打字机或显示终端,但现在通常是图形桌面上的窗口。

如果您使用的是没有图形桌面的 Linux 系统,或者在图形桌面上打开一个终端窗口,那么您会看到一个提示符,它可能类似于 清单 1中所示的 3 个提示符之一。

清单 1. 一些典型的用户提示符

[ian@atticf20 ~]$
jenni@atticf20:data
$

请注意,这 3 个提示符都来自我的测试系统 atticf20,但面向的是不同用户。前两个是 bash 提示符,二者都显示了已登录的用户、系统名和当前工作目录。第三个提示符是我的系统上针对 ksh shell 的默认提示符。不同发行版和不同 shell 默认使用不同的提示符,所以如果您的发行版看起来有所不同,不要恐慌。我们将在本系列的另一篇教程中介绍如何更改提示符。

如果您以根用户(或超级用户)身份登录,您的提示符可能类似于 清单 2中所示的提示符之一。

清单 2. 超级用户或根用户提示符示例

[root@atticf20 ~]#
atticf20:~#

根用户有很大的权力,所以使用该身份时请小心。在拥有根用户特权时,大部分提示符都包含结尾的井号 (#)。普通用户特权通常使用不同的字符表示,这个字符通常为美元符号 ($)。您的实际提示符可能看起来与本教程中的示例有所不同。您的提示符可能包含您的用户名、主机名、当前目录、日期或打印该提示符的时间,等等。

备注:一些系统(比如 Debian)和基于 Debian 的发行版(比如 Ubuntu)不允许根用户登录,要求所有特权(根用户)命令都使用 sudo命令执行。在这种情况下,您的提示符不会发生更改,但您应该知道需要使用 sudo执行普通用户无权执行的命令。

这些教程包含从真实的 Linux 系统剪切并粘贴的代码示例,其中使用了这些系统的默认提示符。根用户提示符有一个结尾 #,所以您可以将它们与普通用户提示符(有一个结尾 $)区分开来。这种约定与许多有关这一主题的图书一致。如果某项功能似乎对您不起作用,您可以检查示例中的提示符。

环境变量

当您在 bash shell 中运行时,许多因素构成了您的 环境,比如您的提示符的形式、主目录、工作目录、shell 的名称、您打开的文件、您定义的函数,等等。您的环境包含许多可由 bash 或您设置的 变量。bash shell 还允许您拥有 shell 变量,您可以将这些变量 导出到环境中,供 shell 中运行的其他进程或您可能从当前 shell 衍生的其他 shell 使用。

环境变量和 shell 变量都有一个 名称。可以在名称前面加上 ‘ $ ’ 作为前缀来引用变量的值。您会遇到的一些常见的 bash 环境变量如 下表中所示。

一些常见的 bash 环境变量
名称功能
USER登录用户的名称
UID登录用户的用户 id 数字
HOME用户的主目录
PWD当前工作目录
SHELLshell 的名称
$运行的 bash shell(或其他)进程的进程 id(或 PID
PPID启动此进程的进程的进程 id(也就是父进程的 id)
?上一个命令的退出代码

展示了您可能在其中一些常见 bash 变量中看到的结果

环境变量和 shell 变量
[ian@atticf20 ~]$ echo $USER $UID
ian 1000
[ian@atticf20 ~]$ echo $SHELL $HOME $PWD
/bin/bash /home/ian /home/ian
[ian@atticf20 ~]$ (exit 0);echo $?;(exit 4);echo $?
0
4
[ian@atticf20 ~]$ echo $$ $PPID
3175 2457

可通过键入一个名称后立即键入等号 (=) 来创建或 设置shell 变量。如果该变量存在,可以修改它来分配新值。变量是区分大小写的,所以 var1 和 VAR1 是不同的变量。根据约定,变量(特别是导出的变量)采用大写,但这不是必须的。从技术上讲,$$ 和 $? 是 shell 参数而不是变量。它们只能被引用;不能向它们分配值。

创建 shell 变量时,您通常希望将它 导出到环境中,以便从此 shell 启动的其他进程可以使用它。导出的变量 可用于父 shell。可使用 export命令导出变量名。作为 bash 中的快捷方式,可以在一个步骤中分配一个值并导出变量。

为了演示分配和导出过程,我们将在 bash shell 中运行该 bash 命令,然后从新的 bash shell 运行 Korn shell (ksh)。我们将使用 ps命令显示正在运行的命令的信息。

[ian@atticf20 ~]$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
3175  2457 bash
[ian@atticf20 ~]$ bash
[ian@atticf20 ~]$  ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
4325  3175 bash
[ian@atticf20 ~]$ VAR1=var1
[ian@atticf20 ~]$ VAR2=var2
[ian@atticf20 ~]$ export VAR2
[ian@atticf20 ~]$ export VAR3=var3
[ian@atticf20 ~]$ echo $VAR1 $VAR2 $VAR3
var1 var2 var3
[ian@atticf20 ~]$ echo $VAR1 $VAR2 $VAR3 $SHELL
var1 var2 var3 /bin/bash
[ian@atticf20 ~]$ ksh$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
4427  4325 ksh
$ export VAR4=var4
$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var2 var3 var4 /bin/bash
$ exit[ian@atticf20 ~]$ echo $
VAR1 $VAR2 $VAR3 $VAR4 $SHELLvar1 var2 var3 /bin/bash
[ian@atticf20 ~]$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
4325  3175 bash
[ian@atticf20 ~]$ exit
exit
[ian@atticf20 ~]$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
3175  2457 bash
[ian@atticf20 ~]$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
/bin/bash
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
2559  2558 -bash
[ian@echidna ~]$ bash
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
2811  2559 bash
[ian@echidna ~]$ VAR1=var1
[ian@echidna ~]$ VAR2=var2
[ian@echidna ~]$ export VAR2
[ian@echidna ~]$ export VAR3=var3
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3
var1 var2 var3
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3 $SHELL
var1 var2 var3 /bin/bash
[ian@echidna ~]$ ksh$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
2840  2811 ksh
$ export VAR4=var4$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var2 var3 var4 /bin/bash
$ exit
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var1 var2 var3 /bin/bash
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
2811  2559 bash
[ian@echidna ~]$ exit
exit
[ian@echidna ~]$ ps -p $$ -o "pid ppid cmd"
PID  PPID CMD
2559  2558 -bash
[ian@echidna ~]$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
/bin/bash

备注:

  1. 在此序列的开头,bash shell 拥有 PID 3175。
  2. 第二个 bash shell 拥有 PID 4325,它的父 shell 为 PID 3175(原始的 bash shell)。
  3. 我们在第二个 bash shell 中创建了 VAR1、VAR2 和 VAR3,但仅导出了 VAR2 和 VAR3。
  4. 在 Korn shell 中,我们创建了 VAR4。echo命令仅显示了 VAR2、VAR3 和 VAR4 的值,可以确认 VAR1 未导出。您看到 SHELL 变量的值未发生改变是否感到很奇怪,因为提示符已发生改变?您不能始终依靠 SHELL 来告诉您在哪些 shell 下运行,但 ps命令会告诉您实际命令。请注意,ps在第一个 bash shell 前面放入了一个连字符 (-),表明这是一个 登录 shell
  5. 返回到第二个 bash shell,我们可以看到 VAR1、VAR2 和 VAR3。
  6. 最后,当返回到原始 shell 时,所有新变量都不存在。

之前对引号的讨论中已提到,可以使用单引号或双引号。它们之间有一个重要区别。shell 会扩展双引号之间的 shell 变量,但使用单引号 (‘) 时不会扩展。在上一个示例中,我们在 shell 中启动了另一个 shell 并获得了一个新进程 id。使用 -c选项,您可以将一个命令传递给其他 shell,该 shell 将执行该命令并返回。如果传递一个带引号的字符串作为命令,外部 shell 将消除引号并传递字符串。如果使用双引号,变量扩展会在传递字符串 之前执行,所以结果可能不符合预期。该 shell 和命令将在另一个进程中运行,所以它们将拥有另一个 PID。清单 9演示了这些概念。顶级 bash shell 的 PID 已突出显示。

添加引号和 shell 变量
[ian@atticf20 ~]$ echo “$SHELL” ‘$SHELL’ “$$” ‘$$’
/bin/bash $SHELL 3175$$
[ian@atticf20 ~]$ bash -c “echo Expand in parent $$ $PPID”
Expand in parent 31752457
[ian@atticf20 ~]$ bash -c ‘echo Expand in child $$ $PPID’
Expand in child 4541 3175

目前为止,我们的所有变量引用都以空白终止,所以很清楚变量名在何处结束。事实上,变量名仅能由字母、数字或下划线组成。shell 知道变量名会在找到另外的字符时结束。有时,您需要在含义模糊表达式中使用变量。在这些情况下,可以使用花括号来表示变量名,如 清单中所示。

将花括号用于变量名
[ian@atticf20 ~]$ echo “-$HOME/abc-“
-/home/ian/abc-
[ian@atticf20 ~]$ echo “-$HOME_abc-“
[ian@atticf20 ~]$ echo “-${HOME}_abc-“
-/home/ian_abc-

Env

没有任何选项或参数的 env命令显示当前环境变量。也可以使用它在自定义环境中执行命令。-i(或者只是 -)选项在运行命令前清除当前环境,而 -u选项取消设置您不希望传递的环境变量。

清单 11显示了没有任何参数的 env命令的部分输出,然后给出了 3 个调用没有父环境的不同 shell 的示例。在我们讨论它们之前请仔细看看它们。

备注:如果您的系统未安装 ksh (Korn) 或 tcsh shell,您需要安装它们来自行执行这些练习。
env 命令

[ian@atticf20 ~]$ env
XDG_VTNR=2
XDG_SESSION_ID=1
HOSTNAME=atticf20
GPG_AGENT_INFO=/run/user/1000/keyring/gpg:0:1
SHELL=/bin/bash
TERM=xterm-256color
XDG_MENU_PREFIX=gnome-
VTE_VERSION=4002
HISTSIZE=1000
GJS_DEBUG_OUTPUT=stderr
WINDOWID=35651982
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
QT_GRAPHICSSYSTEM_CHECKED=1
USER=ian
=/usr/bin/env OLDPWD=/home/ian/Documents [ian@atticf20 ~]$ env -i bash -c ‘echo $SHELL; env’ /bin/bash PWD=/home/ian SHLVL=1 =/usr/bin/env
[ian@atticf20 ~]$ env -i ksh -c ‘echo $SHELL; env’
/bin/sh
_=3175/usr/bin/env
PWD=/home/ian
SHLVL=1
_AST_FEATURES=UNIVERSE – ucb
A__z=”*SHLVL
[ian@atticf20 ~]$ env -i tcsh -c ‘echo $SHELL; env’
SHELL: Undefined variable.

当 bash 设置 SHELL 变量时,会将其导出至环境中。新 bash shell 已在环境中创建了 3 个其他变量。在 ksh 示例中,我们有 5 个环境变量,但我们尝试回送 SHELL 变量值时,获得了输出 /bin/sh。一些更早的 ksh 版本仅提供一个空白行来表明 SHELL 变量未设置。最后,tcsh 未创建任何环境变量,并在我们尝试引用 SHELL 的值时生成了一个错误。

取消设置和设置

清单 11显示了 shell 处理变量和环境的不同行为。尽管本教程重点介绍的是 bash,但也有必要知道不是所有 shell 都具有相同的行为。此外,shell 将根据它是否是 登录 shell来采取不同行为。就目前而言,我们仅假设登录 shell 是您登录到系统时获得的 shell;如果愿意,您还可以启动其他 shell 来充当登录 shell。上面使用 env -i启动的 3 个 shell 都不是登录 shell。尝试将 -l选项传递给 shell 命令本身,看看您使用登录 shell 会获得哪些区别。

让我们尝试在这些非登录 shell 中显示 SHELL 变量的值:

  1. 当 bash 启动时,它会设置 SHELL 变量,但不会自动将其导出到环境中。
  2. 当 ksh 启动时,它会将其 SHELL 变量的视图设置为 /bin/sh。相较而言,在之前的示例中,ksh 继承了从调用 bash shell 导出的 /bin/bash 值。
  3. 当 tcsh 启动时,没有设置 SHELL 变量。在这种情况下,默认行为与 ksh(和 bash)不同,因为在我们尝试使用一个不存在的变量时报告了错误。

可以使用 unset命令取消设置变量,并从 shell 变量列表中删除它。如果变量已导出到环境中,此命令还会从环境中删除它。可以使用 set命令控制 bash(或其他 shell)的工作方式的许多方面。Set 是一个 shell 内置命令,所以各种选项都是特定于 shell 的。在 bash 中,-u选项导致 bash 报告变量未定义的错误,而不是将它们视为已定义但是空的。可以使用 -打开 set的各种选项,使用 +关闭它们。可以使用 echo $-显示当前设置的选项。

[ian@atticf20 ~]$ echo $-
himBH
[ian@atticf20 ~]$ echo $VAR1

[ian@atticf20 ~]$ set -u;echo $-
himuBH
[ian@atticf20 ~]$ echo $VAR1
bash: VAR1: unbound variable
[ian@atticf20 ~]$ VAR1=v1;echo $VAR1
v1
[ian@atticf20 ~]$ unset VAR1;echo $VAR1
bash: VAR1: unbound variable
[ian@atticf20 ~]$ set +u;echo $VAR1;echo $-

himBH

如果使用没有任何选项的 set命令,它会显示所有 shell 变量和它们的值(如果有)。还有另一个 declare命令,可用于创建、导出和显示 shell 变量的值。可以使用手册页了解许多剩余的 set选项和 declare命令。本教程后面部分将讨论 手册页

Exec

最后一个要介绍的命令是 exec。可使用 exec命令运行另一个程序来 取代当前 shell。清单 13启动了一个子 bash shell,然后使用 exec将它替换为一个 Korn shell。从 Korn shell 退出时,会返回到原始 bash shell(在本例中为 PID 2852)。

使用 exec
[ian@atticf20 ~]$ echo $$
3175
[ian@atticf20 ~]$ bash
[ian@atticf20 ~]$ echo $$
4994
[ian@atticf20 ~]$ exec ksh
$ echo $$
4994
$ exit
[ian@atticf20 ~]$ echo $$
3175

处理wordpress站点遇到错误的方法

wordpress及运行环境比如php版本的不断更新,但是很多主题却没有更新,如果新版本的wordpress使用旧主题时,有时候会出现兼容性的问题,会导致首页报错,网站无法正常运行。

类似于以下的信息:

您的站点遇到了致命错误。

了解更多在WordPress中调试的信息。

如果是更换主题导致的,其实解决起来也非常简单,只需要在数据库中wpoptions下,将template和stylesheet修改成正常主题即可。