标签 Linux 下的文章

Linux内核中的PAE意义

经常看内核名字的时候会发现带上PAE字样,查了一下,原来是:Physical Address Extensions

操作系统在32bit x86平台上最大寻址空间只有4GB,如果要使用大于4GB的内存,就必须使用Intel的PAE(物理地址扩展)模式。在Windows NT平台实现PAE只需要对boot.ini加上/pae即可。而对于RHEL5,缺省安装模式下是不允许检测超过4GB内存,所以我们需要在内核安装完 毕后再安装kernel-PAE套件。

如果是装的i386系统并且内存大于2G,装的kernel上就会带上PAE的字样,64位的系统就不会这样。

今天装驱动的时候需要装kernel-devel,直接yum install kernel-devel后还是不行,看了一下内核是带PAE的,这时候要安装kernel-PAE-devel。

搞定。

via

apt-get限速

先安装wondershaper:

# apt-get install wondershaper

限制上、下行带宽(单位Kb):

# wondershaper eth0 8192 8192

取消限制:

# wondershaper clear eth0

注意这里控制流量的单位是Kb(Kilobit),而不是KB(Kilobyte)。如上面这个例子中的8192就表示限制速度为1024KB也就是1MB。

如果有兴趣,可以vi /usr/sbin/wondershaper 看看这个shell用的程序是tc。

Linux的RUID EUID SUID

看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解。今天好好区分了一下这几个概念并总结如下。说白了这几个UID引出都是为了系统的权限管理。

下面分别用RUID, EUID,SUID来表示实际用户ID,有效用户ID,设置用户ID。另外用户ID是个整型数,为了说明方便真接使用了用户名来代表不同的UID。先解释一下这几个ID的作用:

RUID, 用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID.

EUID, 用于系统决定用户对系统资源的访问权限,通常情况下等于RUID。

SUID,用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件而不是跟用户绑定。

说明SUID的时候很多书都简略的提了一下passwd这个程序,下面就拿这个例子来分析。我们知道linux系统的密码都存在了/etc/shadow这个文件里。这个文件是如此的重要,在做任何修改之前最好先备份一下。查看/etc/shadow文件的属性如下:

[root@localhost ~]# ll /etc/shadow

-r-------- 1 root root 1144 Jul 20 22:33 /etc/shadow

从上可以看出/etc/shadow文件是一个属于root用户及root组的文件,并且只有EUID为root的用户具有读的权限,其它所有EUID都没有任何权限。当你在steve用户(EUID此时也为steve)的shell下试图用vim打开这个文件时会提示权限不允许。至于连root用户也只有读的权限我猜是为了不鼓励root用户使用vim类的编辑器去直接修改它,而要采用passwd命令来修改这个文件。如果你非要直接修改它,那么你可以使用chmod命令修改为属性为root可写,然后就可以修改了。

用过UNIX系统的人都知道,任何一个用户都可以使用passwd这个命令来得新设定自己的密码。但从上面已经知道,非root用记是无法读这个文件的,那么普通用户是如何做到修改这个文件的呢?我们知道passwd这个命令实际执行的程序是/usr/bin/passwd, 查看这个文件属性如下:

-r-s--x--x 1 root root 21944 Feb 12  2006 /usr/bin/passwd;

对应文件存取标志的s位就是通常说的SUID位,另外可以看到所有用户都有执行的这个程序权力。当steve用户执行passwd命令的时候。Shell会fork出一个子进程,此时进程的EUID还是steve,然后exec程序/usr/bin/passwd。exec会根据/usr/bin/passwd的SUID位会把进程的EUID设成root,   此时这个进程都获得了root权限, 得到了读写/etc/shadow文件的权限, 从而steve用户可完成密码的修改。 exec退出后会恢复steve用户的EUID为steve.这样就不会使steve用户一直拥有root权限。

我们可以测试一下,用root用户把/usr/bin/passwd的SUID位去掉,如下:

[root@localhost ~]# ll /usr/bin/passwd

