鸟哥的 Linux ADSL 私房菜


Linux 档案属性与目录配置
最近更新日期:2003/02/06
使用者与群组
Linux 档案属性
如何改变档案权限chgrp, chown, chmod,
Linux 支持的档案格式与档案种类
Linux 目录配置
本章习题练习

使用者与群组
初次接触 Linux 的朋友大概会觉得很怪异,怎么『Linux 有这么多使用者,还分什么群组,有什么用?』。 这个『使用者与群组』的功能可是相当健全而好用的一个安全防护呢!怎么说呢?由于 Linux 是个多人多任务的系统 ( 已经提过若干次啰! ),因此可能常常会有多人同时使用这部主机来进行工作的情况发生,为了考虑每个人的隐私权,因此,这个『档案拥有者』的角色就显的相当的重要了!例如当你 将你的e-mail情书转存成档案之后,放在您自己的家目录,您总不希望被其它人看见自己的情书吧?这个时候,你就把该档案设定成『只有档案拥有者,就是 我,才能看与修改这个档案的内容』,那么即使其它人知道你有这个相当『有趣』的档案,不过由于您有设定适当的权限,所以其它人自然也就无法知道该档案的内 容啰!
 
那么群组呢?为何要设定档案还有所属的群组?其实,群组最简单的功能之一,就是当您在团队开发资源的时候最有用啦!举个例子来说好了,假如在我的主机上面有两个团体,这第一个团体名称为 testgroup 而他的成员是 test1, test2, test3 三个,第二个团体名称为 treatgoup 他的团员为 treat1, treat2, treat3,这两个团体之间是互相有竞争性质的,但是却又要缴交同一份报告,然而每组团员又需要同时可以修改自己的团体内任何人所建立的档案,且不能让非自己团体以外的人看到自己的档案内容!这个时候怎么办?呵呵!在 Linux 底下可就很简单啦!我可以经由简易的档案权限设定,就能限制非自己团队( 亦即是群组啰 )的其它人不能够阅览内容啰!而且亦可以让自己的团队成员可以修改我所建立的档案!同时,如果我自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到我的档案数据,很方便吧!另外,如果 teacher 这个账号是 testgroup 与 treatgroup 这两个群组的老师,他想要同时观察两者的进度,因此需要两边的群组都能够进去观看,这个时候,您可以设定 teacher 这个账号,『同时支持 testgroup 与 treatgroup 这两个群组!』,也就是说,每个人都可以有多个群组的支持呢!
 
这样说或许你还不容易理解这个使用者与群组的关系吧?没关系,我们可以使用目前『家庭』的观念来进行解说喔!假设有一家人,家里只有三兄弟,分别 是王大毛、王二毛与王三毛三个人,而这个家庭是登记在王大毛的名下的!所以,『王大毛家有三个人,分别是王大毛、王二毛与王三毛』,而且这三个人都有自己 的房间,并且共同拥有一个客厅喔! 这样说来应该有点晓得了喔!那个『王大毛家』就是所谓的『群组』啰,至于三兄弟就是分别为三个『使用者』,而这三个使用者是在同一个群组里面的 喔!而三个使用者虽然在同一群组内,但是我们可以设定『权限』,好让某些使用者个人的信息不被群组的所有人查询,以保有个人『私人的空间』啦!而设定群组 共享,则可让大家共同分享喔!
好了,那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦!这个时候,除非王家认识张小猪,然后开门让张小猪进 来王家,否则张小猪永远没有办法进入王家,更不要说进到王三毛的房间啦!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朋友,那么张小猪就可以 透过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的『其它人, Others 』啰!因此,我们就可以知道啦,在 Linux 里面,任何一个档案都具有『User, Group 及 Others』三个权限!我们可以将上面的说明以底下的图示来解释:
 
 
不过,这里有个特殊的人物要来介绍的,那就是『万能的天神』!这个天神具有无限的神力,所以他可以到达任何他想要去的地方,呵呵!那个人在 Linux 系统中的身份代号是『 root 』啦!所以要小心喔!那个 root 可是『万能的天神』喔!
 
无论如何,『使用者身份』,与该使用者所支持的『群组』概念,在 Linux 的世界里面是相当的重要的,他可以帮助您让您的多任务 Linux 环境变的更容易管理!更详细的 『身份与群组』 设定,我们将在账号管理再进行解说。底下我们将针对档案系统与档案权限来进行说明。

