1.4.5 可以选择使用符号模式或绝对模式
上面的例子中既有绝对模式的,也有符号模式的,我们可以从中看出,如果使用该命令
的符号模式,可以设置或取消个别权限位,而在绝对模式中则不然。我个人倾向于使用符号
模式,因为它比绝对模式方便快捷。
1.5 目录
还记得在前面介绍c h m o d命令时讲过,目录的权限位和文件有所不同。现在我们来看看其
中的区别。目录的读权限位意味着可以列出其中的内容。写权限位意味着可以在该目录中创
建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。执行权限
位则意味着搜索和访问该目录(见表1 - 5、表1 - 6)。
表1-5 目录权限
r w x
可以列出该目录中的文件可以在该目录中创建或删除文件可以搜索或进入该目录
表1-6 目录权限举例
权限文件属主同组用户其他用户
drwx rwx r- x ( 7 7 5 ) 读、写、执行读、写、执行读、执行
drwx r-x r- - ( 7 5 4 ) 读、写、执行读、执行读
drwx r-x r- x ( 7 5 5 ) 读、写、执行读、执行读、执行
如果把同组用户或其他用户针对某一目录的权限设置为- - x,那么他们将无法列出该目录
中的文件。如果该目录中有一个执行位置位的脚本或程序,只要用户知道它的路径和文件名,
仍然可以执行它。用户不能够进入该目录并不妨碍他的执行。
目录的权限将会覆盖该目录中文件的权限。例如,如果目录d o c s具有如下的权限:
而其中的文件p a y的权限为:
那么a d m i n组的用户将无法编辑该文件,因为它所属的目录不具有这样的权限。
该文件对任何用户都可读,但由于它所在的目录并未给a d m i n组的用户赋予执行权限,所
以该组的用户都将无法访问该目录,他们将会得到“访问受限”的错误消息。
1.6 suid/guid
我们在前面曾经提到过s u i d和g u i d。这种权限位近年来成为一个棘手的问题。很多系统供
第1章文件安全与权限7
下载
应商不允许实现这一位,或者即使它被置位,也完全忽略它的存在,因为它会带来安全性风
险。那么人们为何如此大惊小怪呢?
s u i d意味着如果某个用户对属于自己的s h e l l脚本设置了这种权限,那么其他用户在执行这
一脚本时也会具有其属主的相应权限。于是,如果根用户的某一个脚本设置了这样的权限,
那么其他普通用户在执行它的期间也同样具有根用户的权限。同样的原则也适用于g u i d,执
行相应脚本的用户将具有该文件所属用户组中用户的权限。
1.6.1 为什么要使用suid/guid
为什么要使用这种类型的脚本?这里有一个很好的例子。我管理着几个大型的数据库系
统,而对它们进行备份需要有系统管理权限。我写了几个脚本,并设置了它们的g u i d,这样
我指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份
登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其
他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。
有相当一些U N I X命令也设置了s u i d和g u i d。如果想找出这些命令,可以进入/ b i n或/ s b i n目
录,执行下面的命令:
$ ls -l | grep '^...s'
上面的命令是用来查找s u i d文件的;
$ ls -l | grep '^...s..s'
上面的命令是用来查找s u i d和g u i d的。
现在我们明白了什么是s u i d,可是如何设置它呢?下面就来介绍这个问题。如果希望设置
s u i d,那么就将相应的权限位之前的那一位设置为4;如果希望设置g u i d,那么就将相应的权限
位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。
一旦设置了这一位,一个s将出现在x的位置上。记住:在设置s u i d或g u i d的同时,相应的
执行权限位必须要被设置。例如,如果希望设置g u i d,那么必须要让该用户组具有执行权限。
如果想要对文件l o g i n设置s u i d,它当前所具有的权限为rwx rw- r-- (741),需要在使用
c h m o d命令时在该权限数字的前面加上一个4,即chmod 4741,这将使该文件的权限变为r w s
rw- r - -。
$ chmod 4741 logit
1.6.2 设置suid/guid的例子
下面给出几个例子:
表1-7 设置s u i d / g u i d
命令结果含义
chmod 4755 rws r-x r- x 文文件被设置了s u i d,文件属主具有读、写和执行的权限,所有其
他用户具有读和执行的权限
chmod 6711 rws --s --s 文文件被设置了s u i d和g u i d,文件属主具有读、写和执行的权限,
所有其他用户具有执行的权限
chmod 4764 rws rw- r- - 文文件被设置了s u i d,文件属主具有读、写和执行的权限,同组用
户具有读和执行的权限,其他用户具有读权限
8 第一部分shell
下载
还可以使用符号方式来设置s u i d / g u i d。如果某个文件具有这样的权限: rwx r-x r- x,那么
可以这样设置其s u i d:
chmod u+s <filename>
于是该文件的权限将变为: rws r-x r-x
在查找设置了s u i d的文件时,没准会看到具有这样权限的文件:rwS r-x r- x,其中S为大写。
它表示相应的执行权限位并未被设置,这是一种没有什么用处的s u i d设置,可以忽略它的存在。
注意,c h m o d命令不进行必要的完整性检查,可以给某一个没用的文件赋予任何权限,但
chmod 命令并不会对所设置的权限组合做什么检查。因此,不要看到一个文件具有执行权限,
就认为它一定是一个程序或脚本。
1.7 chown和chgrp
当你创建一个文件时,你就是该文件的属主。一旦你拥有某个文件,就可以改变它的所
有权,把它的所有权交给另外一个/ e t c / p a s s w d文件中存在的合法用户。可以使用用户名或用
户I D号来完成这一操作。在改变一个文件的所有权时,相应的s u i d也将被清除,这是出于安
全性的考虑。只有文件的属主和系统管理员可以改变文件的所有权。一旦将文件的所有权交
给另外一个用户,就无法再重新收回它的所有权。如果真的需要这样做,那么就只有求助于
系统管理员了。
c h o w n命令的一般形式为:
chmod -R -h owner file
- R选项意味着对所有子目录下的文件也都进行同样的操作。- h选项意味着在改变符号链
接文件的属主时不影响该链接所指向的目标文件。
1.7.1 chown举例
这里给出几个例子:
文件p r o j e c t的所有权现在由用户l o u i s e交给了用户p a u l i n e。
1.7.2 chgrp举例
c h g r p命令和c h o w n命令的格式差不多,下面给出一个例子。
用户p a u l i n e现在把该文件所属的组由a d m i n变为s y b a d m i n(系统中的另外一个用户组)。
1.7.3 找出你所属于的用户组
如果你希望知道自己属于哪些用户组,可以用如下的命令:
第1章文件安全与权限9
下载
或者可以使用i d命令:
1.7.4 找出其他用户所属于的组
为了找出其他用户所属于的组,可以用如下的命令:
上面的命令告诉我们用户m a t t y属于s y b a d m i n、a p p s g e n和p o s t用户组。
1.8 umask
当最初登录到系统中时, u m a s k命令确定了你创建文件的缺省模式。这一命令实际上和
c h m o d命令正好相反。你的系统管理员必须要为你设置一个合理的u m a s k值,以确保你创建的
文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。
在已经登录之后,可以按照个人的偏好使用u m a s k命令来改变文件创建的缺省权限。相应
的改变直到退出该s h e l l或使用另外的u m a s k命令之前一直有效。
一般来说,u m a s k命令是在/ e t c / p r o f i l e文件中设置的,每个用户在登录时都会引用这个文
件,所以如果希望改变所有用户的u m a s k,可以在该文件中加入相应的条目。如果希望永久性
地设置自己的u m a s k值,那么就把它放在自己$ H O M E目录下的. p r o f i l e或. b a s h _ p r o f i l e文件中。
1.8.1 如何计算umask值
u m a s k命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、
其他用户)存在一个相应的u m a s k值中的数字。对于文件来说,这一数字的最大值分别是6。系
统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用c h m o d命令增加这一
权限。目录则允许设置执行权限,这样针对目录来说, u m a s k中各个数字最大可以到7。
该命令的一般形式为:
umask nnn
其中n n n为u m a s k置0 0 0 - 7 7 7。
让我们来看一些例子。
计算出你的u m a s k值:
可以有几种计算u m a s k值的方法,通过设置u m a s k值,可以为新创建的文件和目录设置缺
省权限。表1 - 8列出了与权限位相对应的u m a s k值。
在计算u m a s k值时,可以针对各类用户分别在这张表中按照所需要的文件/目录创建缺省
权限查找对应的u m a s k值。
例如,u m a s k值002 所对应的文件和目录创建缺省权限分别为6 6 4和7 7 5。
还有另外一种计算u m a s k值的方法。我们只要记住u m a s k是从权限中“拿走”相应的位即
可。
10 第一部分shell
下载
表1-8 umask值与权限
u m a s k 文件目录
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0
例如,对于u m a s k值0 0 2,相应的文件和目录缺省创建权限是什么呢?
第一步,我们首先写下具有全部权限的模式,即7 7 7 (所有用户都具有读、写和执行权限)。
第二步,在下面一行按照u m a s k值写下相应的位,在本例中是0 0 2。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即
可。
这就是上面的例子,其中u m a s k值为0 0 2:
1) 文件的最大权限rwx rwx rwx (777)
2) umask值为0 0 2 - - - - - - -w-
3) 目录权限rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限rw- rw- r-- (664) 这就是文件创建缺省权限
下面是另外一个例子,假设这次u m a s k值为0 2 2:
1) 文件的最大权限rwx rwx rwx (777)
2 ) u m a s k值为0 2 2 - - - -w- -w-
3) 目录权限rwx r-x r-x (755) 这就是目录创建缺省权限
4) 文件权限rw- r-- r-- (644) 这就是文件创建缺省权限
