| Subcribe via RSS

Ubuntu下包管理

07月 4th, 2008 | No Comments | Posted in Linux < by Johnny Woo >

查询包
apt-cache search

安装包
apt-get install

删除包
apt-get remove

升级包
atp-get upgrade

查询已安装包
dpkg -l | grep

阅读内文

udev 下绑定 网卡名

07月 4th, 2008 | No Comments | Posted in Linux, Network < by Martian Guo >

在 /etc/udev/rules.d 下查看一下是否有以下内容

grep "eth" /etc/udev/rules.d/*

如果没有的话自己建立一个像下面这样的文件

vi  /etc/udev/rules.d/70-persistent-net.rules
# PCI device 0x1106:0x3106 (via-rhine)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:95:ff:1c:c6", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
 
# PCI device 0x8086:0x1019 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:d8:3e:d5:19", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

关于udev介绍 请看下面两篇文档
http://blog.csdn.net/chinalinuxzend/archive/2007/10/21/1836110.aspx
http://webpages.charter.net/decibelshelp/LinuxHelp_UDEVPrimer.html

阅读内文 Tags: ,

iptables 学习 ( 思维导图 )

07月 3rd, 2008 | 3 Comments | Posted in Linux < by Martian Guo >

转换这个图片花了很长时间,图片有点大,我用Freemind 导出到最后剩下20%的时候程序报错,只能自己拼接了。这个图只是自己学习iptalbles的一个笔记,如果你对iptables不了解,建议你还是先看一下这个文档:iptables tutorial 否则直接看这个图只能让你更头晕。

源文件下载

点击查看大图

阅读内文 Tags: ,

两张宽屏的3D小人桌面

06月 29th, 2008 | 2 Comments | Posted in 生活随笔 < by Johnny Woo >



两张是很有团队的感觉.
全部的在以下链接
http://article.pchome.net/content-655642-1.html#topView

阅读内文

WinHA windows环境下故障切换软件

06月 29th, 2008 | No Comments | Posted in C/C++ < by Johnny Woo >

这个是我准备做的新的开源项目
主要是为了使用简单的方法来搭建WINDOWS环境下的HA应用
应为MCSC需要使用域.让我觉得很不爽
而HA其实就是个简单的东西来的.
所以准备自己重写一个
首先环境需要2台服务器
每台有两块网卡.其中一块用于心跳线对接
鉴于可靠性
我准备同时检测公网IP以及对外服务IP
软件流程大致如下

windows启动
winha服务启动
删除绑定的对外IP
arp检测对外公开ip的mac地址
如果公开IP不通,并且心跳线不通
则绑定公开IP
如果对外IP通,且MAC地址不是本机,心跳线正常
则使用检测是否对外IP以及心跳线正常
随时准备接管

阅读内文

博客交换网站推广的测试

06月 29th, 2008 | No Comments | Posted in SEO < by Johnny Woo >

今天看到在SEO网站优化推广看到一篇有意思的文章,帖子的主题是网站优化推广评论,在里面你在自己blog里面加上回复,带上关键词和链接之后.他会反向链接.估计是用blog回复中的关键词.来做google blog搜索的优化.呵呵

阅读内文 Tags: , ,

Windows 与 SQL Server 双机热备

06月 29th, 2008 | No Comments | Posted in Windows < by Johnny Woo >

http://blog.csdn.net/isoftk/archive/2007/12/03/1914175.aspx
http://blog.csdn.net/digjim/category/12527.aspx
http://fjzxb.blog.51cto.com/229517/42870

阅读内文

成功者的个人英雄主义

06月 28th, 2008 | No Comments | Posted in Management < by Johnny Woo >

在别人的博客上
我看到有讲述团队合作的授权
里面有一条
“领导的个人英雄主义只会扼杀员工的创造力”
我觉得这事情要两方面来看
领导必须有个人英雄主义
这样才会有个人魅力和团队的凝聚力
才能把领导的热情.散播到周围的每一个人身上
只有将团队成员都集中在你周围
觉得你把事情委任给他是一种荣耀时
这种授权才会激发成员的创造力
体现他的个人价值
而好的领导
会把这种热情
转换成企业的英雄主义
这就是为什么MS,GOOGLE这么吸引人的理由.
一些知名的大企业
他的创始人,无不是个性张扬的
没有他们的个人英雄主义.是没有人被他们的这种霸道所吸引的.
人就是这样.希望自由.但是有时候又会崇拜偶像.

阅读内文

SQUID基本理论及优化研究

06月 26th, 2008 | No Comments | Posted in Proxy < by Johnny Woo >

资料来源,不断更新中
http://blog.s135.com/book/squid/

1.每G的磁盘缓冲.约使用32M的内存,具体大小决定于系统体系结构以及object大小.

2.squid使用临时端口对每个连入链接进行服务,所以当服务器负载比较大时,需要对端口数进行优化

echo "1024 40000" > /proc/sys/net/ipv4/ip_local_port_range

3.日志文件路径.
日志分为cache.log,记录squid状态和调试信息
access.log文,记录对squid发起的每个客户请求
store.log,记录进入和离开缓存的每个目标的记录

cache_log /squid/logs/cache.log
cache_access_log /squid/logs/access.log
cache_store_log /squid/logs/store.log

当需要极端性能的时候,可以将日志记录取消

cache_log /dev/null
cache_access_log /squid/logs/access.log
cache_store_log none

4.visible_hostname
我们知道没有指定可见主机名,squid将无法启动
其原因是squid在提供服务时,会把主机头插入http via以及x-cache头部
提供用户更详细的信息.而且将会把主机名使用在检测转发环路中

5.日志滚动

squid -k rotate

6.no_cache
此项用于指定内容是否会被squid缓存.由于此项使用no.在语意上会造成一定的混淆
no_cache allow 是允许指定内容进行缓冲
no_cache deny 是让指定目标不被缓存

7.L1以及L2缓冲
squid存储方式ufs,aufs,和diskd中,会使用L1,L2级目录
L1和L2参数指定了第一级和第二级目录的数量,默认的是16和256
如果针对特定的缓冲对象数量进行服务
则可以通过L1,L2参数的调整,使得每个L2目录下的文件数量保持在一个合理值之内

8.maximum_object_size
如果对象包含Content-Length头部
则SQUID在直接比较两个值之后做出缓冲与否的判断
否则将会在将对象存放在本地磁盘之后再对比文件大小

9.cache_dir写入选择算法
Squid有2个cache_dir选择算法。默认的算法叫做lease-load;替代的算法是round-robin。
least- load算法,就如其名字的意义一样,它选择当前工作负载最小的cache目录。负载概念依赖于存储机制。对aufs,coss和diskd机制来说,负载与挂起操作的数量有关。对ufs来说,负载是不变的。在cache_dir负载相等的情况下,该算法使用自由空间和最大目标大小作为附加选择条件。
round-robin算法也使用负载作为衡量标准。它选择某个负载小于100%的cache目录,当然,该目录里的存储目标没有超出大小限制,并且不是只读的。

10.删除缓存对象

squidclient -r http://www.lrrr.org/junk >/tmp/foo

11.删除个别对象

squidclient -m PURGE http://www.lrrr.org/junk

12.删除一组对象

awk '{print $7}' /usr/local/squid/var/logs/access.log \
        |
grep www.example.com \
        |
xargs -n 1 squidclient -m PURGE

13.删除全部对象
首先必须确认squid没有在运行

echo '' > /usr/local/squid/var/cache/swap.state

14.refresh_pattern
refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限。

refresh_pattern -i \.htm$ 0 20% 1440

15.文件系统优化
设置noatime
设置async

16.squid堆叠
通常把一组互相转发请求的cache(或代理)叫做cache堆叠。把cache堆叠的成员叫做邻居或对等伙伴
邻居cache有2种关系:父子或兄弟。从拓扑上看,父cache在堆叠里位于顶层,而兄弟cache位于同一层。两者真正的不同在于,父cache能为子cache转发cache丢失,然而兄弟cache之间不允许转发cache丢失。

17.HTCP与ICP
使用HTCP相对于ICP的主要优势在于更少的假命中。HTCP有更少的假命中,因为查询消息包含了完整的HTTP请求头部,包含了来自客户端的任何 Cache-Control要求。使用HTCP的主要不足在于HTCP查询更大,要求更多的CPU来处理产生和解析消息。测量显示,HTCP查询大约是 ICP查询的6倍大,这归咎于HTTP请求头部的存在。然而,squid的HTCP响应典型的比ICP响应小。

阅读内文 Tags: , ,

windows主机安全设置

06月 26th, 2008 | No Comments | Posted in Windows < by Johnny Woo >

windows主机安全设置
*这是一篇老文了.大概是我在04年写的了.留个档

原理篇

我们将从入侵者入侵的各个环节来作出对应措施
一步步的加固windows系统.
对于想直接了解操作具体步骤的读者.
可以跳跃直接阅读后面一个章节的[实践篇].
加固windows系统.一共归于几个方面
1.端口限制
2.设置ACL权限
3.关闭服务或组件
4.包过滤
5.审计

我们现在开始从入侵者的第一步开始.对应的开始加固已有的windows系统.

1.扫描
这是入侵者在刚开始要做的第一步.比如搜索有漏洞的服务.
对应措施:端口限制
以下所有规则.都需要选择镜像,否则会导致无法连接
我们需要作的就是打开服务所需要的端口.而将其他的端口一律屏蔽

2.下载信息
这里主要是通过URL SCAN.来过滤一些非法请求
对应措施:过滤相应包
我们通过安全URL SCAN并且设置urlscan.ini中的DenyExtensions字段
来阻止特定结尾的文件的执行

3.上传文件
入侵者通过这步上传WEBSHELL,提权软件,运行cmd指令等等.
对应措施:取消相应服务和功能,设置ACL权限
如果有条件可以不使用FSO的.
通过 regsvr32 /u c:\windows\system32\scrrun.dll来注销掉相关的DLL.
如果需要使用.
那就为每个站点建立一个user用户
对每个站点相应的目录.只给这个用户读,写,执行权限,给administrators全部权限
安装杀毒软件.实时杀除上传上来的恶意代码.
个人推荐MCAFEE或者卡巴斯基
如果使用MCAFEE.对WINDOWS目录所有添加与修改文件的行为进行阻止.

4.WebShell
入侵者上传文件后.需要利用WebShell来执行可执行程序.或者利用WebShell进行更加方便的文件操作.
对应措施:取消相应服务和功能
一般WebShell用到以下组件
WScript.Network
WScript.Network.1
WScript.Shell
WScript.Shell.1
Shell.Application
Shell.Application.1
我们在注册表中将以上键值改名或删除
同时需要注意按照这些键值下的CLSID键的内容
从/HKEY_CLASSES_ROOT/CLSID下面对应的键值删除

5.执行SHELL
入侵者获得shell来执行更多指令
对应措施:设置ACL权限
windows的命令行控制台位于\WINDOWS\SYSTEM32\CMD.EXE
我们将此文件的ACL修改为
某个特定管理员帐户(比如administrator)拥有全部权限.
其他用户.包括system用户,administrators组等等.一律无权限访问此文件.

6.利用已有用户或添加用户
入侵者通过利用修改已有用户或者添加windows正式用户.向获取管理员权限迈进
对应措施:设置ACL权限.修改用户
将除管理员外所有用户的终端访问权限去掉.
限制CMD.EXE的访问权限.
限制SQL SERVER内的XP_CMDSHELL

7.登陆图形终端
入侵者登陆TERMINAL SERVER或者RADMIN等等图形终端,
获取许多图形程序的运行权限.由于WINDOWS系统下绝大部分应用程序都是GUI的.
所以这步是每个入侵WINDOWS的入侵者都希望获得的
对应措施:端口限制
入侵者可能利用3389或者其他的木马之类的获取对于图形界面的访问.
我们在第一步的端口限制中.对所有从内到外的访问一律屏蔽也就是为了防止反弹木马.
所以在端口限制中.由本地访问外部网络的端口越少越好.
如果不是作为MAIL SERVER.可以不用加任何由内向外的端口.
阻断所有的反弹木马.

8.擦除脚印
入侵者在获得了一台机器的完全管理员权限后
就是擦除脚印来隐藏自身.
对应措施:审计
首先我们要确定在windows日志中打开足够的审计项目.
如果审计项目不足.入侵者甚至都无需去删除windows事件.
其次我们可以用自己的cmd.exe以及net.exe来替换系统自带的.
将运行的指令保存下来.了解入侵者的行动.
对于windows日志
我们可以通过将日志发送到远程日志服务器的方式来保证记录的完整性.
evtsys工具(https://engineering.purdue.edu/ECN/Resources/Documents)
提供将windows日志转换成syslog格式并且发送到远程服务器上的功能.
使用此用具.并且在远程服务器上开放syslogd,如果远程服务器是windows系统.
推荐使用kiwi syslog deamon.

我们要达到的目的就是
不让入侵者扫描到主机弱点
即使扫描到了也不能上传文件
即使上传文件了不能操作其他目录的文件
即使操作了其他目录的文件也不能执行shell
即使执行了shell也不能添加用户
即使添加用户了也不能登陆图形终端
即使登陆了图形终端.拥有系统控制权.他的所作所为还是会被记录下来.

额外措施:
我们可以通过增加一些设备和措施来进一步加强系统安全性.
1.代理型防火墙.如ISA2004
代理型防火墙可以对进出的包进行内容过滤.
设置对HTTP REQUEST内的request string或者form内容进行过滤
将SELECT.DROP.DELETE.INSERT等都过滤掉.
因为这些关键词在客户提交的表单或者内容中是不可能出现的.
过滤了以后可以说从根本杜绝了SQL 注入
2.用SNORT建立IDS
用另一台服务器建立个SNORT.
对于所有进出服务器的包都进行分析和记录
特别是FTP上传的指令以及HTTP对ASP文件的请求
可以特别关注一下.

本文提到的部分软件在提供下载的RAR中包含
包括COM命令行执行记录
URLSCAN 2.5以及配置好的配置文件
IPSEC导出的端口规则
evtsys
一些注册表加固的注册表项.

实践篇

下面我用的例子.将是一台标准的虚拟主机.
系统:windows2003
服务:[IIS] [SERV-U] [IMAIL] [SQL SERVER 2000] [PHP] [MYSQL]
描述:为了演示,绑定了最多的服务.大家可以根据实际情况做筛减

1.WINDOWS本地安全策略 端口限制
A.对于我们的例子来说.需要开通以下端口
外->本地 80
外->本地 20
外->本地 21
外->本地 PASV所用到的一些端口
外->本地 25
外->本地 110
外->本地 3389
然后按照具体情况.打开SQL SERVER和MYSQL的端口
外->本地 1433
外->本地 3306
B.接着是开放从内部往外需要开放的端口
按照实际情况,如果无需邮件服务,则不要打开以下两条规则
本地->外 53 TCP,UDP
本地->外 25
按照具体情况.如果无需在服务器上访问网页.尽量不要开以下端口
本地->外 80
C.除了明确允许的一律阻止.这个是安全规则的关键.
外->本地 所有协议 阻止

2.用户帐号
a.将administrator改名,例子中改为root
b.取消所有除管理员root外所有用户属性中的
远程控制->启用远程控制 以及
终端服务配置文件->允许登陆到终端服务器
c.将guest改名为administrator并且修改密码
d.除了管理员root,IUSER以及IWAM以及ASPNET用户外.禁用其他一切用户.包括SQL DEBUG以及TERMINAL USER等等

3.目录权限
将所有盘符的权限,全部改为只有
administrators组 全部权限
system 全部权限
将C盘的所有子目录和子文件继承C盘的administrator(组或用户)和SYSTEM所有权限的两个权限
然后做如下修改
C:\Program Files\Common Files
开放Everyone 默认的读取及运行,列出文件目录,读取三个权限
C:\WINDOWS\
开放Everyone 默认的读取及运行,列出文件目录,读取三个权限
C:\WINDOWS\Temp
开放Everyone 修改,读取及运行,列出文件目录,读取,写入权限
现在WebShell就无法在系统目录内写入文件了.
当然也可以使用更严格的权限.
在WINDOWS下分别目录设置权限.
可是比较复杂.效果也并不明显.

如果服务器上需要运行.NET
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files
开放Everyone 修改,读取及运行,列出文件目录,读取,写入权限

4.IIS
在IIS 6下.应用程序扩展内的文件类型对应ISAPI的类型已经去掉了IDQ,PRINT等等危险的脚本类型,
在IIS 5下我们需要把除了ASP以及ASA以外所有类型删除.
安装URLSCAN
在[DenyExtensions]中
一般加入以下内容
.cer
.cdx
.mdb
.bat
.cmd
.com
.htw
.ida
.idq
.htr
.idc
.shtm
.shtml
.stm
.printer
这样入侵者就无法下载.mdb数据库.这种方法比外面一些在文件头加入特殊字符的方法更加彻底.
因为即便文件头加入特殊字符.还是可以通过编码构造出来的

5.WEB目录权限
作为虚拟主机.会有许多独立客户
比较保险的做法就是为每个客户,建立一个windows用户
然后在IIS的响应的站点项内
把IIS执行的匿名用户.绑定成这个用户
并且把他指向的目录
权限变更为
administrators 全部权限
system 全部权限
单独建立的用户 读写执行

如果服务器上站点不多.并且有论坛
我们可以把每个论坛的上传目录
去掉此用户的执行权限.
只有读写权限
这样入侵者即便绕过论坛文件类型检测上传了webshell
也是无法运行的.

6.MS SQL SERVER2000
使用系统帐户登陆查询分析器
运行以下脚本
use master
exec sp_dropextendedproc ‘xp_cmdshell’
exec sp_dropextendedproc ‘xp_enumgroups’
exec sp_dropextendedproc ‘xp_loginconfig’
exec sp_dropextendedproc ‘xp_enumerrorlogs’
exec sp_dropextendedproc ‘xp_getfiledetails’
exec sp_dropextendedproc ‘Sp_OACreate’
exec sp_dropextendedproc ‘Sp_OADestroy’
exec sp_dropextendedproc ‘Sp_OAGetErrorInfo’
exec sp_dropextendedproc ‘Sp_OAGetProperty’
exec sp_dropextendedproc ‘Sp_OAMethod’
exec sp_dropextendedproc ‘Sp_OASetProperty’
exec sp_dropextendedproc ‘Sp_OAStop’
exec sp_dropextendedproc ‘Xp_regaddmultistring’
exec sp_dropextendedproc ‘Xp_regdeletekey’
exec sp_dropextendedproc ‘Xp_regdeletevalue’
exec sp_dropextendedproc ‘Xp_regenumvalues’
exec sp_dropextendedproc ‘Xp_regremovemultistring’
exec sp_dropextendedproc ‘Xp_regwrite’
drop procedure sp_makewebtask
go
删除所有危险的扩展.
以下3个存储过程会在SQL SERVER恢复备份时被使用,非必要请勿删除
#exec sp_dropextendedproc ‘xp_dirtree’
#exec sp_dropextendedproc ‘Xp_regread’
#exec sp_dropextendedproc ‘xp_fixeddrives’
恢复脚本
use master
EXEC sp_addextendedproc xp_cmdshell ,@dllname =’xplog70.dll’
EXEC sp_addextendedproc xp_enumgroups ,@dllname =’xplog70.dll’
EXEC sp_addextendedproc xp_loginconfig ,@dllname =’xplog70.dll’
EXEC sp_addextendedproc xp_enumerrorlogs ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc xp_getfiledetails ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc Sp_OACreate ,@dllname =’odsole70.dll’
EXEC sp_addextendedproc Sp_OADestroy ,@dllname =’odsole70.dll’
EXEC sp_addextendedproc Sp_OAGetErrorInfo ,@dllname =’odsole70.dll’
EXEC sp_addextendedproc Sp_OAGetProperty ,@dllname =’odsole70.dll’
EXEC sp_addextendedproc Sp_OAMethod ,@dllname =’odsole70.dll’
EXEC sp_addextendedproc Sp_OASetProperty ,@dllname =’odsole70.dll’
EXEC sp_addextendedproc Sp_OAStop ,@dllname =’odsole70.dll’
EXEC sp_addextendedproc Xp_regaddmultistring ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc Xp_regdeletekey ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc Xp_regdeletevalue ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc Xp_regenumvalues ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc Xp_regremovemultistring ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc Xp_regwrite ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc xp_dirtree ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc Xp_regread ,@dllname =’xpstar.dll’
EXEC sp_addextendedproc xp_fixeddrives ,@dllname =’xpstar.dll’
go

7.修改CMD.EXE以及NET.EXE权限
将两个文件的权限.修改到特定管理员才能访问,比如本例中.我们如下修改
cmd.exe root用户 所有权限
net.exe root用户 所有权限
net1.exe root用户 所有权限
command.com root用户 所有权限
cacls root用户 所有权限
这样就能防止非法访问.
还可以使用例子中提供的comlog程序
将com.exe改名_com.exe,然后替换com文件.这样可以记录所有执行的命令行指令

8.备份
使用ntbackup软件.备份系统状态.
使用reg.exe 备份系统关键数据
如reg export HKLM\SOFTWARE\ODBC e:\backup\system\odbc.reg /y
来备份系统的ODBC

9.杀毒
这里介绍MCAFEE 8i 中文企业版
因为这个版本对于国内的许多恶意代码和木马都能够及时的更新.
比如已经能够检测到海阳顶端2006
而且能够杀除IMAIL等SMTP软件使用的队列中MIME编码的病毒文件
而很多人喜欢安装诺顿企业版.而诺顿企业版,对于WEBSHELL.基本都是没有反应的.
而且无法对于MIME编码的文件进行杀毒.
在MCAFEE中.
我们还能够加入规则.阻止在windows目录建立和修改EXE.DLL文件等
我们在软件中加入对WEB目录的杀毒计划.
每天执行一次
并且打开实时监控.

10.关闭无用的服务
我们一般关闭如下服务
Computer Browser
Help and Support
Messenger
Print Spooler
Remote Registry
TCP/IP NetBIOS Helper
如果服务器不用作域控,我们也可以禁用
Workstation

11.取消危险组件
如果服务器不需要FSO
regsvr32 /u c:\windows\system32\scrrun.dll
如果不需要shell
regsvr32 /u C:\windows\System32\shell32.dll
regsvr32 /u C:\windows\System32\wshom.ocx
注销组件
使用regedit
将/HKEY_CLASSES_ROOT下的
WScript.Network
WScript.Network.1
WScript.Shell
WScript.Shell.1
Shell.Application
Shell.Application.1
键值改名或删除
将这些键值下CLSID中包含的字串
如{72C24DD5-D70A-438B-8A42-98424B88AFB8}
到/HKEY_CLASSES_ROOT/CLSID下找到以这些字串命名的键值
全部删除

12.审计
本地安全策略->本地策略->审核策略
打开以下内容
审核策略更改 成功,失败
审核系统事件 成功,失败
审核帐户登陆事件 成功,失败
审核帐户管理 成功,失败

阅读内文 Tags: ,

chroot 环境下让普通用户修改配置文件

06月 26th, 2008 | No Comments | Posted in shell < by Martian Guo >

以前写的一个脚本,因为有一个项目要求让普通用户修改一些配置文件,而不能让他们有root权限。首先想到的是给这个用户sudo 权限用来执行一个脚本调用vi编辑器,而在vi中是可以直接调用系统命令的,因此这样做并不可靠。我想到了在脚本控制下给vi编辑器一个chroot环境,当vi修改完配置文件后,通过脚本控制复制到实际路径中替换掉旧文件并且可以备份每次修改的diff。下面是我写的一个脚本。介绍一下:
首先设置一个vi的chroot环境,主要程序文件,实际vim依赖哪些so可以用命令 ldd vim 来获取到,可以从相应实际目录中拷贝过来。

./
./bin
./bin/vim
./tmp
./etc
./etc/vimrc
./lib
./lib/ld-linux.so.2
./lib/libdl.so.2
./lib/libselinux.so.1
./lib/libgpm.so.1
./lib/libattr.so.1
./lib/libnsl.so.1
./lib/libc.so.6
./lib/libpthread.so.0
./lib/libncurses.so.5
./lib/libresolv.so.2
./lib/libacl.so.1
./lib/libcrypt.so.1
./lib/libperl.so
./lib/libtermcap.so.2
./lib/libm.so.6
./lib/libutil.so.1
./root
./root/.viminfo

下面是脚本,主要功能:自动搜索特定目录下的文件,修改后自动备份和随时回滚的功能,脚本写的很简单,没什么可说的。当然,你肯定又会说了,何必这么麻烦呢,直接把那些配置文件的修改权给这个用户不就好了吗?如果你非要这样也我也没有办法,这里只是提供这样一种方法,到底要怎么实现怎么做要看具体情况。

#!/bin/sh
#################################################
# File edit&backup&restore tools for sudo user                                   #
# martian <martian2008@gmail.com>                                               #
#################################################
if [ "$UID" != 0 ];then
echo access denied
exit  1
fi
chroot="/usr/local/chroot_vim"        # chroot环境路径
backup="/usr/local/configfile_back"  #  备份文件保存目录
path=(/usr/local/tomcat6/conf /usr/local/httpd/conf /usr/local/php/etc)
# 有权限修改配置文件的目录
 
USAGE="Usage: `basename $0` [OPTION]... {FileName} \n  -e Edit File \n  \
-r Restore File
\n"
 
if [ "$#" -eq 0 ] ;then
        
echo -e "${USAGE}"
        
exit 1
fi
get_char()
{
        
SAVEDSTTY=`stty -g`
        
stty -echo
        
stty raw
        
dd if=/dev/tty bs=1 count=1 2> /dev/null
        
stty -raw
        
stty echo
        
stty $SAVEDSTTY
}
 
answer()
{
        
ANSWER=""
        
while [[ "$ANSWER" != "y" ]] && [[  "$ANSWER" != "Y" ]]
        
do
        
echo -en "Do you want to "
        
echo -en "\\033[0;35m"
        
echo -en "$info"
        
echo -en "\\033[0;38m"
        
echo " this File? (y/n)"
        
read ANSWER
        
case $ANSWER in
              
(y|Y) return 0 ;;
              
(n|N) return 1 ;;
               *)
continue;
        
esac
        
done
}
select_diff()
{
        
N=""
        
read N
        
until [[ $N =~ ^[0-9]+$ ]]   # bash 3.0
        
do
        
echo -n "Please type one number:"
        
read N
        
done
}
 
while getopts e:rOPTION;
do
        
case "$OPTION" in
        
e) info="Edit"
          
F="$OPTARG";;
        
r) info="Restore"
          
F="$OPTARG";;
        \?)
echo -e $USEAGE
            
exit 1
        
esac
done
if [ -n "$F" ];then
for filedir in ${path[*]}
do
 
for f in `/usr/bin/find "$filedir" -type f -name  "$F"`
 
do
        
echo
        
echo -en "\\033[0;35m"
        
echo -en "$info"
        
echo -en "\\033[0;38m"
        
echo -en " File "
        
echo -en "\\033[0;36m"
        
echo "$f ..."
        
echo -en "\\033[0;38m"
        
answer
        
if [ "$?" == 0 ];then
          
filename="`echo "$f" |sed 's#/#\|#g'`"
          
if [ "$info" == "Restore" ];then
                
f1=(`/usr/bin/find "$backup"/"$filename".diff.* -xdev 2>/dev/null `)
                
echo -ne "Found "
                
echo -ne "\\033[0;35m"
                
echo -ne ${#f1[*]}
                
echo -ne "\\033[0;38m"
                
echo " Diff File"
                
if [ "${#f1[*]}" == 0 ];then
                  
echo "Skip..."
                
else
                  
i=${#f1[*]}
                  
for f4 in ${f1[*]}
                  
do
                        
echo -ne "`/bin/basename $f4` "
                        
echo `ls -l "$f4" |awk '{print $6, $7, $8}'`
                  
done
                  
echo -n "Please type one number to Restore [ ${#f1[*]}-1 ]:"
                  
select_diff
                  
echo -ne "Your Select "
                  
echo -ne "\\033[0;35m"
                  
echo -ne "$N"
                  
echo -ne "\\033[0;38m"
                  
echo " to Restore"
                  
pushd "`/usr/bin/dirname $f`" >/dev/null
                  
until [ $N -gt $i ]
                  
do
 
                        
i=$((i-1))
                        
echo "Process File ${f1[$i]}......"
                      
/usr/bin/patch  <${f1[$i]}
                        
if [ "$?" == 0 ];then
                      
/bin/rm ${f1[$i]}
                        
fi
                  
done
                  
popd >/dev/null 2>&1
                
fi
        
else
      
/bin/cp -a "$f" "$chroot"/tmp/"$filename"
      
/usr/sbin/chroot "$chroot" /bin/vim /tmp/"$filename"
      
/usr/bin/diff -Nu  "$chroot"/tmp/"$filename"  "$f"  \
                                >
"$chroot"/tmp/"$filename".diff
        
if [ "$?" != 0 ];then
                
echo -n "Backup Confilg File..."
                
f2="$backup"/"$filename".diff
                
f1=(`/usr/bin/find $f2.* -xdev 2>/dev/null `)
                
i=${#f1[*]}
                
i=$((i+1))
                
echo $i
              
/bin/mv "$chroot"/tmp/"$filename".diff "$f2".$i
                
echo done
                
echo -n "Saveing... Press any key to continue..."
              
/bin/cp -a "$chroot"/tmp/"$filename" "$f"
                
echo done
                
char=`get_char`
        
fi
        
fi
    
fi
 
done
done
fi
阅读内文 Tags: , ,

opera 9.5 中文字体设置

06月 25th, 2008 | 1 Comment | Posted in Linux < by Martian Guo >

先看一下默认安装情况下的显示效果

先简单设置一下
依次打开 “工具”->”首选项…”->”高级”->”字体”,将所有字体设置成 “宋体” 或者 “微软雅黑” (前提是你装了这两个字体,当然,其他中文字体也可以),看一下效果

除了菜单字体正常以外,页面显示字体还是一塌糊涂,google搜了一下,找到答案,要调整一下css,新建一个css样式表文件 user.css,输入以下内容

html,body,*{
    
font-family:"微软雅黑" !important;
    
font-size: 13px !important;
    
word-spacing: 0.3mm !important;
    
letter-spacing: 0.1mm !important;
}

依次打开 “工具”->”首选项…”->”高级”->”内容”->”样式选项…”->”我的样式表”,设置user.css 路径
重启 opera ,搞定。


以上情况只针对Linux环境,Windows下显示效果应该没有这么糟糕,不过 opera9.5 稳定性和渲染速度比以往要提高很多,甚至感觉比firefox3.0要快不少。

阅读内文

Cacti进阶应用一:汇总流量图-将数据合并后作图

06月 24th, 2008 | No Comments | Posted in 系统监控 < by Michael Field >

在使用Cacti方便快捷的建立监控图时,往往根据实际应用必须监控几台甚至上百台服务器的汇总流量图来观察该应用服务器组的总流量等指标。

这里我们就来介绍如何用cacit快速的建立汇总流量图,其他汇总图建立方法相同;
一、创建CDEF
1、点击cacti左边菜单中的graph Management下的CDEFs
2、点击CDEF‘s右边的add,增加一个名为Turn All Data into Bits项
3、在CDEF Items表格中点击add,输入如下图:依次创建以下三个Items;

4、完成后如下图:

CDEF item创建完成。

二、创建new graph
1、点击cacti左边菜单中的graph Management

2、在右边点击add出现如下图,直接选择create

3、在Graph Configuration表格中的title输入新图的名字;如IDC all interface traffic in(bits/sec)

4、表格最下的选项Vertical Label是纵轴的标识,这里我们填入Bits Per Second

5、完成后点击右下方的create,会在当前页面中间出现如下表格:

6、点击graph item 表格中的add按钮,输入信息如下图:

说明:因为我们会在最后汇总数据所以添加时除了data source和类型相互关联不可以选错,都可以任意搭配;
请多熟悉其中的关联性,建议多测试几次;
data source:数据来源就是你要汇总的流量之一;
color:选择颜色这里可以任意选择;
Graph Item Type:图形(我选择的是AREA区域类型,要累加的流量图请选择stack)
CDEF Function:这里一定要选择“Turn bytes into Bits”
点击create后,我们就创建了第一个流量图,会在页面上显示出来;继续添加其他流量图,方法同上;

7、汇总流量数据,并标识当前流量、平均流量、最大流量以及总流量数;
完成所有流量图的添加后,开始汇总流量,继续创建graph item,如下图所示:

这里切记选择我们上面所创建的CDEF‘s Functiion “Trun all data into bits”
并在text format栏中写入ALL Traffic_in
然后依次添加图上的标识栏见以下步骤:
当前流量,图释1:

平均流量,图释2:

最大流量,图释3:

总流量统计,图释4:

8、完成后如下图所示,表示操作成功,请根据以上方法继续添加traffic out流量

三、进阶
看了以上介绍大家可以试着用这个方法在Graph Templates中创建一个汇总流量的模板,这样以后增加汇总图是就更加高效和迅速啦。
因为之前看到相关的介绍只有英文的,特别在次给大家做个中文和图片介绍,希望能给各位带来帮助。

有问题请在此留言~

阅读内文

使用双网卡聚合提高服务器高可用性

06月 24th, 2008 | No Comments | Posted in Linux < by Michael Field >

许多应用情况下,在流量超过100M而网卡只是100M的,我们可以采取双网卡聚合的方式来提高服务器的流量(一般服务器都是双网卡的吧);而交换机方面无需特别配置;
具体配置如下:
1.增加虚拟网卡:

vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.2
NETMASK=255.255.255.0
ONBOOT=yes

2.修改原来物理网卡设置:

网卡1

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp

网卡2

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=dhcp

3.增加虚拟网卡模块

vi /etc/modprobe.conf

alias bond0 bonding
options bond0 miimon=100 mode=0

说明:miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。
mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份.
bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用
本案例中使用mode=0的配置来做负载均衡提高系统性能,增大并发带宽。

4.加入到开机自动运行

vi /etc/rc.d/rc.local

ifenslave bond0 eth0 eth1
route add -net 192.168.1.254 netmask 255.255.255.0 bond0

重启系统后能看到3块网卡,其中bond0的流量是eth0+eth1的总和。

查看bond0虚拟网卡

cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.1.2 (January 20, 2007)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:1e:4d:24:ec:49

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:1e:4d:24:ed:4b

5.试验验证

用外部同一网段的一台机器做ping试验,双网卡机器上手工拔掉其中任意一条网络线(或者使用ifup eth0&&ifdown eth1),ping机器的终端应该没有中断信息,或者有一个”timeout”后很快恢复,则证明试验成功。

阅读内文

物价和发达国家接轨,收入向第三世界看齐

06月 23rd, 2008 | 5 Comments | Posted in 生活随笔 < by Johnny Woo >

ai….

阅读内文

用awk过滤查看netstat 连接数

06月 23rd, 2008 | 3 Comments | Posted in shell < by Martian Guo >
netstat -an | awk '/^tcp/{ A[$NF]++} END{ for (a in A) print a, A[a]}'
netstat -an |awk '/LISTEN/{next};/^tcp/{s=split($5, N,":"); \
A[N[s-1]]++} END{ for (a in A) print a, A[a]}
'
阅读内文 Tags: ,

Bash shell 中模拟多线程

06月 23rd, 2008 | No Comments | Posted in shell < by Martian Guo >
#!/bin/bash
 
SEND_THREAD_NUM=13
tmp_fifofile="/tmp/$$.fifo"                  # 脚本运行的当前进程ID号作为文件名
mkfifo "$tmp_fifofile"                          # 新建一个随机fifo管道文件
exec 6<>"$tmp_fifofile"                      # 定义文件描述符6指向这个fifo管道文件
rm $tmp_fifofile
for ((i=0;i<$SEND_THREAD_NUM;i++));do
        
echo                                          # for循环 往 fifo管道文件中写入13个空行
done >&6
 
for i in `seq 100`;do                            # 100 次 for 循环 开始
        
read -u6                                    # 从文件描述符6中读取行(实际指向fifo管道)
 
        
{
                
echo $i                         # 打印 i
                
sleep 3                         # 暂停3秒
                
echo >&6                    # 再次往fifo管道文件中写入一个空行。
        
} &
 
# {} 这部分语句被放入后台作为一个子进程执行,所以不必每次等待3秒后执行
#下一个,这部分的echo $i几乎是同时完成的,当fifo中13个空行读完后 for循环
# 继续等待 read 中读取fifo数据,当后台的13个子进程等待3秒后,按次序
# 排队往fifo输入空行,这样fifo中又有了数据,for语句继续执行
 
        
pid=$!                                   #打印最后一个进入后台的子进程id               
      
echo $pid
 
done
wait
exec 6>&-                                    #删除文件描述符6
 
 
exit 0
阅读内文

VBS-配置ip&DNS

06月 23rd, 2008 | No Comments | Posted in VBS < by John >
strComputer = "." '本机
Set objWMIService = GetObject("winmgmts:
\\" &amp; strComputer &amp; "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
strIPAddress=Array("192.168.1.214")     
'设置ip地址,多个用,分隔
strSubnetMask=Array("255.255.255.0")  '子网掩码
strGateway=Array("192.168.1.72")         
'网关
strDNS = Array("192.168.1.72","202.96.209.133")    'DNS,多个用,分隔
strGatewaymetric = Array(1)  
'跃点数
For Each objNetAdapter in colNetAdapters
    
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)   '  配置ip,子网掩码
     errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric) 
'配置网关
    
errDNS = objNetAdapter.SetDNSServerSearchOrder(strDNS)   ' 配置dns
Next
WScrip