深入理解Solaris 10 文件权限

间隙填充
正睿科技  发布时间:2009-07-16 09:11:29  浏览数:5890

不管在什么操作系统中,文件和文件系统都是非常重要的概念。文件可以简单定义为有名字的一组相关信息的集合。在Solaris 10 系统中,文件的准确定义是不包含有任何其它结构的字符流。也就是说,文件中字符与字符之间除了同属于一个文件之外,不存在任何其它的关系。文件中字符关系是由使用文件的应用程序来建立和解释的。每一个文件都具有特定的属性。Solaris 10系统的文件属性比较复杂,主要包括文件类型和文件权限两个方面。

一 、Solaris 10文件类型

Solaris 10 下的文件可以分为5种不同的类型:普通文件、目录文件、链接文件、设备文件和管道文件。

1.普通文件

这是一类常见的文件,也是常使用的一类文件,其特点是不包含有文件系统的结构信息。通常所接触到的文件,包括图形文件、数据文件、文档文件、声音文件等都属于这种文件。这种类型的文件按其内部结构又可细分为文本文件和二进制文件。

2.目录文件

目录文件是用于存放文件名及其相关信息的文件,是内核组织文件系统的基本节点。目录文件可以包含下一级目录文件或普通。

3.链接文件

链接文件是一种特殊的文件,实际上是指向一个真实存在的文件的链接。这有点类似于Windows下的快捷方式。根据链接文件的不同,它又可以细分为硬链接文件和符号链接文件。

4.设备文件

设备文件是Solaris 10 中最特殊的文件。正是由于它的存在,使得Solaris 10 系统可以十分方便地访问外部设备。Solaris 10 系统为外部设备提供一种标准接口,将外部设备视为一种特殊的文件。用户可以像访问普通文件一样访问外部设备,使Solaris 10 系统可以很方便地适应不断发展的外部设备。通常Solaris 10 系统将设备文件放在/dev目录下,设备文件使用设备的主设备号和次设备号来指定某外部设备。根据访问数据方式的不同,设备文件又可以细分为块设备和字符设备文件。

5.管道文件

管道文件是一种很特殊的文件,主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,可以通过管道文件。一个进程将需传递的数据或信息写入管道的一端,另一进程则从管道的另一端取得所需的数据或信息。通常管道是建立在调整缓存中。

二 、Solaris 10文件的权限

Solaris 10 系统是一个典型的多用户系统,不同的用户处于不同的地位。为了保护系统的安全性,Solaris 10 系统对不同用户访问同一文件的权限做了不同的规定。 对于一个Solaris 10 系统中的文件来说,它的权限可以分为三种:读的权限、写的权限和执行的权限,分别用r、w和x表示。不同的用户具有不同的读、写和执行的权限。   对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Solaris 10 系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其它用户。因此,Solaris 10 系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的文件访问权限。

1  Solaris 10文件权限的概念

Solaris 10 文件系统安全模型是通过给系统中的文件赋予两个属性来起作用的,这两个赋予每个文件的属性称为所有者(ownership)和访问权限(access rights)。Solaris 10 下的每一个文件必须严格地属于一个用户和一个组。

图1是在我机器上的/tmp目录下运行ls -l命令的情况。

图1 Solaris 10文件和文件夹的权限

从上面显示的内容可以注意到,每个文件的目录条目都是以下面类似的一些符号开始:

-rw-r--r--

这些符号用来描述文件的访问权限类别,也就是常说的文件权限。这些访问权限指导Solaris 10 根据文件的用户和组所有权来处理所有访问文件的用户请求。总共有10种权限属性,因此一个权限列表总是10个字符的长度。它的格式遵循下列规则:

◆ 第1个字符表示一种特殊的文件类型。其中字符可为d(表示该文件是一个目录)、b(表示该文件是一个系统设备,使用块输入/输出与外界交互,通常为一个磁盘)、c(表示该文件是一个系统设备,使用连续的字符输入/输出与外界交互,如串口和声音设备),“.”表示该文件是一个普通文件,没有特殊属性。

