Linux 档案属性:
认识档案属性:
网路上有相当多的朋友很有趣,他们对于 Linux 的问题在于无法了解『安装完 Linux 之后要干嘛?!开机跟关机?!』,嗯!这是个很严重的问题,因为这些朋友可能并不了解他们学 Linux 要作何用途?!好了,既然已经安装了 linux 了,那也知道如何启动与关闭 Linux 主机了,不要再埋怨啦!学一学了解一下 Linux 的档案权限观念与他的目录分布的情况吧!等你了解了 Linux 的档案权限概念之后,对于以后修改档案属性与修改系统的一些重要参数档案,是很有用的呦!此外,在开始认识档案之前,要先跟大家说明的是,在 Linux 里面,『英文字母大小写是不一样的』,例如档名 VBird 与 vbird 是两个不一样的两个档案!这点请千万要搞清楚喔(与 Windows 最大的不同点啦!)。
嗯!既然要让你了解 Linux 的档案属性,那么第一个进入 Linux 要学的指令就必须要先跟你说?!那一个?!就是『 ls 』这一个 list 档案的指令?!在你以 root 的身份登入 Linux 之后,下达『ls -al 』看看,会看到底下的几个咚咚:
ls 是『list』的意思,而参数『-al』则表示列出所有的档案(包含隐藏档,就是档名前面第一个字元为 . 的那种档案)。如上所示,在你第一次以 root 身份登入 Linux 时,如果你输入指令后,应该有上列的几个东西,先解释一下上面七个栏位个别的意思:
1.第一栏代表这个档案的属性:这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个属性:
o第一个属性代表这个档案是『目录、档案或连结档』:
§当为[ d ]则是目录,例如上表的第 11 行;
§为[ - ]则是档案,例如上表的第
5 行;
§若是[ l ]则表示为连结档(link file);
§若是[ b ]则表示为装置档里面的可供储存的周边设备;
§若是[ c ]则表示为装置档里面的序列埠设备,例如键盘、滑鼠。
o接下来的属性中,三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读、[ w ]代表可写、[ x ]代表可执行:
§第一组为『所有人的权限』,以第五行为例,该档案的所有人可以读写,但不可执行;
§第二组为『同群组的权限』;
§第三组为『其他非本群组的权限』。
范例:若有一个档案的属性为『-rwxr-xr--』,简单的可由下面说明之:
[-][rwx][r-x][r--]
1
234
567
890
1 为:代表这个档名为目录或档案(上面为档案)
234为:拥有人的权限(上面为可读、可写、可执行)
567为:同群组使用者权限(上面为可读可执行)
890为:其他使用者权限(上面为仅可读)
上面的属性情况代表一个档案、这个档案的拥有人可读可写可执行、但同群组的人仅可读与执行,非同群组的使用者仅可读的意思!
2.第二栏表示为连结占用的 link 节点 ( 若为目录时,通常与该目录底下还有多少目录有关 )这部分将在介绍 link 档案时 (下一节) 再深入的介绍!;
3.第三栏表示这个档案(或目录)的『拥有人』;
4.第四栏表示拥有人的群组;
这里解释一下,在 Linux 中,你的 ID (如 root 或 vbird 等帐号均是 ID)即是你的身份,而且你还有附属在一个群组之下,例如你有一个团体(即群组)代号为 bird,且这个群体里有四个人,其代号分别是 bird1, bird2, bird3, bird4,则这四个人为同一群组即 bird!若看上面的情况,则代表所有人为 root 且群组为 root (群组与所有人名称可以相同)
5.第五栏为这个档案的大小;
6.第六栏为这个档案的建档日期或者是最近的修改日期,分别为月份、日期及时间;
7.第七栏为这个档案的档名,如果档名之前多一个『 . 』,则代表这个档案为『隐藏档』,例如上表第 6 行的『.bashrc_history』档名即是隐藏档,由于我们有下一个参数为 ls -al,所以连隐藏档都列出来,如果你只输入 ls 则档名有加『 . 』的档案就不会被显示出来!
举个例子来说,如果有下面的两个档案:
则档案『 test.txt 』只有 root 可以读写,其他人仅可以读;而另一个档案『 ping_tsai 』所有人 bird1 可读可写可执行,而 bird2, bird3, bird4 这三个与 bird1 同样是 bird 群组的仅可读可执行但不能写(亦即不能修改),至于非 bird 这一个群组的人则仅可以读,不能写也不能执行!
Linux 档案属性的重要性:
与 Windows 系统不一样的是,在 Linux 系统(或者说 Unix 系统)当中,每一个档案都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢?基本上,最大的用途是在『安全性』上面的。举个简单的例子,在你的系统中,关于系统服务的档案通常只有 root 才能读写,或者是执行,例如 /etc/shadow 这一个帐号管理的档案,由于该档案记录了你的系统中的所有帐号的资料,因此是很重要的一个资讯档,当然不能让任何人读取,只有 root 才能够来读取?!所以该档案的属性就会成为 [ -rw------- ]?!
那么,如果你有一个开发团队,在你的团对中,你希望每个人都可以使用某一些目录下的档案,而非你的团队的其他人则不予以开放呢?以上面的例子来说,我的团队共有四个人,分别是 bird1~bird4 ,且隶属于 bird 这一个群组!那么我就可以将我的档案属性订为 [ -rwxrwx--- ]来提供给我的工作团队使用?!这可是相当重要的。
再举个例子来说,如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞?!例如本来只有 root 才能做的开关机、ADSL 的拨接程式、新增或删除使用者等等的指令,若被你改成任何人都可以执行的话,那么如果使用者不小心给你重新开机啦!重新拨接啦!等等的!那么你的系统不就会常常莫名其妙的挂掉?!而且万一你的使用者的密码被其他不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些 root 的工作!可怕吧!因此,在你修改你的 linux 档案与目录的属性之前,一定要先搞清楚,什么是可变的,什么是不可变的!千万注意?!
SetUID, SetGID, Sticky bit
SUID 与 SGID:
其实,说到这里之前,应该先说明一下 UID (user ID)与 GID (Groupt ID)的!基本上, Linux 认得的帐号只是一堆数字而已!而由于我们每个档案中同时含有『使用者』与『使用者群组』的属性,因此,就有所谓的 UID 与 GID ?! UID 代表我们的使用者『代号』而 GID 则是群组的『代号』。你可以使用『 more /etc/passwd 』这个指令来看一下你的系统当中的所有帐号,然后你会注意到每行的第三、四个栏位(以 : 分隔)为数字,那个就是 UID 与 GID 了,您更会注意到的是, root 的 UID 与 GID 都是 0 !!因此,当你建立了一个帐号,而你将该帐号的 UID 与 GID 都改为零,呵呵!那个帐号的使用者就具有 root 的身份?!
那么什么是 SUID 与 SGID 呢?!在说明之前我们先来看一个档案的内容:
看到了 /usr/bin/passwd 档案的前面属性了吗?怎么会有 s 的属性在原本的 x 呀!?那个就是所谓的 SUID 了!如果是『 -r-xr-s--x 』时,那么 s 就成为所谓的 SGID 了!『当一个档案具有 SUID 的时候,同时 other 的群组具有可执行的权限,那么当 others 群组执行该程式的时候, other 将拥有该 user 的权限了!』。
我们以帐号的密码档来说明好了!注意上面的范例?!可以看到的是, /etc/shadow 的权限是『只有 root 才能存取』呦!那么你会不会觉得很奇怪?明明我的一般使用者可以自己修改密码呀!对不对?那么修改密码一定跟 /etc/shadow 这个档案有关,那么怎么回事呀!?使用者是如何修改 /etc/shadow 这个档案的呢?嗯!没错!就是使用 SUID 的功能啦!上面的例子说明了, /usr/bin/passwd 这个档案具有 SUID 的属性,那么当使用者使用 /usr/bin/passwd 这个执行档时,在执行 pass word 修改的其间就具有 /usr/bin/passwd 这个档案的拥有者 root 的所属权限?!所以,所以当一般使用者执行 passwd 的时候,将具有 root 的权限,所以他们也可以更改 /etc/shadow 的内容?!那么由此也可以知道,由于这个 Set UID ( SUID ) 的主要功能是在『某个档案执行的其间具有档案拥有者的权限』,因此, s 就是替代上面提到的 x 这个可执行的位置?!那万一该档案并没有 x 的属性呢?哈哈!问的好!那么该档案的属性就会将小写的 s 变成大写的 S 啦! ( 这里即使暂时不了解也没有关系,等到过一阵子再回来看一看,你就会了解啦! )
不过,由此也知道 SUID 与 SGID 的问题所在,没错!就是太不安全了!如果你有一个档案具有 root 的权限,那么当开启了 SUID 的时候,嘿嘿!够你瞧的了!!因此上,在变更一的档案成为具有 SUID 或 SGID 的情况时,必须要特别小心呢!知道乎!?
OK!接着下来,我们要来看一下,既然有 SUID 与 SGID ,那么为什么没有在最末位出现 s 取代 x 呢?呵呵!这当然没有必要啦!因为那是属于 others 的权限,你的档案如果是任何人皆可执行的话,那么本来他们就具有权限啦!干嘛还要设定 s 的属性!?不过,这里却真的有另一个属性出现了,那就是 Sticky bit 的属性 ( t ) !这个属性的最大用处在于『具有 sticky bit 属性的该档案或目录下的档案,其档案或目录只有档案拥有者及 root 才有权力删除!』这样是否可以了解了呢?嘿嘿!没错!在我们系统里面本来就预设有一个啦!那就是 /tmp 这个目录!