﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-agapple-随笔分类-linux</title><link>http://www.blogjava.net/agapple/category/35422.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 03 Nov 2008 21:54:34 GMT</lastBuildDate><pubDate>Mon, 03 Nov 2008 21:54:34 GMT</pubDate><ttl>60</ttl><item><title>vi 命令小记</title><link>http://www.blogjava.net/agapple/archive/2008/11/03/238423.html</link><dc:creator>agapple</dc:creator><author>agapple</author><pubDate>Mon, 03 Nov 2008 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/agapple/archive/2008/11/03/238423.html</guid><wfw:comment>http://www.blogjava.net/agapple/comments/238423.html</wfw:comment><comments>http://www.blogjava.net/agapple/archive/2008/11/03/238423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/agapple/comments/commentRss/238423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/agapple/services/trackbacks/238423.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/agapple/archive/2008/11/03/238423.html'>阅读全文</a><img src ="http://www.blogjava.net/agapple/aggbug/238423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/agapple/" target="_blank">agapple</a> 2008-11-03 20:13 <a href="http://www.blogjava.net/agapple/archive/2008/11/03/238423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)suid和sgid介绍</title><link>http://www.blogjava.net/agapple/archive/2008/10/31/237835.html</link><dc:creator>agapple</dc:creator><author>agapple</author><pubDate>Fri, 31 Oct 2008 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/agapple/archive/2008/10/31/237835.html</guid><wfw:comment>http://www.blogjava.net/agapple/comments/237835.html</wfw:comment><comments>http://www.blogjava.net/agapple/archive/2008/10/31/237835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/agapple/comments/commentRss/237835.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/agapple/services/trackbacks/237835.html</trackback:ping><description><![CDATA[由于用户在UNIX下经常会遇到SUID、SGID的概念，而且SUID和SGID涉及到系统安全，所以用户也比较关心这个问题。关于 SUID、SGID的问题也经常有人提问，但回答的人一般答得不够详细，加上曾经回答过两个网友的问题，还查了一些资料，决定整理成本文，以供大家参考。 限于本人的水平问题，文章中如果有不当之处，请广大网友指正。
<p>　　一、UNIX下关于文件权限的表示方法和解析</p>
<p>　　SUID 是 Set User ID, SGID 是 Set Group ID的意思。</p>
<p>　　UNIX下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的：-rwxr-xr-x 。下面解析一下格式所表示的意思。这种表示方法一共有十位：</p>
<p>　　9 8 7 6 5 4 3 2 1 0</p>
<p>　　- r w x r - x r - x</p>
<p>　　第9位表示文件类型,可以为p、d、l、s、c、b和-：</p>
<p>　　p表示命名管道文件</p>
<p>　　d表示目录文件</p>
<p>　　l表示符号连接文件</p>
<p>　　-表示普通文件</p>
<p>　　s表示socket文件</p>
<p>　　c表示字符设备文件</p>
<p>　　b表示块设备文件</p>
<p>　　第8-6位、5-3位、2-0位分别表示文件所有者的权限，同组用户的权限，其他用户的权限，其形式为rwx：</p>
<p>　　r表示可读，可以读出文件的内容</p>
<p>　　w表示可写，可以修改文件的内容</p>
<p>　　x表示可执行，可运行这个程序</p>
<p>　　没有权限的位置用-表示</p>
<p>　　例子：</p>
<p>　　ls -l myfile显示为：</p>
<p>　　<del>rwxr-x</del>-- 1 foo staff 7734 Apr 05 17:07 myfile</p>
<p>　　表示文件myfile是普通文件，文件的所有者是foo用户，而foo用户属于staff组，文件只有1个硬连接，长度是7734个字节，最后修改时间4月5日17:07。</p>
<p>　　所有者foo对文件有读写执行权限，staff组的成员对文件有读和执行权限，其他的用户对这个文件没有权限。</p>
<p>　　如果一个文件被设置了SUID或SGID位，会分别表现在所有者或同组用户的权限的可执行位上。例如：</p>
<p>　　1、-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置</p>
<p>　　2、<del>rwSr</del><del>r</del>- 表示SUID被设置，但所有者权限中可执行位没有被设置</p>
<p>　　3、-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置</p>
<p>　　4、<del>rw-r-Sr</del>- 表示SGID被设置，但同组用户权限中可执行位没有被社</p>
<p>　　其实在UNIX的实现中，文件权限用12个二进制位表示，如果该位置上的值是</p>
<p>　　1，表示有相应的权限：</p>
<p>　　11 10 9 8 7 6 5 4 3 2 1 0</p>
<p>　　S G T r w x r w x r w x</p>
<p>　　第11位为SUID位，第10位为SGID位，第9位为sticky位，第8-0位对应于上面的三组rwx位。</p>
<p>　　11 10 9 8 7 6 5 4 3 2 1 0</p>
<p>　　上面的-rwsr-xr-x的值为： 1 0 0 1 1 1 1 0 1 1 0 1</p>
<p>　　<del>rw-r-Sr</del>-的值为： 0 1 0 1 1 0 1 0 0 1 0 0</p>
<p>　　给文件加SUID和SUID的命令如下：</p>
<p>　　chmod u+s filename 设置SUID位</p>
<p>　　chmod u-s filename 去掉SUID设置</p>
<p>　　chmod g+s filename 设置SGID位</p>
<p>　　chmod g-s filename 去掉SGID设置</p>
<p>　　另外一种方法是chmod命令用八进制表示方法的设置。如果明白了前面的12位权限表示法也很简单。</p>
<p>　　二、SUID和SGID的详细解析</p>
<p>　　由于SUID和SGID是在执行程序（程序的可执行位被设置）时起作用，而可执行位只对普通文件和目录文件有意义，所以设置其他种类文件的SUID和SGID位是没有多大意义的。</p>
<p>　　首先讲普通文件的SUID和SGID的作用。例子：</p>
<p>　　如果普通文件myfile是属于foo用户的，是可执行的，现在没设SUID位，ls命令显示如下：</p>
<p>　　-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfile任何用户都可以执行这个程序。UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢？是这个进程的运行用户的（有效）ID，包括 user id和group id。用户可以用id命令来查到自己的或其他用户的user id和group id。</p>
<p>　　除了一般的user id 和group id外，还有两个称之为effective 的id，就是有效id，上面的四个id表示为：uid，gid，euid，egid。内核主要是根据euid和egid来确定进程对资源的访问权限。</p>
<p>　　一个进程如果没有SUID或SGID位，则euid=uid egid=gid，分别是运行这个程序的用户的uid和gid。例如kevin用户的uid和gid分别为204和202，foo用户的uid和gid为 200，201，kevin运行myfile程序形成的进程的euid=uid=204，egid=gid=202，内核根据这些值来判断进程对资源访问 的限制，其实就是kevin用户对资源访问的权限，和foo没关系。</p>
<p>　　如果一个程序设置了SUID，则euid和egid变成被运行的程序的所有者的uid和gid，例如kevin用户运行myfile，euid=200，egid=201，uid=204，gid=202，则这个进程具有它的属主foo的资源访问权限。</p>
<p>　　SUID的作用就是这样：让本来没有相应权限的用户运行这个程序时，可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。</p>
<p>　　SUID的优先级比SGID高，当一个可执行程序设置了SUID，则SGID会自动变成相应的egid。</p>
<p>　　下面讨论一个例子：</p>
<p>　　UNIX系统有一个/dev/kmem的设备文件，是一个字符设备文件，里面存储了核心程序要访问的数据，包括用户的口令。所以这个文件不能给一般的用户读写，权限设为：cr-<del>r</del>---- 1 root system 2, 1 May 25 1998 kmem</p>
<p>　　但ps等程序要读这个文件，而ps的权限设置如下：</p>
<p>　　-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps</p>
<p>　　这是一个设置了SGID的程序，而ps的用户是bin，不是root，所以不能设置SUID来访问kmem，但大家注意了，bin和root 都属于system组，而且ps设置了SGID，一般用户执行ps，就会获得system组用户的权限，而文件kmem的同组用户的权限是可读，所以一般 用户执行ps就没问题了。但有些人说，为什么不把ps程序设置为root用户的程序，然后设置SUID位，不也行吗？这的确可以解决问题，但实际中为什么 不这样做呢？因为SGID的风险比SUID小得多，所以出于系统安全的考虑，应该尽量用SGID代替SUID的程序，如果可能的话。下面来说明一下 SGID对目录的影响。SUID对目录没有影响。如果一个目录设置了SGID位，那么如果任何一个用户对这个目录有写权限的话，他在这个目录所建立的文件 的组都会自动转为这个目录的属主所在的组，而文件所有者不变，还是属于建立这个文件的用户。</p>
<p>　　三、关于SUID和SGID的编程</p>
<p>　　和SUID和SGID编程比较密切相关的有以下的头文件和函数：</p>
<p>　　#include</p>
<p>　　#include</p>
<p>　　uid_t getuid(void);</p>
<p>　　uid_t geteuid(void);</p>
<p>　　gid_t getgid (void);</p>
<p>　　gid_t getegid (void);</p>
<p>　　int setuid (uid_t UID);</p>
<p>　　int setruid (uid_t RUID);</p>
<p>　　int seteuid (uid_t EUID);</p>
<p>　　int setreuid (uid_t RUID,uid_t EUID);</p>
<p>　　int setgid (gid_t GID);</p>
<p>　　int setrgid (gid_t RGID);</p>
<p>　　int setegid (git_t EGID);</p>
<p>　　int setregid (gid_t RGID, gid_t EGID);</p>
<p>　　具体这些函数的说明在这里就不详细列出来了,要用到的可以用man查。</p>
<p>　　SUID/SGID :</p>
<p>　　假如你有文件a.txt</p>
<p>　　#ls -l a.txt</p>
<p>　　-rwxrwxrwx</p>
<p>　　#chmod 4777 a.txt</p>
<p>　　-rwsrwxrwx ======&gt;注意s位置</p>
<p>　　#chmod 2777 a.txt</p>
<p>　　-rwxrwsrwx ======&gt;注意s位置</p>
<p>　　#chmod 7777 a.txt</p>
<p>　　-rwsrwxswt ======&gt;出现了t,t的作用在内存中尽量保存a.txt,节省系统再加载的时间.</p>
<p>　　现在再看前面设置 SUID/SGID作用:</p>
<p>　　#cd /sbin</p>
<p>　　#./lsusb</p>
<p>　　...</p>
<p>　　#su aaa(普通用户)</p>
<p>　　$./lsusb</p>
<p>　　...</p>
<p>　　是不是现在显示出错？</p>
<p>　　$su</p>
<p>　　#chmod 4755 lsusb</p>
<p>　　#su aaa</p>
<p>　　$./lsusb</p>
<p>　　... 现在明白了吗？本来是只有root用户才能执行的命令，加了SUID后,普通用户就可以像root一样的用，权限提升了。上面是对于文件来说的，对于目录也差不多！</p>
<p>　　目录的S属性使得在该目录下创建的任何文件及子目录属于该目录所拥有的组，目录的T属性使得该目录的所有者及root才能删除该目录。还有对 于s与S，设置SUID/SGID需要有运行权限，否则用ls -l后就会看到S,证明你所设置的SUID/SGID没有起作用。</p>
<p>　　Why we need suid,how do we use suid?</p>
<p>　　r -- 读访问</p>
<p>　　w -- 写访问</p>
<p>　　x -- 执行许可</p>
<p>　　s -- SUID/SGID</p>
<p>　　t -- sticky位</p>
<p>　　那么 suid/sgid是做什么的？ 为什么会有suid位呢？</p>
<p>　　要想明白这个，先让我们看个问题：如果让每个用户更改自己的密码？</p>
<p>　　用户修改密码，是通过运行命令passwd来实现的。最终必须要修改/etc/passwd文件，而passwd的文件的属性是：</p>
<p>　　#ls -l /etc/passwd</p>
<p>　　<del>rw-r</del><del>r</del>- 1 root root 2520 Jul 12 18:25 passwd</p>
<p>　　我们可以看到passwd文件只有对于root用户是可写的，而对于所有的他用户来说都是没有写权限的。 那么一个普通的用户如何能够通过运行passwd命令修改这个passwd文件呢？</p>
<p>　　为了解决这个问题，SUID/SGID便应运而生。而且AT&amp;T对它申请了专利。 呵呵。</p>
<p>　　SUID和SGID是如何解决这个问题呢？</p>
<p>　　首先，我们要知道一点：进程在运行的时候，有一些属性，其中包括 实际用户ID,实际组ID,有效用户ID,有效组ID等。 实际用户ID和实际组ID标识我们是谁，谁在运行这个程序,一般这2个字段在登陆时决定，在一个登陆会话期间， 这些值基本上不改变。</p>
<p>　　而有效用户ID和有效组ID则决定了进程在运行时的权限。内核在决定进程是否有文件存取权限时，是采用了进程的有效用户ID来进行判断的。</p>
<p>　　知道了这点，我们来看看SUID的解决途径：</p>
<p>　　当一个程序设置了为SUID位时，内核就知道了运行这个程序的时候，应该认为是文件的所有者在运行这个程序。即该程序运行的时候，有效用户ID是该程序的所有者。举个例子：</p>
<p>　　[root@sgrid5 bin]# ls -l passwd</p>
<p>　　-r-s-<del>s</del>-x 1 root root 16336 Feb 14 2003 passwd</p>
<p>　　虽然你以test登陆系统，但是当你输入passwd命令来更改密码的时候，由于passwd设置了SUID位，因此虽然进程的实际用户ID 是test对应的ID，但是进程的有效用户ID则是passwd文件的所有者root的ID,因此可以修改/etc/passwd文件。</p>
<p>　　让我们看另外一个例子。</p>
<p>　　ping命令应用广泛，可以测试网络是否连接正常。ping在运行中是采用了ICMP协议，需要发送ICMP报文。但是只有root用户才能建立ICMP报文，如何解决这个问题呢？同样，也是通过SUID位来解决。</p>
<p>　　[root@sgrid5 bin]# ls -l /bin/ping</p>
<p>　　-rwsr-sr-x 1 root root 28628 Jan 25 2003 /bin/ping</p>
<p>　　我们可以测试一下，如果去掉ping的SUID位，再用普通用户去运行命令，看会怎么样。</p>
<p>　　[root@sgrid5 bin]#chmod u-s /bin/ping</p>
<p>　　[root@sgrid5 bin]# ls -l ping</p>
<p>　　-rwxr-xr-x 1 root root 28628 Jan 25 2003 ping</p>
<p>　　[root@sgrid5 bin]#su test</p>
<p>　　[test@sgrid5 bin]$ ping byhh.net</p>
<p>　　ping: icmp open socket: Operation not permitted</p>
<p>　　SUID虽然很好了解决了一些问题，但是同时也会带来一些安全隐患。</p>
<p>　　因为设置了 SUID 位的程序如果被攻击(通过缓冲区溢出等方面),那么hacker就可以拿到root权限。</p>
<p>　　因此在安全方面特别要注意那些设置了SUID的程序。</p>
<p>　　通过以下的命令可以找到系统上所有的设置了suid的文件：</p>
<p>　　[root@sgrid5 /]# find / -perm -04000 -type f -ls</p>
<p>　　对于这里为什么是4000，大家可以看一下前面的st_mode的各bit的意义就明白了。</p>
<p>　　在这些设置了suid的程序里，如果用不上的，就最好取消该程序的suid位。</p>
<br />
<span style="color: red">总结：</span><br />
1．Set UID：当文件系统的"所有者权限组合"的可执行位被s(即rws------)取代时，构成特殊权限规定Set UID，简称SUID。仅对系统中的二进制可执行文件设置有效，而且不可对Shell Script施加设置。<br />
2．Set GID：当所有者所在的用户组(group)的权限组合中可执行位被s所取代时(例如--<del>rws</del>--)，便构成Set GID的权限设置。SGID可以针对二进制文件或目录进行设置。<br />
3．Sticky Bit：当文件系统"其他(others)"的权限组合中可执行位被t所取代时(例如------rwt)，便构成Sticky Bit的权限设置。它只对目录有效。
<p>SUID和SGID，主要作用是用于当非某个文件的所有者(或组)执行(或操作目录)文件时，可以暂时获得该文件所有者的权限。<br />
SBIT的作用在于访问控制，当它对某个目录设置此属性后，该目录下的所有文件，即使其它人有w属性，都不得对其更名、移动、删除。</p>
<p>设置方法：<br />
如果你已经掌握了用(八进制)数字来表示权限的规则，再结合chmod命令进行设置就很简单了。以下是SUID/SGID/Sticky Bit约定对应的八进制数值：<br />
SUID ＝ 4<br />
SGID ＝ 2<br />
SBIT ＝ 1<br />
设置时我们把表示特殊权限的数字放在其他三位数字权限的前面。</p>
<img src ="http://www.blogjava.net/agapple/aggbug/237835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/agapple/" target="_blank">agapple</a> 2008-10-31 16:22 <a href="http://www.blogjava.net/agapple/archive/2008/10/31/237835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fstab文件解释 小记</title><link>http://www.blogjava.net/agapple/archive/2008/10/30/237552.html</link><dc:creator>agapple</dc:creator><author>agapple</author><pubDate>Thu, 30 Oct 2008 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/agapple/archive/2008/10/30/237552.html</guid><wfw:comment>http://www.blogjava.net/agapple/comments/237552.html</wfw:comment><comments>http://www.blogjava.net/agapple/archive/2008/10/30/237552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/agapple/comments/commentRss/237552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/agapple/services/trackbacks/237552.html</trackback:ping><description><![CDATA[<fieldset><legend>Title</legend>LABEL=/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 1<br />
LABEL=/boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2<br />
none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/pts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; devpts&nbsp; gid=5,mode=620&nbsp; 0 0<br />
LABEL=/home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2<br />
none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0<br />
none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/shm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0<br />
LABEL=/tmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /tmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2<br />
LABEL=/usr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2<br />
LABEL=/var&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2<br />
/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0<br />
/dev/cdrom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /mnt/cdrom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udf,iso9660 noauto,owner,kudzu,ro 0 0<br />
/dev/fd0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /mnt/floppy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auto&nbsp;&nbsp;&nbsp; noauto,owner,kudzu 0 0</fieldset><br />
fstab中存放了与分区有关的重要信息，其中每一行为一个分区记录，每一行又可分为六个部份：<br />
1. 第一项是您想要mount的储存装置的实体位置，如/dev/sda6分区 <span style="color: red">(分区或卷标名)</span><br />
2. 第二项就是您想要将其加入至哪个目录位置，如/home或/, <span style="color: red">(挂载点&nbsp;)</span><br />
3. 第三项就是所谓的local filesystem，其包含了以下格式：如ext、ext2、msdos、iso9660、nfs、swap等，或如ext2&nbsp; <span style="color: red">(文件系统)</span><br />
4. 第四项就是您mount时，所要设定的状态，如ro（只读）或defaults（包括了其它参数如rw、suid、exec、auto、nouser、async），可以参见「mount nfs」。 <span style="color: red">（读写状态）</span><br />
5. 第五项是提供DUMP功能，在系统DUMP时是否需要BACKUP的标志位，其内定值是0。<span style="color: red">&nbsp;&nbsp;（<font face="Times New Roman">0</font>为不备份，<font face="Times New Roman">1</font>为要备份，一般根分区要备份）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
6. 第六项是设定是否要在开机时做check的动作，除了其必要的check为1之外，其它皆可视需要设定，内定值是0。 <span style="color: red">(<font face="Times New Roman">0</font>为不自检，<font face="Times New Roman">1</font>或者<font face="Times New Roman">2</font>为要自检，如果是根分区要设为<font face="Times New Roman">1</font>，其他分区只能是<font face="Times New Roman">2</font>)</span><br />
  <img src ="http://www.blogjava.net/agapple/aggbug/237552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/agapple/" target="_blank">agapple</a> 2008-10-30 11:23 <a href="http://www.blogjava.net/agapple/archive/2008/10/30/237552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置kernel参数：root分区</title><link>http://www.blogjava.net/agapple/archive/2008/10/30/237540.html</link><dc:creator>agapple</dc:creator><author>agapple</author><pubDate>Thu, 30 Oct 2008 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/agapple/archive/2008/10/30/237540.html</guid><wfw:comment>http://www.blogjava.net/agapple/comments/237540.html</wfw:comment><comments>http://www.blogjava.net/agapple/archive/2008/10/30/237540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/agapple/comments/commentRss/237540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/agapple/services/trackbacks/237540.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p>grub引导中，在kernal 中设置root分区现在有3中方式&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000">1.&nbsp; 使用卷标</span> </p>
