UNIX类文件安全简介
在类UNIX系统中,文件安全一直很重视,做得很实用,很安全。
UNIX类文件系统中,在记录每个文件的信息块中,每个文件除了记录它的创建时间,文件大小,还要记录文件的归属者,归属组,和文件模式。
文件的归属和模式很重要,这两点保证了每个文件被恰当的人或物所拥有(这里的`物‘通常是软件程序),从而杜绝其他所有的未授权的访问。
在这里我以Linux系统为例来说明这种机制:
当我们登录终端时,输入:
ls -l
命令用来显示文件,附加参数‘-l’(其他参数可以查看man,‘man ls’),来显示一些属性参数:
-rwxrwxr-x 1 none1 none2 10023 May 22 08:23 none3.sh
这其中,第一列显示了文件的模式,第三列显示了拥有者的名字,第四列显示了拥有组的名字,最后一列是文件名,辟开其他列先不看,先看这四列:
第一列(-rwxrwxr-x):
关于这种模式还可以写成0665,它是与BCD码对应的。rwx对应421,这样以来,rw-就是4|2|0 (|是或运算符),得出是6,其他的类似。
这一串可以表示三个读写和执行的属性,去掉前面的-,后面的三个一组,rwxrwxr-x 即可直观表示成(rwx)(rwx)(r-x),分别依依对应创建者,创建者的组,其他人或物。
r表示这个文件可以读,它若在创建者的属性中,表示创建的人可以读取它,如果它不在其他人或物属性中,其他人读取就会导致读取失败,创建组也是相同。
w表示这个文件可以写,同样只有在属性有该标志的人或物才可以写入。
x表示这个文件可以执行,UNIX类系统二进制文件不是随便就可以执行的,就是这个位起的作用。当一个文件被标志此标志,并且对应于相应的人或物拥有此标志才可以执行。比如上例:
none3.sh被分给创建者,组和其他,拥有执行权,所以任何人都可以执行它,如果现在有个文件属性如下:
-rwxr--r-- 1 none1 none2 10023 May 22 08:23 none3.sh
那么,只有文件的拥有者,‘none1’,才可以执行它,其他任何人(包括组)都无法执行,拥有者可以查看修改它,而其他任何人(包括组)只能查看它。
第三列(none1):
这项定义了文件的创建者,这个文件由none1所拥有。
第四列(none2):
这项定义了文件属于哪个组,这个文件归none2组有相应权限设置。
最后一列(none3.sh):
最后一列就是一个文件名。
还有一点,root用户对所有文件拥有权限,root除了不能立刻执行未设置执行位的文件,可以对文件进行所有文件操作,即使那个文件不属于root,甚至没有root的读写设置位。
在上面,我们创建了一个none3.sh的文件,这个文件归none1拥有,有none2组的权限设置位信息。
在系统中可以用工具,‘chown’,来修改文件的属性,关于chown的详细帮助,若要参考可以查看man,输入如下命令:
chown root:root none3.sh
即可把文件修改成创建者和组都为root,其他用户都无法修改此文件了。
这里再提一点,chown实际上是修改文件模式属性中对应的拥有者(或称创建者)和拥有组,即:
原来的文件none3.sh中的属性rwxrwxr-x中的rwxrwx对应none1,none2两个,而现在则对应于root,root这两个。
改了文件归属者,文件的读写执行模式位,也可以修改,如下:
chmod 0611 none3.sh
可以把刚才的那个文件改成这种模式:
-rw—x–x
关于这种BCD码形式的表达方法,上面已经说过了。
chmod其实是一种很常用的工具,在UNIX类系统中,比如自己写了一个Shell脚本的文件,要让它执行,必须要用chmod来设置执行属性位来达到。
当然,chmod的用途还有许多其他的场合,它主要用来修改文件读写执行模式属性,经常和chown配合来修改文件。