◆ 2~4个字符用来确定文件的用户(user)权限,5~7个字符用来确定文件的组(group)权限,8~10个字符用来确定文件的其它用户(other user,既不是文件所有者,也不是组成员的用户)的权限。其中,2、5、8个字符是用来控制文件的读权限的,该位字符为r表示允许用户、组成员或其它人可从该文件中读取数据。短线“-”则表示不允许该成员读取数据。与此类似,3、6、9位的字符控制文件的写权限,该位若为w表示允许写,若为“-”表示不允许写。4、7、10位的字符用来控制文件的制造权限,该位若为x表示允许执行,若为“-”表示不允许执行。 读权限的情况如图2所示。

图2读权限的情况

写读权限的情况如图3所示

图 3 写读权限的情况

执行权限的情况如图4所示

图4 执行权限的情况

任何列在/etc/passwd文件中的用户都可以是一个文件的所有者,也称为该文件的用户。同样任何列在/etc/group文件中的组都可以是文件组的所有者,也简称为文件的组。下面来看两个例子,以便加深理解。首先来看一看图1中的第二行:

drwxr-xr-x   2 root     root         117  4月 28日 07:14 hsperfdata_root

因为第1个位置的字符是d,所以由此知道hsperfdata_root是一个目录。第2至4位置上的属性是rwx,表示用户root拥有权限列表显示guo中所有的文件、创建新文件或者删除guo中现有的文件,或者将guo作为当前工作目录。第5至7个位置上的权限是rwx,表示root组的成员拥有和root一样的权限。第8至10位上的权限仅是r--,表示不是root的用户及不属于root组的成员只有对hsperfdata_root目录列表的权限。这些用户不能创建或者删除hsperfdata_root中的文件。

下面再来看一看图1中的第一行:

-rw-r--r--   1 root     root           0  4月 28日 07:14 1111.txt

在该项中,第1个位置是短线“-”,表示该文件是一个普通文件,没有特殊属性。该文件对任何人都可读,只对user可写,user和admin的组成员可以执行该文件。

三 、修改文件或者目录权限 方法

1 使用chmod命令

格式:chmod命令有两种用法。一种是包含字母和操作符表达式的字符设定法(相对权限设定);另一种是包含数字的数字设定法(绝对权限设定)。

(1)字符设定法

chmod [ugoa] [+ | - | =] [rwxXstugo] 文件名

?          第一部分决定权限的授予者,第二部分决定对权限进行何种操作(添加、删除、设定),第三部分决定具体要授予的权限,三部分组成一个字符串,也就是mode参数值。详细描述如表-1所示。

描    述

授予者

u

用户,即文件、目录的所有者

g

同组用户,与文件属主有相同组ID的所有用户

o

其他用户

a

所有用户,它是系统默认值

操作符号

在原有权限中添加某个权限

在原有权限中删除某个权限

赋予新给定权限,并取消其他所有权限

权限位

r

设置读权限

w

设置写权限

x

设置执行权限

X

只有目标文件对某些用户是可执行的,该目标文件是目录时才追加x属性

s

设置SUID、SGID,g+s设置SGID,u+s设置SUID

t

保存程序的文本到交换设备上

u

与文件属主拥有一样的权限

g

与和文件属主同组的用户拥有一样的权限

o

与其他用户拥有一样的权限

?          实例应用如下。

如果一个系统管理员写了一个通知(news)让所有用户阅读,那么必须授权用户对这个文件有读权限,可以使用命令:

#chmod a=r news

?          (2)数字设定法

数字设定法的一般形式为:chmod [mode] 文件名

数字属性的格式应为3个0~7的八进制数,其顺序是(u)(g)(o)文件名,以空格分开要改变权限的文件列表,支持通配符。

数字表示的权限的含义如下:

?   0001:所有者的执行权限。

?   0002:所有者的写权限。

?   0004:所有者的读权限。

?   0010:组的执行权限。

?   0020:组的写权限。

?   0040:组的读权限。

?   0100:其他人的执行权限。

?   0200:其他人的写权限。

?   0400:其他人的读权限。

?   1000:粘贴位置位。

?   2000:假如这个文件是可执行文件,则为组ID位置位,否则其中文件锁定位置位。

?   4000:假如这个文件是可执行文件,则为用户ID位置位。

?   系统管理员写了一个通知(news)让所有用户阅读,那么必须授权用户对这个文件有读权限,可以使用命令:

#chmod 444 news2

?          上述命令中,数字444是如何计算出来的呢?0004为所有者的读权限,0040为组的读权限,0400为其他人的读权限,这3个数字相加就是0444(以上数字都是八进制数),如图5所示。

图5 分别用字符设定法和数字设定法修改文件权限