Linux 档案属性:
大致了解了 Linux 的使用者与群组之后,接着下来,我们要来谈一谈,那么这个档案的权限要如何针对这些所谓的『使用者』与『群组』来设定该档案的权限呢?这个部分是相当的重要的,尤其对于初学者来说,因为档案的权限与属性是学习 Linux 的一个相当重要的关卡,如果没有这部份的概念,那么您将老是听不懂别人在讲什么呢!尤其是当您在您的屏幕前面出现了『Permission deny』的时候,不要担心,『肯定是权限设定错误』啦!呵呵!好了,闲话不多聊,赶快来瞧一瞧先:
 
嗯!既然要让你了解 Linux 的档案属性,那么有个重要的也是常用的指令就必须要先跟你说啰!那一个?!就是『 ls 』这一个 list 档案的指令啰!在你以 root 的身份登入 Linux 之后,下达『ls -al 』看看,会看到底下的几个咚咚:
 
[root@tsai root]# ls -al
total 64
drwxr-x---    4 root     root         4096 Feb 14 22:02 .
drwxr-xr-x   23 root     root         4096 Feb 16 13:35 ..
-rw-r--r--    1 root     root         1210 Feb 10 06:03 anaconda-ks.cfg
-rw-------    1 root     root        12447 Feb 14 23:22 .bash_history
-rw-r--r--    1 root     root           24 Jun 11  2000 .bash_logout
-rw-r--r--    1 root     root          234 Jul  6  2001 .bash_profile
-rw-r--r--    1 root     root          217 Feb  9 22:06 .bashrc
-rw-r--r--    1 root     root          210 Jun 11  2000 .cshrc
drwx------    2 root     root         4096 Feb 14 21:54 .gnupg
-rw-------    1 root     root            8 Feb 14 22:05 .mysql_history
drwx------    2 root     root         4096 Feb 10 00:44 .ssh
-rw-r--r--    1 root     root          196 Jul 11  2000 .tcshrc
-rw-r--r--    1 root     root         1126 Aug 24  1995 .Xresources

 第一栏      二  三       四            五      六        七 
