Enghish Version

MandrakeUser.Org - Your Mandrake-Linux Knowledge Base!

* DocIndex - Basics

权限 第一篇

* 概念
* 了解权限的重要性

相关资源:

man chmod
man chown

LIGS, 3.1

Revision / Modified: April 21, 2002
Author: Tom Berger
Translator: Wu XiaoGuang

* 概念

Linux 通过帐号(account)来识别不同的用户。为了使用系统,您得告诉 Linux ,您是以什么身份(即您想要使用哪个帐号)登入的。完成这些后,您就被带到该帐号的 home 目录(/home/account,然后您就可以做很多事情了。

每个 UNIX 系统已经内置了一个帐号,这就是‘root’(超级用户)。这个帐号有些特别:home 目录是‘/root’,并且‘root’对系统有绝对的控制权。

这种方案的基本理念就是:将日常应用与系统管理分离。这样在常规使用系统时即使出错,也不至于对操作系统造成较大破坏。
这样也使得同一系统中可以有多位用户。这些增加的用户不一定是人——系统服务经常就有自己的帐号,所以他们也就不一定非要由‘root’来运行。这样如果系统服务的配置出了问题,也不会对操作系统产生恶劣影响。

那么,操作系统如何决定谁可以做什么呢?这就要引入权限(permission)的概念。

UNIX 系统中的每个文件都有权限的设定,由文件列出中的前十个字符及所由者来表示:

ls -l file
-rw-rw-r-- (...) owner group (...) file

UNIX 中的所有东东都要通过文件来管理,甚至对设备(通过‘/dev’下的设备文件),比如打印机、猫、声卡等等。如果您对某个代表设备的文件没有足够的权限,那您也就无法使用该设备。

权限的第一个概念是所有权。您对自己创建的文件或目录就有所有权,也可以通过‘chown’命令(改变所有者:‘change owner’的缩写)将所有权传给您。如果您拥有一个文件,通常就能对其进行任何操作。

但经常是多个帐号都需要获取某个文件或设备。如果每次某个人需要,就要改变这个文件的所由者,就太麻烦了。其实所有权不仅可针对单个帐号,还可用于 groups(组)。不同的组别由‘/etc/group’提供,这个文件中的条目类似于:

group_name:x:group_ID:group_members

要看看您当前帐号属于哪些组,可以用命令

groups

如果您属于对某个文件有一定权限的那个组,您就可以对该文件进行相应的操作,尽管您可能不是该文件的所有者。

通常一个 UNIX 系统中含有 60.000 个以上文件,其中的大多数对系统中的所有用户来说,都是可访问的。一种实现的办法是,创建一个大组,包含系统中的所有帐号,然后将文件都赋给这个大组。但由于权限不仅仅决定可以访问某个文件,还决定了何种程度的获取,这样的大组将破坏系统设计的最初意图:导致部分组员对某些文件缺少必要的权限,而另一些组员对该文件的权利又需要加以限制。这就是‘others’组产生的原因。这个特别的组对某文件的权限将赋给系统中的所有帐号。再看一下这个例子:

ls -l file
-rw-rw-r-- (...) owner group (...) file

其中 2-4 (rw-)字符描述了所有者的权限,5-7 (rw-)字符描述了组员拥有的权限,而 8-10 (r--)字符描述了其他帐号对这个文件的权限。

让我们从文件的归属转移到具体的权限类型。对于一个文件,您有多种处理方式:可以读取、编辑、删除,在一些情况下,还可以执行。权限限制的也正是这些动作,这就引入了 accessibility (获取程度)的概念。

被赋予的获取权限有三种:可读权(read ,以‘r’标识)、可写可删权(write ,以‘w’标识)、可执行权(execute ,以‘x’标识)。在上面的例子中,所有者和组员对文件有读、写/删的权利,而其他人只能读,不能改变文件的内容。
上面的这个文件还不能被运行。与 Windows 系统不同,文件要想被运行,不仅要包含可执行的内容(二进制或脚本文件),还必须设置成可执行( execution bit)。这样可以限制一些帐号运行某些文件或程序,当然,这一般是出于安全考虑。如果没有设成可执行,那即使‘root’也不能运行那个文件,但‘root’可以将任何文件设成可执行。但如果文件中没有可执行的内容,即便设成可执行,仍然无法真正地被运行。

目录的权限类似。由于目录的特点,有些权限的含义存在细小差别:‘r-x’指可以列出目录内容,并且可以进入该目录。‘rwx’指可以在目录中创建或删除文件。除了这两种权限,用其他任何权限组合,您都无法进入该目录。

(请注意,根据 Mandrake Linux 7 中 Mandrake Security Tools 的介绍,对于安装时选的或在‘DrakConf’设定的不同的安全级别,文件的默认权限也有所不同。)

* section index * top

* 了解权限的重要性

Unix/Linux 有一个显著的不同是所有输入/输出操作都通过文件来实现。例如,您将一个文件传送到打印机,可能实际上就送到了文件‘/dev/lp0’。如果您通过猫来上网,那所有数据的读写都要通过‘/dev/ttyS0’(或 S1/S2/S3)
结果是您或者执行的程序必须对相应文件由读写权,否则的话,将无法工作。对于目录也是如此:如果程序在您无法访问的目录中,您也就没有办法运行这个程序。许多配置问题都源于错误的权限设置,所以检查权限在纠错中是很重要的一步。

现在,您可能会问,反正这机器只有我一个人用,为什么还要有这些繁琐的权限?如果我一直用‘root’,不就可以做任何事了吗?
不应该这样做的原因之一: ‘root’只要错误地运行一个命令,就可以导致您的系统彻底完蛋;而普通用户则根本无法对系统造成大的伤害。特别是当您还是 Linux 初学者时,这种机制将保护系统不至于意外被破坏。
还有其他理由:
大多数程序都赋予普通用户运行的权限。所以当您以普通用户身份来执行这些程序时,如果发现这个程序运行失控,可以将其正常地杀掉,当然由于您运行的程序没有更多权限,也就无法对您的系统造成真正的破坏。但是,您想想,如果您是以‘root’来运行这个程序的话 …… 我相信您可以认识到这一点。

正是文件的运行权限使得这个文件可以被执行。许多脚本,如用 Perl 写的程序,甚至是简单的 shell 脚本都要依靠这个。如果您下载了一个脚本,但发现其无法运行,请检查一下,看其是否被设成可执行(详见下篇)

程序的运行需要不同的 user id (UID)。一些程序尽管由普通用户启动,但仍需要‘root’特权(如在‘/usr/X11R6/bin’下通过 Xwrapper 的 X 服务器),这类程序以‘s’标识:

-rws--x--x 1 root root [...] /usr/X11R6/bin/Xwrapper*

(星号‘*’告诉您这是个可执行文件)。

但是这样的程序也造成了安全隐患,因为骇客(crackers)可以利用这个来获得对机器的‘root’特权。所以,建议尽量减少这类程序的数量,并且要警惕这方面的安全警报。请注意:Linux 不会执行 SUID shell 脚本。

* section index * top

有些弄不清楚吗?;-) * 看一些实例吧 ……


Legal: All texts on this site are covered by the GNU Free Documentation License.
Standard disclaimers of warranty apply.