从图-中可以看到“chmod 444 news”和“chmod a=r  news”命令是等价的。

说明:因为Linux系统有能力支持多用户,在每一方面系统都会做出谁能读、写和执行的资源权力限制。这个权限以三个八位元的方式存储着,一个表示文件所属者,一个表示文件所属群组,一个表示其他人。这些数字以下列方式表示,如表2所示。

数    字

二进制数的表示

对应的权限表示形式

权限含义

0

000

---

没有任何权限

1

001

--x

可执行

2

010

-w-

可写

3

011

-wx

可写和可执行

4

100

r--

可读

5

101

r-x

可读和可执行

6

110

rw-

可读和可写

7

111

rwx

可读、可写和可执行

文件或者目录的用户能够使用chmod命令修改文件的权限。Chmod命令有两种方式:一种是字符方式,使用字符来修改文件的权限;另外一种是数字方式,使用3个数字的组合来修改文件的权限。

2 使用umask命令

很显然,系统中各种文件的权限设置对特定用户的数据安全有很大影响。但是要求用户逐一明确设置系统中每个文件的权限也是不现实的,为此,需要使用umask命令,该命令可以为用户账号中新文件的创建进行缺省设置。具体来说,umask是用来设置权限掩码的,权限掩码由3个数字组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时默认的权限。

格式:umask [-p] [-S] [mode]

[选项]如下。

?   -S:以文字的方式来表示权限掩码。

?   -p:以数字的方式来表示权限掩码。

?   mode:权限掩码。

说明:当最初登录到系统中时,umask命令确定了创建文件的默认模式。这一命令实际上和chmod命令正好相反。系统管理员必须要为你设置一个合理的umask值,以确保你创建的文件具有所希望的默认权限,防止其他非同组用户对你的文件具有写权限。在已经登录之后,可以按照个人的偏好使用umask命令来改变文件创建的默认权限。相应的改变直到退出该shell或使用另外的umask命令之前一直有效。一般来说,umask命令是在/etc/profile文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile文件中。

关于如何计算umask值,umask命令允许你设定文件创建时的默认模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最大值是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。

表3列出了常用的umask值及对应的目录和文件权限。

umask值

目录权限

文件权限

022

775

644

027

750

640

002

755

664

006

771

660

007

770

660

?          实例应用如下。

(1)如果想知道当前的umask值,可以使用没有任何参数的umask命令:

#umask

0022

(2)如果想要改变umask值,只要使用umask命令设置一个新的值即可:

#umask 002

?          (3)使用umask设置安全权限:

#  umask 117

#  umask -S

u=rw,g=rw,o=

?          上述命令把umask值改为177,结果只有文件所有者具有读写文件的权限,其他用户不能访问该文件。这显然是一种非常安全的状态。

其它问题

事实上,一个系统中的文件安全是一个综合问题,对于一些特殊的情况要做特殊的考虑。比如,对于设备文件的安全性、SUID/SGID的设置等。  一般来说,各Solaris 10 发行版在安装时就已经把设备文件的设置做得非常不错。但是对于磁盘设备而言,我认为惟一安全的还是只允许root用户进行读写。否则,其它用户的账号一旦被攻破,黑客通过访问磁盘很快就可以让系统崩溃。要做到这一点,可以使用以下命令:

#cd /dev

#chmod 600 sd*

Suid和Sgid是Solaris 10 系统中最复杂的属性,它跟一个系统的安全息息相关。我们可以利用chmod命令来清除或者设置一个文件的Suid/Sgid属性,具体方法如下所示。

将/usr/sbin/pppd程序设置为Suid/Sgid状态,使用的命令是:

#chmod ug+s /usr/sbin/pppd

要清除Sgid状态而保留Suid状态,可用以下命令:

#chmod g-s /usr/sbin/pppd

此外,如何装载文件系统,特别是将root文件系统装载为只读,以防止非授权的修改也比较重要。

3 使用图形界面

除了使用chmod 和umask外Solaris 10 在桌面环境下还可以使用图形方法,使用鼠标右键点击文件名称,执行权限一览进行设置,如图6。

图6 使用图形界面修改文件权限

总之,Solaris 10 下文件系统的安全问题是一个非常复杂的问题。通过本文的学习,读者对此应该有了一个较全面的了解,并且可以处理日常工作中常见的有关文件系统安全问题。