自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Netfilter,iptables/OpenVPN/TCP guard:-(

我不会编程,但也不是一点都不会,我稍微会一些 :-)

原创 Linux内核中文邮件列表的一个讨论

问题: 听了太多次大师的训诫:UNIX是如何如何的简约,如何如何的精致。以至于,几乎都快忘了这个通俗的道理:任何事物都会有它的生命期。我想,UNIX类操作系统应该也是一样。一个事物的腐烂,应该是从其最脆弱的地方开始吧?!那么,现代UNIX都有什么缺点呢?单从内核技术角度上有哪些呢?我想自己没有体会...

2010-02-09 22:37:00 4643 2

原创 对问题“为什么执行softirq时不能被抢占?”的解答

1.首先,在irq_exit中调用do_softirq前已经退掉了preempt_count中的HARDIRQ_MASK,因此softirq此时如果不在preempt_count加上SOFTIRQ_MASK位还是会被抢占的,我们看到softirq是在硬件中断后执行的,因此如果硬件中断是任意上下文的...

2010-02-09 22:36:00 3933 0

原创 对一个问题的解答

今天周日,陪老婆烫完头发回到家里,仍然不忘打开邮箱,一位朋友问了一个问题,说想用sysfs实现cdev,我觉得倒是没有什么不可,因为sysfs毕竟是一个内核和用户空间通信的接口,是个接口就可以被使用,我之所以敢打这个保票就是因为linux内核只提供机制而不提供任何策略,也就是说,只要你知道一个机制...

2010-02-09 22:36:00 2676 0

原创 linux共享内存的设计

posix的共享内存是通过用户空间挂在的tmpfs文件系统实现的,而system V的共享内存是由内核本身的tmpfs实现的,这里可以看出,二者其实是用同一种机制实现的,不同的是用户接口不同,posix旨在提供一套统一的可用接口而不是实现,因此posix的上层根本就不会在意其机制是内核实现的还是用...

2010-02-09 22:35:00 5948 0

原创 NULL指针引起的一个linux内核漏洞

NULL指针一般都是应用于有效性检测的,其实这里面有一个约定俗成的规则,就是说无效指针并不一定是 NULL,只是为了简单起见,规则约定只要指针无效了就将之设置为NULL,结果就是NULL这个指针被用来检测指针有效性,于是它就不能用作其它了,而实际上NULL就是0,代表了数值编号为0的一个内存地址,...

2010-02-09 22:35:00 3778 3

原创 linux内核的反复--一切都是过程

1. ZERO_PAGE 2.6.24内核中剔除了ZERO_PAGE这个鸡肋,然而近期又准备添加近来,这样做的原因还是在于当初它为何被当成了鸡肋,当成鸡肋的原因就是当zero页面加入反向映射的时候会更新其page结构体的引用计数,从而造成了固定cacheline的冲刷,仅仅这一点就将zero页面...

2010-02-09 22:35:00 4520 0

原创 TCP校验值的伪头以及校验值计算

tcp层的校验值难道还需要ip层的元数据也就是ip头吗?如果一切都是理想的显然不需要,因为这违背了分层隔离的原则,下层一定不能依赖上层,但是上层可以访问下层,还好tcp使用ip信息正是这一点。按照封包原则,封装到TCP层的时候,ip信息还没有封装上去,但是校验值却需要马上进行计算,所以必须手工构造...

2010-02-09 22:34:00 6203 5

原创 内核中实现负载均衡