<p>查看/etc/fstab，可以看到类似</p>
<p>label=/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp; ext3 defaults 1 1<br />
/dev/hda7 /usr ext3 defaults 1 1<br />
<br />
第二行的意思很容易懂，就是把/dev/hda7 mount到/usr 上。第一行没有指明分区，意思是把label(卷标)为/ 的分区mount到/上。这样写的好处在于即使如果把硬盘从主板上的ide0(hda) 换到ide2(hdc)上，系统仍然可以自动挂载正确的分区。通常Linux安装的时候已经自动指定了卷标。</p>
<p>所以我们可以这样设置root分区 ,&nbsp;<span style="color: #ff0000"> kernel **** root=LABEL=/</span> </p>
<p>&nbsp;</p>
<p><span style="color: #ff0000">2. 使用UUID</span> </p>
<p>UUID 全称是 Universally Unique Identifier，也就是说，每个分区有一个唯一的 UUID 值，这样就不会发生分区识别混乱的问题了。&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>有 3 种方法： </p>
<p>1. 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息。 </p>
<p># ls -l /dev/disk/by-uuid/ </p>
<p>------ </p>
<p>lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -&gt; ../../sdb5 </p>
<p>lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -&gt; ../../sda4 </p>
<p>..... </p>
<p>2. 通过 vol_id 命令。 </p>
<p># vol_id /dev/sdb5 </p>
<p>3. 通过 blkid 命令 </p>
<p>&nbsp;# sudo blkid</p>
<p>/dev/sdb5: LABEL="SWAP" UUID="0909-090B" TYPE="vfat" </p>
<p>&nbsp;</p>
<p>通过这三种方法都可以获得分区的 UUID，UUID 依据分区不同，长度和格式都不相同。 </p>
<p><span style="color: #ff0000">root=UUID=*****</span> </p>
<p>&nbsp;</p>
<p><span style="color: #ff0000">3. 使用win模式下的/dev/*</span> </p>
<p>通过explore2fs查看root , home对应的分区，显示格式如：/dev/sda2 </p>
<p><span style="color: #ff0000">root=/dev/sda2</span> </p>
</div>
<img src ="http://www.blogjava.net/agapple/aggbug/237540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/agapple/" target="_blank">agapple</a> 2008-10-30 10:59 <a href="http://www.blogjava.net/agapple/archive/2008/10/30/237540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>