初次接触 Linux 的朋友大概会觉得很怪异,怎么『Linux 有这么多使用者,还分什么群组,有什么用?』。 这个『用户与群组』的功能可是相当健全而好用的一个安全防护呢!怎么说呢?由于 Linux 是个多人多任务的系统 ( 已经提过若干次啰! ),因此可能常常会有多人同时使用这部主机来进行工作的情况发生,为了考虑每个人的隐私权,因此,这个『档案拥有者』的角色就显的相当的重要了!例如当你 将你的e-mail情书转存成档案之后,放在您自己的家目录,您总不希望被其他人看见自己的情书吧?这个时候,你就把该档案设定成『只有档案拥有者,就是 我,才能看与修改这个档案的内容』,那么即使其他人知道你有这个相当『有趣』的档案,不过由于您有设定适当的权限,所以其他人自然也就无法知道该档案的内 容啰!
那么群组呢?为何要配置文件案还有所属的群组?其实,群组最简单的功能之一,就是当您在团队开发资源的时候最有用啦!举个例子来说好了,假如在我的主机上面有两个团体,这第一个团体名称为 testgroup 而他的成员是 test1, test2, test3 三个,第二个团体名称为 treatgoup 他的团员为 treat1, treat2, treat3,这两个团体之间是互相有竞争性质的,但是却又要缴交同一份报告,然而每组团员又需要同时可以修改自己的团体内任何人所建立的档案,且不能让非自己团体以外的人看到自己的档案内容!这个时候怎么办?呵呵!在 Linux 底下可就很简单啦!我可以经由简易的档案权限设定,就能限制非自己团队( 亦即是群组啰 )的其他人不能够阅览内容啰!而且亦可以让自己的团队成员可以修改我所建立的档案!同时,如果我自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到我的档案数据,很方便吧!另外,如果 teacher 这个账号是 testgroup 与 treatgroup 这两个群组的老师,他想要同时观察两者的进度,因此需要两边的群组都能够进去观看,这个时候,您可以设定 teacher 这个账号,『同时支持 testgroup 与 treatgroup 这两个群组!』,也就是说,每个人都可以有多个群组的支持呢!
这样说或许你还不容易理解这个使用者与群组的关系吧?没关系,我们可以使用目前『家庭』的观念来进行解说喔!假设有一家人,家里只有三兄弟,分别 是王大毛、王二毛与王三毛三个人,而这个家庭是登记在王大毛的名下的!所以,『王大毛家有三个人,分别是王大毛、王二毛与王三毛』,而且这三个人都有自己 的房间,并且共同拥有一个客厅喔!这样说来应该有点晓得了喔!那个『王大毛家』就是所谓的『群组』啰,至于三兄弟就是分别为三个『使用者』,而这三个使用者是在同一个群组里面的 喔!而三个使用者虽然在同一群组内,但是我们可以设定『权限』,好让某些用户个人的信息不被群组的所有人查询,以保有个人『私人的空间』啦!而设定群组 共享,则可让大家共同分享喔!
- 由于王家三个人各自拥有自己的房间,所以,王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉喔!那样会被三毛 K 的!因为抽屉里面可能有三毛自己私人的东西,例如情书啦,日记啦等等的,这是『私人的空间』,所以当然不能让二毛拿啰!
- 由于共同拥有客厅,所以王家三兄弟可以在客厅打开电视机啦、翻阅报纸啦、坐在沙发上面发呆啦等等的!反正,只要是在客厅的玩意儿,三兄弟都可以使用喔!因为大家都是一家人嘛!
好了,那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦!这个时候,除非王家认识张小猪,然后开门让张小猪进 来王家,否则张小猪永远没有办法进入王家,更不要说进到王三毛的房间啦!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朋友,那么张小猪就可以 透过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的『其他人, Others 』啰!因此,我们就可以知道啦,在 Linux 里面,任何一个档案都具有『User, Group 及 Others』三个权限!我们可以将上面的说明以底下的图示来解释:
大致了解了 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 第一栏
二 三 四
五 六
七
|
[-][rwx][r-x][r--]
1 234 567 890 1 为:代表这个文件名为目录或档案(上面为档案) 234为:拥有人的权限(上面为可读、可写、可执行) 567为:同群组用户权力(上面为可读可执行) 890为:其他用户权力(上面为仅可读) |
-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 请说明两个档案的拥有者与其相关的权限为何? 答: |
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/ 请问 testgroup 这个群组的成员与其他人( others )是否可以进入本目录? 答: |
Linux 文件属性的重要性:
与 Windows 系统不一样的是,在 Linux 系统(或者说 Unix-Like 系统)当中,每一个档案都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢?基本上,最大的用途是在『安全性』上面的。举个简单的例子,在你的 系统中,关于系统服务的档案通常只有 root 才能读写,或者是执行,例如 /etc/shadow这一个账号管理的档案,由于该档案记录了你的系统中的所有账号的数据,因此是很重要的一个信息文件,当然不能让任何人读取,只有 root 才能够来读取啰!所以该档案的属性就会成为 [ -rw------- ]啰!
那么,如果你有一个开发团队,在你的团对中,你希望每个人都可以使用某一些目录下的档案,而非你的团队的其他人则不予以开放呢?以上面的例子来说,testgroup 的团队共有三个人,分别是 test1, test2, test3 !那么我就可以将 test1 的文件属性订为 [ -rwxrwx--- ]来提供给 testgroup 的工作团队使用啰!这可是相当重要的。
再举个例子来说,如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞啰!例如本来只有 root 才能做的开关机、ADSL 的拨接程序、新增或删除用户等等的指令,若被你改成任何人都可以执行的话,那么如果使用者不小心给你重新启动啦!重新拨接啦!等等的!那么你的系统不就 会常常莫名其妙的挂掉啰!而且万一你的用户的密码被其他不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些 root 的工作!可怕吧!因此,在你修改你的 linux 档案与目录的属性之前,一定要先搞清楚,什么是可变的,什么是不可变的!千万注意啰!
好了,我们已经知道档案权限对于一个系统的安全重要性了,也知道档案的权限对于使用者与群组的相关性了,好了,那么如何修改一的 档案的权限呢?又!有多少档案的权限我们可以修改呢?其实一个档案的权限很多嘛!大致上我们先介绍几个简单的,例如:群组、拥有者、各种身份的权限等等。chgrp :改变档案所属群组
chown :改变档案所属人
chmod :改变档案的属性、 SUID 、等等的特性
语法:
chgrp 组名 档案或目录 范例:
|
语法:
chown [ -R ] 账号名称 档案或目录 chown [ -R ] 账号名称:组名 档案或目录 范例:
|
语法:
cp 来源档案 目标文件 |
[root@test
root]# cp .bashrc .bashrc_test
[root@test root]# ls –al .bashrc* -rw-r--r-- 1 root root 226 Feb 16 2002 .bashrc -rw-r--r-- 1 root root 226 Oct 21 14:24 .bashrc_test |
语法:
chmod [-R] xyz 档案或目录 xyz 为同三组 rwx 属性数值的相加 |
[root@test
root]# ls –al .bashrc
-rw-r--r-- 1 root root 226 Feb 16 2002 .bashrc [root@test root]# chmod 777 .bashrc [root@test root]# ls –al .bashrc -rwxrwxrwx 1 root root 226 Feb 16 2002 .bashrc |
另外,有些档案你不希望被其他人看到,例如 -rwxr-----,那么就下达 chmod 740 filename 吧!
符号类型改变档案型态
还有一个改变属性的方法呦!从之前的介绍中我们可以发现,基本上就九个属性分别是(1)user
(2)group (3)others 三群啦!那么我们就可以藉由 u, g, o 来代表三群的属性!此外,
a 则代表 all 亦即全部的三群!那么读写的属性就可以写成了 r, w, x 啰!也就是可以使用底下的方式来看:
|
g o a |
-(除去) =(设定) |
w x |
|
[root@test
root]# chmod u=rwx,og=rx .bashrc
[root@test root]# ls –al .bashrc -rwxr-xr-x 1 root root 226 Feb 16 2002 .bashrc |
[root@test
root]# ls –al .bashrc
-rwxr-xr-x 1 root root 226 Feb 16 2002 .bashrc [root@test root]# chmod a+w .bashrc [root@test root]# ls –al .bashrc -rwxrwxrwx 1 root root 226 Feb 16 2002 .bashrc* |
[root@test
root]# chmod a-x .bashrc
[root@test root]# ls –al .bashrc -rw-rw-rw- 1 root root 226 Feb 16 2002 .bashrc |
Linux 的档案与 Windows 的档案能不能互相使用?为何可以?为何不行?这些咚咚都涉及到 Linux 的文件类型与文件格式喔!底下我们就来谈一谈这些基本的观念吧!
- 文件格式:
什么是文件格式呢?就是你的操作系统用来存取的数据格式,例如我们知道 Windows 用来存取硬盘的数据格式为 FAT (或 FAT16 ) ,而 Windows 2000 也有所谓的 NTFS 文件格式等等,至于 Linux 的正统文件格式为 ext2 这一个。不过,目前 Linux 所能支持的文件格式非常的多,不过,你必须要将你所想要支持的文件格式编译到你的核心当中才能被支持!因为如果核心不认识该文件格式的话,那么自然就无法取用呀!因此,您可以发现, Windows 与 Linux 安装在同一个硬盘的不同 partition 时, Windows 将不能取用 Linux 的硬盘数据, Why ? 就因为 Windows 的核心不认识 Linux 的文件系统呀!
目前 Mandrake 9.0 预设的文件格式为 ext3 (Third Extended File System ),是 ext2 文件格式的升级版,不过也向下兼容 ext2, ext 等等。另外,如果你需要将你原有的 Windows 系统也挂载在 Linux 底下的话,那么 Linux 也支持 MS-DOS, VFAT, FAT, BSD 等等的文件格式,至于 Window NT 的 NTFS 文件格式则不见得每一个 Linux distribution 都有支持,例如 Red Hat 预设的核心就不支持 NTFS,但是 Mandrake 9.0 的核心竟然预设有支持 ntfs 耶!真高兴!问我怎么看出来的?呵呵! Linux 能够支持的文件格式与核心是否有编译进去有关,所以你可以到你的 Linux 系统的底下看一看,如果有你想要的文件格式,那么这个核心就有支持啦!目前使用的最广泛的虽然还是 ext2 ,不过,最近释出的 Linux distribution 大多已经预设采样 ext3 或 reiserfs 这种具有日志式管理( Journaling )的文件格式了。那为什么要使用 ext3 这种文件格式呢?我们采用第一个使用 ext3 做为 Linux distribution 的 Red Hat 公司中,首席核心开发者 Michael K. Johnson 的话:
/lib/modules/`uname –r`/kernel/fs
『为什么你想要从ext2转换到ext3呢?有四个主要的理由:可利用性、数据完整性、速度及易于转换』
『可利用性』,他指出,这意味着从系统中止到快速重新复原而不是持续的让e2fsck执行长时间的修复。ext3的日志式条件可以避免数据毁损的可能。他也指出: 『除了写入若干数据超过一次时,ext3往往会较快于ext2,因为ext3的日志使硬盘读取头的移动能更有效的进行』 然而或许决定的因素还是在Johnson先生的第四个理由中。 『它是可以轻易的从ext2变更到ext3来获得一个强而有力的日志式文件系统而不需要重新做格式化』。『那是正确的,为了体验一下ext3的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作及重新格式化的动作』。 |
除了设备文件是我们系统中很重要的档案,最好不要随意修改之外(通常他也不会让你修改的啦!),另一个比较有趣的档案就是连结档。如果你常常将应用程序捉到桌面来的话,你就应该知道在 Windows 底下有所谓的『快捷方式』。同样的,你可以将 linux 下的连结档简单的视为一个档案或目录的快捷方式。但是基本上这两个东西是不一样的!在 Windows 系统的快捷方式中,你将无法修改主程序,但是在 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 |
请注意,每个目录都是依附在 / 这个根目录底下的,所以我们在安装的时候一定要有一个 / 对应的 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+found | 系统不正常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。例如你加装一棵硬盘于 /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 !呵呵!你说重不重要呀!? |
无论如何,每部主机的环境与功能用途都不相同,自然其磁盘的分配就会不太一样,因此,上面的设定您就看看就好,等您将整个网页内容全
K 完了,那么大概就知道怎样设定您的主机最恰当啦!接着下来,我们来谈一谈简单的档案与目录的管理了!
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室