这里刚刚我们有提到说,一个 Linux 的档案里面至少就有九个属性(三个为一组),而且还不包含拥有者与所属群组呢!真是复杂!那么,我们要如何改变 Linux 档案的属性呢?还有,档案还有所谓的『拥有者、拥有群组』及 SUID, SGID 等等一大堆的属性,唉!真麻烦!还有更麻烦的呢!你怎么知道你在建立一个目录或者是档案之后,该档案或目录的预设属性权限是什么!?无论如何,要了解 Linux 这些档案的属性总是需要了解的,尤其这些档案的属性对于你的系统安全很有帮助的呢!
chown :改变档案所属人
chgrp :改变档案所属群组
chmod :改变档案的属性、 SUID 、等等的特性
umask :改变建立目录或档案的预设属性
· 改变拥有者与所属群组 ( chown, chgrp ):
嗯!如果我以 root 的身份将我的 root 的 .bashrc 这个 shell 的设定档案 copy 给 vbird 这个用户的话,那么你会发现如下的问题:
发现了吗?你的 .bashrc 的档案所有人变成了 root 啰!那么你在你登入 Linux 之后,就不可以将你的 .bashrc 档案的内容作修改了!这个问题常常发生在档案拷贝的过程中!所以,当你将一个档案拷贝给其他人的时候,请千万记得变更一下档案的属性!如何作呢?就使用 chown 吧!
"
· 上面的例子中,第一行是将 .bashrc 变成 vbird 的,而『 vbird:vbird 』第一个是『所有人』第二个是『所有群组』如果你只是下达 chown vbird .bashrc 的话,那的该档案的属性就会变成『 vbird root 』的情况呦!那么第二行的意义呢?多一个 -R (需要大写)则表示将 /home/vbird 这个目录底下(连同此目录)所有的档案的拥有者与所属群组都变成是 vbird 的!
· 改变九个属性 ( chmod ):
其实, Linux 档案的属性不只九个呦!不过这里不打算写的太复杂!先说一些简单的,较难的以后有空再说吧!先复习一下刚刚上面说的:
-rwxrwxrwx
这九个属性是三个三个一组的!其中,我们可以使用数字来代表各个属性,各属性的对照表如下:
r:4
w:2
x:1
而同一组的数字是相加的!而更改属性的指令为 chmod!举例来说,如果要将所有的属性都打开,那么就下达:
[root @tsai /root]# chmod 777 .bashrc
由于一个档案有三组属性,所以你可以发现上面 777 为三组,而由于我们将所有的属性都打开,所以数字都相加,亦即『r+w+x = 4+2+1 = 7』。
那如果要将属性变成『 -rwxr-xr-- 』呢?那么就成为 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下达 chmod 754 filename。最
常发生的一个问题就是,常常我们以 vi 编辑一个 shell 的文字档后,他的属性通常是 -rw-rw-rw- 也就是 666 的属性,如果要将他变成可执行档,并且不要让其他人修改此一档案的话,那么就需要 -rwxr-xr-x 这一个 755 的属性,所以 chmod 755 test.sh 就需要这样做啰!
另外,有些档案你不希望被其他人看到,例如 -rwxr-----,那么就下达 chmod 740 filename 吧!
· 改变九个属性方法二 ( chmod ):
还有一个改变属性的方法呦!从之前的介绍中我们可以发现,基本上就九个属性分别是(1)user (2)group (3)others 三群啦!那么我们就可以藉由 u, g, o 来代表三群的属性!那么读写的属性就可以写成了 r, w, x 啰!也就是可以使用底下的方式来看:
chmod u o g + = - r w x
· 来实作一下吧!假如我们要『设定』一个档案的属性为『-rwxr-xr-x』时,基本上就是:
o u:具有可读、写、执行
o g 与 o: 具有读与执行
所以就是:『 chmod u=rwx,og=rx filename 』
那么假如是『 -rwxr-xr-- 』?可以使用『 chmod u=rwx,g=rx,o=r filename 』来设定,而如果是要将属性去掉呢?!就可以使用『chmod u=rwx,g=rx,o-rwx filename 』啰!呵呵!多多实作一下,你就会知道如何改变属性啰!
· 如何开放 SUID 与 SGID 的属性 ( chmod )?!
前面介绍过 SUID 与 SGID 的功能,那么如何开启档案使成为具有 SUID 与 SGID 的权限呢?!这就需要刚刚的数字更改权限的方法了!刚刚我们说过数字型态个更改权限方式为『三个数字』的组合,那么如果在这三个数字之前再加上一个数字的话,那最前的面数字就代表这两个属性了!
o 4 为 SUID
o 2 为 SGID
o 1 是一个标签,当以 1 设定该档案的时候,那么该档案只有所有者能够删除!(root 除外)
假设要将一个档案属性改为『-rwsr-xr-x』时,由于 s 在使用者权限中,所以是 SUID ,因此,在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来设定!如果要将该档案改成只有所有人可以删除的话,而且允许任何人写入的话,可以使用:『 chmod 1766 filename 』,输出的结果会是:『 -rwxrw-rwT 』嘿!多了个 T 呢!真好玩!!
· 改变预设的建立档案或目录的属性: umask
OK!那么现在我们知道如何建立或者是改变一个目录或档案的属性了,不过,您知道当你建立一个新的档案或目录时,他的预设属性会是什么吗?呵呵!那就与 umask 有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定『目前使用者在建立档案或目录时候的属性预设值』,他的指定条件以底下的方式来指定:
[test @test test]# umask 002 <==后面接三个数字
· 没错!就是 umask 之后接三个数字!那么如何来指定呢?主要还是跟 Linux 的档案属性(那九个属性, r, w, x )有关的,而且是以分数的那一个关系为例的,而有底下的规则为辅:
o 若使用者建立为『档案』则预设没有 可执行(x) 项目,也就是最大为 666 分( -rw-rw-rw );
o 若使用者建立为『目录』则预设为所有权限均开放,( drwxrwxrwx )。
那么 umask 指定的是『该预设值需要减掉的权限!』注意了:
o 1为可执行;
o 2为可写入;
o 4为可读取。
所以啰!如果以上面的例子来说明的话,那么由于当使用者:
o 建立档案时:666-002 ==> 664 ==> -rw-rw-r--
o 建立目录时:777-002 ==> 775 ==> drwxrwxr-x
不相信吗?你只要使用 touch test 然后看看这个 test 的档案属性,就可以知道了!那么如何看你这个使用者目前的 umask 呢?直接下达 umask 即可!