之前看了《新爆内核高危漏洞sock_sendpage的利用分析的讨论
》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自我的空间
)。
有什么不足之处还望多多指教~
内核的BUG
这个BUG首先得从sendfile系统调用说起。
考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取
的数据send到socket中。这样,每次读写我们都需要两次系统调用,并且数据会被从内核拷贝到用户空间(read),再从用户空间拷贝到内核
(send)。
而sendfile就将整个发送过程封装在一个系统调用中,避免了多次系统调用,避免了数据在内核空间和用户空间之间的大量拷贝。
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
虽然这个系统调用接收in和out两个fd,但是有所限制,in只能是普通文件,out只能是socket(这个限制不知道后来的内核版本有没有放宽)。
sendfile系统调用在内核里面是怎么实现的呢?这个还是比较复杂,它在内核里面做了原来要在用户态做的事情:创建一个pipe对象作buffer用、从in_fd中读数据到pipe中、将pipe中的数据写到out_fd、循环直到 ......
linux系统可以把一些常用的命令做一个简短的别名
alias tomcat="cd /usr/local/tomcat",但是退出系统后这些别名就失效了,如何把别名写入配置文件:
首先找到登陆的用户的文件夹,比如ROOT登陆的时候,在/目录下进入ROOT目录编辑.bash_profile文件
比如可以这样编辑(alias 这两行是加上去的),当然,系统的环境变量也是可以写在这里的
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
alias tomcat="cd /usr/local/tomcat"
alias myip="/sbin/ifconfig | grep -a 'inet addr' | sed -e '/127\\.0\\.0\\.1/d;s/.*inet addr:\\([0-9\\.]\\+\\).*/\\1/'"
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
在编辑.bash_profile文件后立即生效的命令
source .bash_profile
......
from:
http://hi.baidu.com/godogood/blog/item/ab01875c1d1d2c45fbf2c033.html
我们就来安装compiz fusion:
1、得到密匙
代码:
sudo wget http://download.tuxfamily.org/3v1deb/DD800CD9.gpg -O- | sudo apt-key add -
2、添加源:
代码:
deb http://download.tuxfamily.org/3v1deb feisty eyecandy
deb-src http://download.tuxfamily.org/3v1deb feisty eyecandy
3、更新:
代码:
sudo apt-get update
sudo apt-get dist-upgrade
4、安装Compiz及Compiz fusion
代码:
sudo apt-get install compiz compiz-gnome
sudo apt-get install compizconfig-settings-manager
sudo apt-get install compiz-fusion-*
5、运行Compiz Fusion
现在你就可以享受Fusion带来的惊喜啦,同时你也可以关闭Compiz及Beryl啦,在“系统-首选项-会话”新建一个新的会话如下:
代码:
compiz --replace
6、Compiz 使用emerald 主题:
代码:
emerald --replace
这样,系统就可以在开机后自动加载Compiz Fusion啦。
......
一、什么是源码包软件;
顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件最常见;在国内源可见的软件几乎绝迹;大多开源软件都是国外出品;在国内较为出名的开源软件有fcitx;lumaqq;Lumaqq及scim等;
但软件的源代码可见并不等于软件是开源的,我们还要以软件的许可为准;比如有些软件是源码可见的,但他约定用户只能按他约定的内容来修改;比如vbb论坛程序;所以一个软件是否是开源软件,得具备两个条件;一是源代码可见;二是要有宽松的许可证书,比如GPL证书等;
在GNU Linux或BSD社区中,开发人员在放出软件的二进制软件包的同时,也会为我们提供源代码软件包;
二、源代码有何用?
一
个软件的如果有源码,是任何人都能看到他是怎么开发而来的,就像一个瓶子,比如瓶子制作的模具是什么;需要什么材料;具体的用途以及瓶子的详细说明书等
等。软件的开放源码就是类似,开发者在给我们软件的同时,也会告诉我们软件是怎么开发出来的;只要我们的水平足够的高,所有的代码都在那里,我们就可以修
改和定制软件,以适合我们的需要;如果Windows
开放源代码,并以GPL发布,一样是有人能造出来N多的Windows
发行版;遗憾的是Windows并不是开源 ......
1、cscope
2、diffstat
3、git-core
4、git-email
5、gitk
6、indent
7、kernel-docs
8、kernel-source
9、kernel-syms
10、patchutils
11、patterns-opensuse-devel_kernel
12、quit
有空的话逐一了解一下,貌似挺有用的。 ......
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是\"父子\"关系.
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
--------------------------------------------------------------------------------
在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后 ......