在《实现一个简单的反向NAT并引申一个web请求内容过滤》中提到了一个内核nat的实现方式,如果nat可以用iptables实现而没有必要修改内核的话,那么负载均衡将是netfilter所不能做到的,虽然netfilter的灵活性足以让人们对它进行简单的修改就可以实现,但是修改内核(不使用netf...

2010-02-09 22:34:00 2442 0

原创 TCP的syn-cookie以及SHA1摘要算法的实现

linux内核中实现了syn-cookie,可以有效阻止syn-flood攻击,syn-cookie理论上很简单,就是在服务器接收到客户端的syn包时并不分配任何内存空间,而是巧妙的选择服务器的isn值传给客户端,isn本地也并不保存(本地不保存任何东西),然后客户端发来synack的ack确认包...

2010-02-09 22:34:00 4738 1

原创 再谈linux中为何没有网卡设备文件--深层次原因

这个问题其实没有什么意思,知道了问题的答案能表明一个人技术水平有多高吗?不能!这个问题有答案以及有意义吗?答案都是没有!那我还为何一直对这个问题死死揪住不放?这类问题可以提高一个人的素质以及了解一段关于网络和unix的历史,正是因为这些都很有趣,才如此值得关注。 在unix中,一切io相关的实体...

2010-02-09 22:33:00 9347 7

原创 实现一个简单的反向NAT并引申一个web请求内容过滤

如果不懂NAT怎么办,其实NAT基本谁都懂,关键是如果不懂配置怎么办,不精通iptables怎么办?幸亏我们玩的是linux内核,我们完全可以自己写一个简单的NAT,通过一个简单的思想就能实现一个简单的NAT,通过扩展这个思想,我们还能实现内容过滤呢。nat简单的说就是地址转换,通过将源地址转换或...

2010-02-09 22:33:00 3345 1

原创 为何UNIX/Linux中会有suid程序

linux的单点验证我已经说了不止一次了,linux的整体设计是机制和策略相分离的,单点验证显然是策略方面的东西,因此验证本身并没有内核的介入,那么什么是验证本身呢?其实就是诸如最简单的的密码验证和稍微复杂一点的指纹,声音或者瞳孔验证,不管怎么说这些都是策略,内核不应该介入,因此内核当中你无法知道...

2010-02-09 22:32:00 3845 0

原创 ptrace接口和execve同步导致的一个内核漏洞

linux中是不可以依附别的进程的,更不可能创建远程线程,然而一种不太正规的方式却可以做到这一点,这就是ptrace接口,ptrace可以依附任何用户进程,用特殊的参数甚至可以更改任何进程的寄存器和内存映射,这个功力和创建远程线程不相上下,甚至比其更加灵活,如果理解了elf映像在内存的布局便可以通...

2010-02-09 22:32:00 2561 0

原创 木马程序的信息存储位置

将信息置于目前不使用的扩展字段或者在不和当前信息冲突的前提下将信息“挤”进当前字段,正如current->flags可以重用一样,比如,如果标准内核中已经定义个若干flag标志,比如running,sleeping等,我们就可以使用还没有使用的标志,要知道如果flags字段是一个32位的整型...

2010-02-09 22:31:00 1898 0

原创 关于linux栈的一个深层次的问题

内存不用白不用,何必在一开始就限制栈的大小,linux的机制是尽量多尽量紧凑的使用虚拟内存,原则就是你现在不用我就用,没有预留的概念,当然你可以通过系统调用实现预留,就像glibc的堆管理那样,这里所说的完全是针对于操作系统内核的,用户空间程序完全可以向操作系统通过brk或者mmap实现用户空间的...

2010-02-09 22:31:00 3940 0

原创 两个linux内核rootkit--导语

曾经说过,linux由于其内秉的文件删除机制导致一旦发现有恶意代码很容易被清除掉,即使发现内核本身被感染也是很容易被清除掉,但是这并不能表示linux就是绝对安全的,这仅仅说明linux的补救措施很有效,因此如果想黑掉linux系统,那么首要的不是想如何让用户删不掉恶意程序,而是尽可能严谨的隐藏恶...

2010-02-09 22:30:00 2756 0

原创 两个linux内核rootkit--之一:enyelkm

首先,这个rootkit其实是一个内核木马,和大多数木马不同的是,恶意木马所在的机器是客户端而不是服务器,而黑客所在的机器是服务器,这样做的好处在于可以躲避防火墙,一般的防火墙对外出的包审查不是那么严格而对进入的包审查严格,如果恶意程序是服务器,那么防火墙很可能会拦截连入服务器的黑客客户端进程导致...

2010-02-09 22:30:00 5476 0

原创 两个linux内核rootkit--之二:adore-ng

这个rootkit使用的技术不比前一个,它不是拦截系统调用,而是拦截具体文件系统的回调函数,本身文件系统的回调函数就是动态注册的,很是不确定,那么反黑软件自然就不能简单下结论说这个函数被黑掉了,因此这个rootkit看来比前一个略胜一筹,自然的,既然是内核模块,那么模块隐藏也是一个重要的内容,以下...

2010-02-09 22:30:00 5475 2

原创 从linux的文件删除机制解释为何linux的病毒那么少

很多人曾经说过,linux下的病毒没有windows多的原因在于linux使用的人不多,人们不屑于开发linux下的病毒,看到这个言论我笑了,想必很多人都有过explorer被注入的经历吧,explorer被替换然后怎么也删除不掉,或者一个system32下的一个顽固文件怎么也删除不掉,更不幸的是...

2010-02-09 22:29:00 4342 3

原创 linux的正交性设计使之完全是windows的超集

linux是windows的超集的意思是说linux完全可以模拟成windows的系统界面,这个怎么理解呢?众所周知,linux的文件系统和windows的有着很大的区别,linux是以/为根的树形结构,而windows的却是分为好几个盘符,不过与其说这是它们的区别倒不如说windows的磁盘布局...

2010-02-09 22:29:00 2316 0

原创 linux内核中的服务器模式

广义上讲,内核本身就是一个服务器,为所有的用户模式进程提供服务,但是狭义上讲只有在真的有请求的时候内核采取的对策才叫做服务,比如注册-执行模式下的time以及hrtimer等等,用户空间的程序或者内核空间的执行绪可以随意注册一个timer之后就不管了,timer到期以后内核会执行之,这就相当于ti...

2010-02-09 22:29:00 1749 0

原创 linux底层内存管理--内核空间的伙伴系统

linux内核的伙伴算法最大限度的减少了内存的碎片,其实应该说成是尽自己最大的努力减少了内存 的碎片。其思想就是将物理内存分成10个链表,每一个链表的元素代表一系列的连续页面,连续页面的数量随链表的不同而不同,linux中有10个这样的链 表,按照2的从0到9次幂的连续页面数量组成,比如链表0中保...

2010-02-09 22:28:00 3271 1

原创 linux底层内存管理--用户空间的分级分配系统以及懒惰的含义

大 内存如果从heap中分配,第一它如果释放了可能不会立即归还操作系统,第二它如果不释放,由于heap中小内存的分配和释放会造成很多碎片,再有大内存 分配需求时可能会失败,另外heap是要求很严格的一个虚拟内存区间,而且算法维护开销很大,最好让它和谐一些,就是说不要让内存分配的差别过于大,一会 很...

2010-02-09 22:28:00 2939 0

原创 关于linux文件系统的一些感想

一个常规文件一般位于一个块设备上,而块设备也是一个文件,只不过它是一个特殊文件罢了,unix的著名的一切皆文件的原则使得用户拥有了一个一致的操作视图,一切皆文件的设计初衷我想是这样的:在操作系统刚开始被开发出来以后,操作系统本身代表的就是机器的抽象,人们使用机器的目的是为了得到信息,包括已经存在的...

2010-02-09 22:28:00 3847 3

原创 读《linux开发工具箱》的一点感想

今天周六,又是清明节,我起床很晚,原因不是我懒,是因为我在被窝里看书了,看的是《linux开发工具箱》,书是老外写的,被翻译成了中文,可以说翻译的很差劲,很多地方感觉不通顺,于是我吭吭哧哧半天过不去一句话,好在我的linux基础比较好,读此书不是为了获取什么知识,而是为了得到一种截然不同的表达或者...

2010-02-09 22:27:00 2599 0

原创 关于direct io

direct io是一种不用内核缓存的io,它可以做到直接将用户空间的内存直接写入磁盘或者将磁盘数据直接读到用户空间的缓冲区,这种策略就是不用内核的缓存而使用用户自己设计的缓存,这一般在数据库系统中用到,初用linux的人在调用free命令的时候都会大吃一惊,为何文件cache占用了那么多的内存,...

2010-02-09 22:27:00 3280 0

原创 linux线程的退出--附:一个变量,两个精彩

linux的2.6内核更好的实现了内核级别的线程,使得线程的语义更加符合posix的约定,总的来说,线程会在两种地方退出,第一个是正常退出,第二种是异常退出,正常退出的情况下,比如在一个进程的一个线程调用exec的时候,那么所有的别的线程都会退出,另外在一个线程调用exit库函数的时候或者调用gr...

2010-02-09 22:27:00 4647 2

原创 Linux中的各种锁

自从各种任务不再顺序执行的那一天起,自从多道程序设计开始上线的那天,进程就戴上了脚镣。古老的操作系统的变体当然也接过了父亲的狼牙棒,信号量杯证明是一种有效的互斥方式,可是它却存在很多弊端。其实unix不喜欢混乱,因此unix创造了进程这个可被操纵系统内核强制管理的执行绪概念,unix几乎给了所有可...

2010-02-09 22:26:00 5708 1

原创 浅谈Linux的设备文件

linux下的文件分为常规文件和设备文件,常规文件一定在某一个设备上被存储,不论这个设备是真实的还是虚拟的,这里的设备是linux中vfs层中的 设备,也就是前面所说的设备文件中的设备,vfs层的设备分为字符设备和块设备,字符设备可以类比为一个fifo的队列,无论读还是写都必须顺序进行,而 块设备...

2010-02-09 22:26:00 4616 1

原创 2.6.21开始取消了超线程的dependent_sleeper函数

在2.6.21以前的内核中有一个函数dependent_sleeper,该函数的意义就是,在schedule中,如果当前cpu的运行队列的进程数量不为0,那么还是不能简单的从这个队列中选择一个最高优先级的进程,而是要看看这个cpu是否拥有一个逻辑兄弟cpu,然后抉择,这种情况在intel的超线程中...

2010-02-09 22:26:00 2417 0

原创 Linux的内存映像导出接口—kcore

/proc/kcore文件提供了整个机器的内存映像,和vmcore不同的是,它提供了一个运行时的内存映像,为此和vmcore一样,内核提供了一个类似的但是稍显简单的kcore_list结构体,我们比较一下它们: struct kcore_list {          struct kc...

2010-02-09 22:25:00 4814 2

原创 linux中的睡眠

在linux的内核中,有很多睡眠相关的函数,比如sleep_on,当然也有wake_up,睡眠的意义就是不能再运行了,那么睡眠总要有个地方啊,我们睡眠都要有个床,按照人性化设计出来的linux内核也应该有个睡眠用的床,这是对的,但是,睡眠一定要在床上吗?非也! 就好像现代的白领们,习惯就很不好...

2010-02-09 22:25:00 2963 0

原创 linux的多用户

linux继承了unix的很大一部分东西,自设计开始就是多用户的,那么这个多用户到底体现在什么地方呢?多用户和linux操作系统的设计又有何关联呢? 首先看看原始的多用户,所谓多用户就是有很多人公用一台机器,这在计算机开始的年代是很必要的,那个时候机器资源紧缺。于是一种对于计算机的新的使用方式开...

2010-02-09 22:24:00 4950 1

原创 linux的多任务

写过一篇关于linux多用户的文章,在提到多用户的时候,多任务的概念也是有必要提出的,实际上,多用户必然意味着多任务,每个用户起码一个任务。这么看来。多任务是比多用户更加基本的一个概念和特性了。 在计算机的远古时代,人们用作业来表示需要计算机代劳的任务,随之有了批处理系统,在批处理系统中,用户和...

2010-02-09 22:24:00 3417 0

原创 linux用户空间和内核exit的语义--linux没有线程

如果你在程序中调用了exit,那么很显然你的程序会退出,可是至于为何会退出那就是库的事情了,我为什么说只是库的事情而不关linux内核的事情呢?那是因为linux内核根本不管用户空间的行为策略。库的策略是什么?很简单的退出当前进程吗?如果是多线程的程序呢?多线程的程序它的行为又是什么呢?在我们探究...

2010-02-09 22:24:00 3572 0

原创 xinetd超级服务器进程

xinetd的实质和inetd差不多,只不过增加了访问控制功能,更加安全了。实际上xinetd就是一个超级服务器,是个把门的守护者,在linux 丰富的网络应用中实现单点验证,它继承了unix的传统工作方式,只提供机制,而将策略留给用户,正如unix的一个很重要的特性所说,一切都是可以配置 的。它...

2010-02-09 22:23:00 2806 0

原创 linux的自动登录--理解linux的方式

今天在一个邮件列表中有朋友问在linux下如何做到自动登录,就是不用输入用户名和密码,我的回答是在桌面上进行设置,然后那位朋友就学会了并且很高兴,我敢肯定他是windows的下的老用户... 仅仅知道如何设置自动登录实在不够,自动登录不是linux的风格,我敢肯定如果不是在拥有桌面的linux下...

2010-02-09 22:23:00 3072 0

原创 Linux守护进程--依然是进程

在linux中,服务是一种特殊的进程,可以说它和用户无关,它的作用不是完成用户任务,而是进行一些管理类的操作或者通用的服务类操作,实际上linux的服务就是一个进程,也仅仅是一个进程。 在linux中,服务叫做守护进程,和windows一样,它也执行和具体用户任务无关的支撑性质的任务,可是不同于...

2010-02-09 22:23:00 2514 0

原创 linux中exec操作对线程组的影响

在linux的多线程程序中,如果一个线程调用了exec会怎样?是影响整个进程还是仅仅影响单个线程?实际上是影响整个进程,因为exec就是替换进程 地址空间的,而线程是共享进程地址空间的,从本质上讲,线程是没有地址空间这个概念的,只不过在linux中,其独特的线程实现方式使得进程和线程的概念 更加模...

2010-02-09 22:22:00 5082 0

原创 splice和sendfile

在linux2.6.17之后,内核提供了一个splice/tee系统调用,这可以让用户直接操作内核缓冲区了,这个特性特别适合做网络代理,本文简短的说明一下,快下班了。 在linux2.6.17之后,内核提供了一个splice/tee系统调用,这可以让用户直接操作内核缓冲区了,splice系统调...

2010-02-09 22:22:00 3934 0

提示
确定要删除当前文章?
取消 删除