[档案属性][档案数][拥有者][所有者群组][大小][建档日期][档名]

 
ls 是『list』的意思,与在早期的 DOS 年代的 dir 类似功能。而参数『-al』则表示列出所有的档案(包含隐藏档,就是档名前面第一个字符为 . 的那种档案)。如上所示,在你第一次以 root 身份登入 Linux 时,如果你输入指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:
  1. 第一栏代表这个档案的属性:这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个属性:
  2.    
    范例:若有一个档案的属性为『-rwxr-xr--』,简单的可由下面说明之:
     
    [-][rwx][r-x][r--]
     1  234  567  890
         1 为:代表这个文件名为目录或档案(上面为档案)
        234为:拥有人的权限(上面为可读、可写、可执行)
        567为:同群组使用者权限(上面为可读可执行)
        890为:其它使用者权限(上面为仅可读)
     
    上面的属性情况代表一个档案、这个档案的拥有人可读可写可执行、但同群组的人仅可读与执行,非同群组的使用者仅可读的意思!
     
  3. 第二栏表示为连结占用的节点 (i-node) ( 若为目录时,通常与该目录底下还有多少目录有关 )这部分将在介绍连结 link 档案时 (下一节) 再深入的介绍;

  4.  
  5. 第三栏表示这个档案(或目录)的『拥有人』;

  6.  
  7. 第四栏表示拥有人的群组;

  8. 这里再次解释一下,在 Linux 中,你的 ID ( 如 root 或 test 等账号均是所谓的 ID ) 即是你的身份,而且你还有附属在一个或多个群组之下,例如刚刚我们上面提到的,你有一个团体 ( 即群组 ) 代号为 testgroup ,且这个群体里有三个人,其代号分别是 test1, test2, 与 test3,则这三个人为同一群组即 testgroup!那么如果以上图的[-rwxrwx---]的档案属性来看,如果该档案属于 test1 所有,那么 test2, test3 亦有读、写、执行的权力,因为他们都属于同一个 group 呀!而如果您不是属于 test1, test2, test3 的任何一个人,也不属于 testgroup 这个群组时,那么您将不具备读、写、执行这个档案的权限了!
     
  9. 第五栏为这个档案的大小;

  10.  
  11. 第六栏为这个档案的建档日期或者是最近的修改日期,分别为月份、日期及时间。请特别留意,如果您是以繁体中文来进行安装您的 Linux 时,那么预设的语系可能会被改为中文。而由于中文无法显示在文字型态的终端机上面,所以这一栏会成为怪怪的乱码,这个时候,请修改一下 /etc/sysconfig/i18n 这个档案,里面的『 LC_TIME 』修改为:『 LC_TIME=en 』再储存离开,再登入一次,就可以得到英文字形显示的日期了!那么如何修改该档案呢?呵呵!以 root 身份用 vi 修改! ;

  12.  
  13. 第七栏为这个档案的档名,如果档名之前多一个『 . 』,则代表这个档案为『隐藏档』,例如上表第 6 行的『.bashrc_history』档名即是隐藏档,由于我们有下一个参数为 ls -al,所以连隐藏档都列出来,如果你只输入 ls 则档名有加『 . 』的档案就不会被显示出来!

  14.  
      对于更详细的 ls 用法,还记得怎么查询吗?对啦!使用 man ls 或 info ls 去看看他的基础用法去!自我进修是很重要的,因为『师傅带进门,修行在个人!』,自古只有天才学生,没有天才老师呦!加油吧! ^_^
 
  • 例题一:如果有下面的两个档案: 

  • -rw-r--r--   1 root     root          238 Jun 18 17:22 test.txt 
    -rwxr-xr--   1 test1    testgroup    5238 Jun 19 10:25 ping_tsai
    请说明两个档案的拥有者与其相关的权限为何?
    答:
    • 档案『 test.txt 』的拥有人为 root ,群组为 root 。至于权限方面则只有 root 这个账号可以存取此档案,其它人则仅能读此档案;
    • 另一个档案『 ping_tsai 』的拥有人为 test1 ,而群组为 testgroup。其中, test1 可以针对此档案具有可读可写可执行的权力,而同群组的 test2, test3 两个人与 test1 同样是 testgroup 的群组账号,则仅可读可执行但不能写 (亦即不能修改),至于非 testgoup 这一个群组的人则仅可以读,不能写也不能执行!
  
  • 例题二:如果我的目录为底下的样式:

  • drwxr-xr--   1 test1    testgroup    5238 Jun 19 10:25 groups/
    请问 testgroup 这个群组的成员与其它人( others )是否可以进入本目录?
    答:
    • 档案拥有者 test1 可以在本目录中进行任何工作;
    • 而 testgroup 这个群组的账号,例如 test2, test3 亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
    • 至于 other 的权限中虽然有 r ,但是由于没有 x 的权限,因此 others 的使用者,并不能进入此目录!
 
Linux 档案属性的重要性:
与 Windows 系统不一样的是,在 Linux 系统(或者说 Unix-Like 系统)当中,每一个档案都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢?基本上,最大的用途是在『安全性』上面的。举个简单的例子,在你的 系统中,关于系统服务的档案通常只有 root 才能读写,或者是执行,例如 /etc/shadow这一个账号管理的档案,由于该档案记录了你的系统中的所有账号的数据,因此是很重要的一个信息文件,当然不能让任何人读取,只有 root 才能够来读取啰!所以该档案的属性就会成为 [ -rw------- ]啰!
 
那么,如果你有一个开发团队,在你的团对中,你希望每个人都可以使用某一些目录下的档案,而非你的团队的其它人则不予以开放呢?以上面的例子来说,testgroup 的团队共有三个人,分别是 test1, test2, test3 !那么我就可以将 test1 的档案属性订为 [ -rwxrwx--- ]来提供给 testgroup 的工作团队使用啰!这可是相当重要的。
 
再举个例子来说,如果你的目录权限没有作好的话,可能造成其它人都可以在你的系统上面乱搞啰!例如本来只有 root 才能做的开关机、ADSL 的拨接程序、新增或删除使用者等等的指令,若被你改成任何人都可以执行的话,那么如果使用者不小心给你重新开机啦!重新拨接啦!等等的!那么你的系统不就 会常常莫名其妙的挂掉啰!而且万一你的使用者的密码被其它不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些 root 的工作!可怕吧!因此,在你修改你的 linux 档案与目录的属性之前,一定要先搞清楚,什么是可变的,什么是不可变的!千万注意啰!