-r-s--x--x 1 root root 21944 Feb 12  2006 /usr/bin/passwd

[root@localhost ~]# chmod u-s /usr/bin/passwd

[root@localhost ~]# ll /usr/bin/passwd

-r-x--x--x 1 root root 21944 Feb 12  2006 /usr/bin/passwd

然后steve用户用命令passwd去更新密码会提示如下错误:

[steve@localhost ~]$ passwd

Changing password for user steve.

Changing password for steve

(current) UNIX password:

passwd: Authentication token manipulation error

[steve@localhost ~]$

这就是因为/usr/bin/passwd程序的SUID去掉后,steve用户虽然可以执行该程序,但因为/usr/bin/passwd/的SUID没有设置,这样exec后进程的EUID仍为steve的原因。

也许有人会发现root用户却仍可以使用该用命修改密码,那是因为root用户本身的EUID时就是root (也有可能只要发现是RUID是root就不检查EUID了,直接可读写,root就是老大嘛), 可以读取密码文件。

另外也许有人会发现普通的文件文件普通的文本文件会也可以设置SUID位, 但这是没有意义的,因为文本文件没有地方执行seteuid()的系统调用来改变当用用户的EUID。

最后,这里的对用户ID的规则同样也适用了组ID。

via http://blog.csdn.net/guosha/archive/2008/07/20/2679334.aspx

Linux下打开gz压缩的文档

Re: Howto auto unpack/read "README.Debian.gz" ?

Martin Kacerovsky
Sat, 01 Mar 2003 23:59:48 -0800

Hi,
        
On Sun, Mar 02, 2003 at 06:41:59AM +0000, Joao Pedro Clemente wrote:
> 
> AS I've seen some of these files after installing some packages, 
> as since they are not unpacked by apt-get, I am wondering 
> if there isn't a "smart" way of reading this instead of 
> unpacking first...
> 
> I wonder if, for instance, "less" could automatically unpack it for
> showing it (Is that what that "mime-handler" stuff that appears apter
> apt-getting less is for?)
> 
> Or it's supose to have such files in our disk untill we eventually 
> need them, and then unpack them forever?
> 
> Thanks

See : man zless, zcat, zmore, zgrep, ...
(These are equivalents to the "standard" utilties as less, cat, ...,
 but work with compressed files)

So to put it short: 'zless README.Debian.gz' is what you want

Bye

-- 
+----------------------------------+
| Martin Kacerovsky                |
| e-mail : wizard(AT)matfyz(DOT)cz |
| home   : http://wizard.matfyz.cz |
+----------------------------------+

Ubuntu开机启动到字符界面

默认安装的Ubuntu Linux会直接到图形界面。不过很多时候我并不需要在图形界面上做事,字符界面的命令行就足够了。想起在RedHat里可以通过修改/etc /inittab来把默认运行等级(run level)从5改到3来实现,不幸的是Ubuntu中并没有这个文件。刚刚在Google上找了一遍,发现Ubuntu也是可以兼容inittab的, 不过需要自己手工建一个罢了。

Ubuntu安装后默认的run level为2,这个可以用runlevel命令查看。因为runlevel=2,所以在启动过程中自动执行/etc/rc2.d/目录下的以S开头的脚 本。Ubuntu之所以能直接启动到图形界面,是由于运行gdm所致。所以,只要把gdm的启动脚本禁用就可以了,方法就是把文件名的第一个字母S改成 K:

 
cd /etc/rc2.d
sudo mv S30gdm K30gdm

这是一种方法,而且非常简单。但我更习惯于设定一个新的run level,让那个新的run level作为启动到字符界面。这样便于管理。Ubuntu没有/etc/inittab文件,只好新建一个了,内容只有一行:

 
id:3:initdefault:

这样下次启动时就会自动运行/etc/rc3.d/目录下的脚本,而不再是/etc/rc2.d/中的。所以接下来要进入到/etc/rc3.d/中,看看gdm的启动脚本文件名:

 
ls -l *gdm

如果是以S打头的,把文件名改成以K打头的就行了。