周二,金山软件旗下西山居北京运营中心的一名年轻员工在公司内猝死,此事在网络和互联网行业引发广泛关注,经过各大微博的数轮传播后,该事件在警方尚无结论之前,“过劳死”成为许多网友听到该消息后的第一反应,因为此前在互联网行业已经出现过数起猝死事件。截至昨天,北京警方仍在调查该名员工的死因,不过事件经过两天来的发酵,外界关注焦点不仅限于员工猝死本身,而是扩大至对互联网行业的加班文化展开思考。
猝死员工并非“程序员”
9月4日下午,速途网在新浪的官方微博发布了一则内容:“传金山游戏团队一名程序员今晨猝死”。微博内容称,9月4日早晨金山游戏团队有一名程序员猝死,此前金山公司曾在微博上炫耀员工“连续加班一周没有碰过床,困了就睡桌子”。
记者昨天来到金山软件总部,从相关人士处详细了解该事件的来龙去脉。速途网最先披露的这条微博内容多处不实,尤其是在关键细节上有几处与事实有出入,导致整个事件看起来像是金山员工长期加班致使猝死。
据了解,猝死的金山员工就职于金山集团旗下游戏团队“西山居”,今年25岁,是一名网站运营维护人员。此外,微博上大量转发的员工加班照并非金山软件所发,而是旗下子公司金山网络通过金山毒霸官方微博发布,但很多人都将金山软件和金山毒霸混为一谈。
猝死原因初步判定心脏病
记者了解到,这名猝死员工是在今年3月加入公司,老家是外地的,在北京一直租房住。9月3日晚间,他下班后并没有回家而是住在了公司。
9月4日早晨,同住一屋的同事起床后发现叫不醒他,随后拨打了110、120电话。警察和急救人员赶到时,这名员工已经死亡,目前尸检结果还没出来,初步判定是心脏病。
金山软件方面表示,在警方公布调查结果之前,公司不便对外发表任何说明,但公司认为目前最重要的事是安抚好猝死员工的家属以及该员工同组同事,并妥善地处理善后事宜。金山相关人士还表示,公司从未鼓励员工加班,并长期提供免费的一日三餐、健身设施等福利为员工服务。
最忙时一天睡3小时
金山员工猝死的消息传到游戏行业后,一家游戏公司的员工评论:“游戏公司压力山大,谁不信可以上网查查,这是近几年游戏行业第几起猝死的悲剧了。”
记者了解到,游戏公司每到推出新游戏或老游戏的新版本时,经常是比较忙的时间,因为游戏推出前需要推广、营销,内测阶段需要修改,正式推出后需要维护。
“加班到12点就算早的,有些公司人员紧缺,不少员工都要干两个人甚至三个人的活,长期下来身体的确吃不消。”国内某游戏公司市场部人士告诉记者,前不久的ChinaJoy展会期间,他们经常忙到夜里两三点,每天只睡三个小时。
财经观察
互联网行业为何盛行加班文化
国内互联网公司一直有加班传统,虽然近年来大部分公司都对外宣称不鼓励员工加班,但实际上互联网行业的加班现象仍超过其他行业。
记者了解到,许多互联网公司实行弹性工作制,即员工每天上班时间满8小时就行,至于从几点开始、几点结束,由员工自主安排,所以很多IT公司员工会选择避开上下班的交通高峰期,“我喜欢早上多睡会儿,上午10点到公司,晚上9点以后下班,这样能节省很多路上的时间。”北京上地一家互联网公司的员工告诉记者。
记者从多家互联网公司行政部门了解到,这些公司并没有强制员工加班的规定,反而是在福利待遇上为员工考虑得比较多,“有些租房住的单身员工下了班也宁愿待在公司,环境比出租房要好多了。”
互联网行业人士指出,外界看到的只是互联网公司员工热衷于加班,但实际上加班分为两种,一种是为了完成工作,另一种是自我学习,而互联网公司往往是后一种。
网络上的计算机很容易被黑客利用工具或其它手段进行扫描,以寻找系统中的漏洞,然后再针对漏洞进行攻击。通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一步提高计算机系统的安全性。下面以 Red Hat Linux为例,针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。
一、针对HTTP服务
通过分析Web服务器的类型,大致可以推测出操作系统的类型,比如,Windows使用IIS来提供HTTP服务,而Linux中最常见的是Apache.
默认的Apache配置里没有任何信息保护机制,并且允许目录浏览。通过目录浏览,通常可以获得类似“Apache/1.3.27 Server at apache.Linuxforum.net Port 80”或“Apache/2.0.49(Unix) PHP/4.3.8”的信息。
通过修改配置文件中的 ServerTokens参数,可以将 Apache的相关信息隐藏起来。但是,RedHat Linux 运行的 Apache 是编译好的程序,提示信息被编译在程序里,要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以实现替换里面的提示内容。
以Apache 2.0.50为例,编辑ap_release.h文件,修改“#defineAP_SERVER_BASEPRODUCT \”Apache\“”为“#define AP_SERVER_BASEPRODUCT \”Mi-crosoft-IIS/5.0\“”。编辑os/unix/os.h文件,修改“#define PLATFORM \”Unix\“”为“#define PLATFORM \”Win32\“”。修改完毕后,重新编译、安装Apache.
Apache 安装完成后 , 修改httpd.conf 配 置 文 件 , 将 “ ServerTokens Full” 改 为“ServerTokens Prod”;将“ServerSignature On”改为“ServerSignature Off”,然后存盘退出。重新启动Apache后,用工具进行扫描,发现提示信息中已经显示操作系统为Windows.
二、针对FTP服务
通过 FTP 服务,也可以推测操作系统的类型,比如,Windows 下的 FTP 服务多是 Serv-U,而Linux下常用vsftpd、proftpd和pureftpd等软件。
以proftpd为例,修改配置文件proftpd.conf,添加如下内容:
ServerIdent on \“Serv-U FTP Server v5.0 for WinSock ready…\”
存盘退出后,重新启动proftpd服务,登录到修改了提示信息的FTP服务器进行测试:
C:\\>ftp 192.168.0.1
Connected to 192.168.0.1.
220 Serv-U FTP Server v5.0 for WinSock ready…
User (192.168.0.1:(none)):
331 Password required for (none)。
Password:
530 Login incorrect.
Login failed.
ftp > quit
221 Goodbye.
这样从表面上看,服务器就是一个运行着Serv-U的Windows了。
三、针对TTL返回值
可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络,直接 ping对方系统得到的TTL值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就会被丢弃。
通常情况下,Windows的TTL的基数是128,而早期的Red Hat Linux和Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的TTL基数是64.比如,ping一个Red Hat系统,显示如下:
Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
用以下命令修改Red Hat Linux的TTL基数为128(本来为64):
# echo 128 > /proc/sys/net/ipv4/ip_default_ttl
若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行:
net.ipv4.ip_default_ttl = 128
保存退出后,再ping 192.168.0.1,TTL基数就变为128了。
有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。
为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP 22端口的存在:
#iptables -I INPUT -s ! xx.xx.xx.xx -p tcp ——dport 22 -j DROP
利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下:
#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -I PREROUTING -p tcp ——dport 3389 -j DNAT ——to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -p tcp ——dport 3389 -j MASQUERADE
第一条命令表示允许数据包转发;第二条命令表示转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。
这样,当黑客扫描服务器所开端口的时候,就找不到 22号端口,而是看到一个伪装的 3389端口,从而不能正确判断出操作系统的类型。
五、针对netcraft
netcraft是一个很厉害的扫描引擎,它通过简单的 TCP 80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime)等信息。
上面介绍的几种方法对 netcraft来说,均不奏效。针对 netcraft,可利用iptables进行系统伪装,使netcraft错误判断操作系统:
#iptables -t nat -I PREROUTING -s 195.92.95.0/24 -p tcp ——dport 80 -j DNAT ——to
xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -s 195.92.95.0/24 -p tcp ——dport 80 -j MASQUERADE
由于通过抓包发现,netcraft的服务器不止一台,所以需要对它所在网段进行转发欺骗处理。
六、小结
以上方法只能从某种角度上防止和阻挠黑客对系统漏洞的分析,在一定程度上可减少计算机被攻击的可能性,但仍然是“防君子,不防小人”,仅是给大家提供一个活学活用的新思路。
异常场景
异常产生原因
地图画布未填充的小方格, TMXLayer的addTileByGlobalTileID无法获取GlobalID,从而无法获取纹理方格,因此报出Null Pointer异常。
解决办法
修改 org.andengine.extension.tmx.TMXLayer类中addTileByGlobalTileID方法
if(pGlobalTileID == 0) { tmxTileTextureRegion = null; } else { tmxTileTextureRegion = tmxTiledMap.getTextureRegionFromGlobalTileID(pGlobalTileID); }修改为
if(pGlobalTileID == 0) { tmxTileTextureRegion = tmxTiledMap.getTextureRegionFromGlobalTileID(1); }else{ tmxTileTextureRegion = tmxTiledMap.getTextureRegionFromGlobalTileID(pGlobalTileID); }
this.drawWithoutChecks(tmxTileTextureRegion, tmxTile.getTileX(), tmxTile.getTileY(), tileWidth, tileHeight, Color.WHITE_ABGR_PACKED_FLOAT);修改为
if(pGlobalTileID != 0){ this.drawWithoutChecks(tmxTileTextureRegion, tmxTile.getTileX(), tmxTile.getTileY(), tileWidth, tileHeight, Color.WHITE_ABGR_PACKED_FLOAT); }