如何改变档案权限
好了,我们已经知道档案权限对于一个系统的安全重要性了,也知道档案的权限对于使用者与群组的相关性了,好了,那么如何修改一的 档案的权限呢?又!有多少档案的权限我们可以修改呢?其实一个档案的权限很多嘛!大致上我们先介绍几个简单的,例如:群组、拥有者、各种身份的权限等等。

Linux 支持的档案格式与档案种类
Linux 的档案与 Windows 的档案能不能互相使用?为何可以?为何不行?这些咚咚都涉及到 Linux 的档案类型与档案格式喔!底下我们就来谈一谈这些基本的观念吧!

Linux 目录配置:
在 Linux 系统的预设状态下,你在根目录中输入『 ls -l 』应该可以看到如下的画面:
 
[vbird@tsai vbird ]$ cd /
[vbird@tsai /]$ ls -l
total 153
drwxr-xr-x    2 root     root         4096 Feb 10 02:06 bin
drwxr-xr-x    3 root     root         4096 Feb 10 00:05 boot
drwxr-xr-x   17 root     root        77824 Feb 11 14:45 dev
drwxr-xr-x   41 root     root         4096 Feb 16 15:18 etc
drwxr-xr-x    8 root     root         1024 Feb  9 22:44 home
drwxr-xr-x    2 root     root         4096 Jun 22  2001 initrd
drwxr-xr-x    6 root     root         4096 Feb 10 02:12 lib
drwxr-xr-x    2 root     root        16384 Feb 10 05:35 lost+found
drwxr-xr-x    2 root     root         4096 Aug 30 00:10 misc
drwxr-xr-x    3 root     root         4096 Feb  9 22:05 mnt
drwxr-xr-x    2 root     root         4096 Aug 24  1999 opt
dr-xr-xr-x  102 root     root            0 Feb 11 22:45 proc
drwx------    4 root     root         4096 Feb 16 15:25 root
drwxr-xr-x    2 root     root         4096 Feb 14 21:28 sbin
drwxrwxrwt    2 root     root         4096 Feb 16 15:40 tmp
drwxr-xr-x   16 root     root         4096 Feb 10 01:28 usr
drwxr-xr-x   20 root     root         4096 Feb 14 21:41 var
 
由属性的角度来看,上面的档名每个都是『目录名称』,较为特殊的是 root ,由于 root 这个目录是管理员 root 的家目录,这个家目录可重要了!所以一定要设定成较为严密的 700 ( rwx------ )这个属性才行吶!如果以较为完整的树状目录来视察的话,可以将整个 Linux 的树状目录会制程下图:
请注意,每个目录都是依附在 / 这个根目录底下的,所以我们在安装的时候一定要有一个 / 对应的 partition 才能安装的原因即在于此!这也就是我们俗称的『树状目录』啰!
 
每个目录的大致内容如下表所示:
 
/bin 这是放例如: ls, mv, rm, mkdir, rmdir, gzip, tar, telnet, 及 ftp 等等常用的执行档的地方(这些执行档的执行方法会在后面提到),有时候这个目录的内容与 /usr/bin 是一样的(有时候甚至会使用连结档哩),是给一般使用者使用的执行程序放置的所在!
/boot 没错,这里就是放置你 Linux 核心与开机相关档案的地方,这个目录底下的 vmlinuz-xxx 就是 Linux 的 Kernel 啦!粉重要的东西!而如果你的开机管理程序选择 grub 的话,那么这个目录内还有 /boot/grub 这个次目录呦!
/dev 摆放一些与装置有关的档案。基本上 Unix 或 Linux 系统均把装置当成是一个档案来看待,例如 /dev/fd0 代表软盘,亦即 Windows 系统下的 A 槽,而 /dev/cdrom 则代表光盘,等等!而如上所述,在这个目录底下的档案型态通常分为两种喔,分别是管理磁盘 Input/Output 的 Block 档案与周边的 Character 档案。
/etc 系统在开机过程中需要读取的档案均在这个目录中,例如 Lilo 的参数、人员的账号与密码、系统的主要设定、http 架站的参数内容、你所要开启的服务项目等等都在这个目录中,所以在这个目录下工作的时候,请记得一定要备份,否则档案被改掉了可是很麻烦的!
/etc/rc.d 这个路径主要在记录一些开关机过程中的 scripts 档案, scripts 有点像是 DOS 下的批次档(.bat檔名)
/etc/rc.d/init.d 所以服务预设的启动 scripts 都是放在这里的,例如要启动与关闭 iptables 的话,可以: 
/etc/rc.d/init.d/iptables start
/etc/rc.d/init.d/iptables stop
/etc/xinetd.d 这个路径在较新的 Linux distribution 当中才有,由于早期的版本用来开启服务的档案是 inetd.conf ,但是在较新的版本中,开启服务的项目已经变成使用 xinetd.conf 这个档案,因此,你若需要启动一些额外的服务的话,在 Mandrake 9.0 或者是 Red Hat 7.0 以后就要到 /etc/xinetd.d 这个目录下了。
/etc/X11 这是与 X windows 有关的设定文件所在的目录,尤其里面的 XF86Config-4 更是重要呢!
/home 基本上,这是系统预设的使用者的家目录( home directory ),在你新增一般使用者账号的时候,预设的使用者家目录都在这里设定好啰!
/lib 在 Linux 执行或编译一些程序的时候,均会使用到一些函式库(library),就在这个目录下
/lost+fount 系统不正常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。例如你加装一棵硬盘于 /disk 中,那在这个目录下就会自动产生一个这样的目录 /disk/lost+found
/mnt 这是软盘与光盘预设挂载点的地方;通常软盘挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下,不过也不一定啦!只要你高兴,随便找一个地方来挂载也可以呀!
/proc 系统核心与执行程序的一些信息。例如你的网络状态的问题啦!这个目录将在启动 Linux 的时候自动的被挂上,而且该目录底下不会占去硬盘空间!因为里面都是『内存』内的数据啦
/root 系统管理员的家目录
/sbin 放置一些系统管理常用的程序,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。与 /bin 不太一样的地方,这个目录下的程序通常是给 root 等系统管理员使用的程序喔!
/tmp 这是让一般使用者暂时存放档案的地方,例如你在安装 Linux 下的软件时,可能软件预设的工作目录就是 /tmp ,所以你要定期的清理一下,当然,重要数据最好不要放在这里!
/usr 这是最重要的一个目录了,里面含有相当多的系统信息,内有许多目录,用来存放程序与指令等等。这个目录有点像是 Windows 底下的『Program Files』那个目录说~
/usr/bin 放置可执行程序,如前所说,这个目录的档案与 /bin 几乎是相同的。
/usr/include 一些套件的header檔。基本上,当我们在以 tarball 方式( *.tar.gz 的方式安装软件)安装某些数据时,会使用到的一些函式库都在这个目录底下喔!
/usr/lib 内含许多程序与子程序所需的函式库。
/usr/local 在你安装完了 Linux 之后,基本上所有的配备你都有了,但是软件总是可以升级的,例如你要升级你的 proxy 服务,则通常软件预设的安装地方就是在 /usr/local 中( local 是『当地』的意思),同时,安装完毕之后所得到的执行文件,为了与系统原先的执行文件有分别,因此升级后的执行档通常摆在 /usr/local/bin 这个地方。 

给个建议啦,通常 VBird 都会将后来才安装上去的软件放置在这里,因为便于管理呦!

/usr/sbin 放置管理者使用程序,与 /sbin 类似的功能
/usr/share/doc 放置一些系统说明文件的地方,例如你安装了 lilo 了,那么在该目录底下找一找,就可以查到 lilo 的说明文件了!很是便利!
/usr/share/man 放置一些程序的说明文件的地方,那是什么?呵呵!就是你使用 man 的时候,会去查询的路径呀!例如你使用 man ls 这个指令时,就会查出 /usr/share/man/man1/ls.1.bz2 这个说明档的内容啰!
/usr/src 这是放置核心原始码的预设目录,未来我们要编译核心的时候,就必须到这个目录底下呦!
/usr/X11R6 X Window System存放相关档案的目录
/var 这个目录可就重要了!所有服务的登录文件或错误讯息档案(log files)都在 /var/log 里面,此外,一些数据库如 MySQL 的数据库则在 /var/lib 里头,此外,使用者未读邮件邮件的预设放置地点为 /var/spool/mail !呵呵!你说重不重要呀!?

本章习题练习 ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )
2002/07/18:第一次完成
2003/02/06:重新编排与加入 FAQ

2002/ 02/18以来统计人数


Designed by VBird during 2001-2004.  Aerosol Lab.