对于普通文件和目录而言,名字和存取权限是一样的,所以下面的内容不仅适用于文件,它也同时适用于目录。
3.5.1 文件主
任何文件都有所有者和所有者组,这可以用“ls -l”显示出来(“-l”选项表示以长格式显示)。例如,执行如下命令:
$ ls -l junk
-rwx------ 1 yogin inca 27 Apr 24 14:12 junk
将显示文件junk的所有者为yogin,所有者所在组为inca,所有者一般是文件的创建者或拷贝此文件的人,一般说来,只有文件的所有者和root能删除该文件(其他用户只有被授于了相应权限后才行)。
文件的所有者可以通过命令chown(改变所有者)和chgrp(改变所处的组)来改变,但是这些命令通常是root使用的。例如执行以下两条命令:
# chown peter junk
# chgrp peter junk
显示改变为:
$ ls -l junk
-rwx------ 1 peter peter 27 Apr 25 20:27 junk
在root为其他用户拷贝/移动文件后,改变文件所有者是十分有用的。在您以root身份做完了工作后,您应该记住将文件的所有者改为恰当的用户。
3.5.2 文件存取权限
现在,任何用户可以把自己所有的文件的三种权限读(r)、写(w)和执行(x)赋于其它三类用户,这些用户分别为文件所有者(u),同组用户(g)和系统内的任何用户(o)。
您可以使用以下命令来检查文件的存取权限。
$ ls ?l 文件名
如果该文件对所有用户(所有者,同组,其他人)都具备所有的权限(读、写、执行),则会显示如下消息:
-rwxrwxrwx
跳过第一个“-”(如果为“d”则代表其为一目录),其中前三个字母代表文件所有者的权限,第二组三个字母代表与所有者同组人的权限,第三组为其他用户的权限。如果没授予相应权限,则以“-”替代。
在下面的示例中,文件的所有者为root,他对文件具有读、写和执行权限,但同组用户和其他用户对该文件只具备读和执行权限。
drwxr-xr-x 2 root root 21504 Apr 24 19:27 dev
第一个字母“d”,表示该文件为一个目录。
您可以修改您所有的文件的权限(使用命令chmod),例如,下面的命令将为所有用户赋予读文件junk权限。
$ chmod a+r junk
在上例中,除了“a”以外,还可以用“u”、“g”或“o”(分别代表所有者、同组用户和其他用户)。除了“+”(代表增加)外,还可以用“-”、“=”分别禁止或者设置某个权限,除了“r”,还可以设置“w”和“x”权限。
例如,下面的命令将禁止其他用户对文件junk的执行权限。
$ chmod o-x junk
除了使用字母“r”、“w”和“x”设置权限,您也可以使用数字代替,其中,读(read)的权限值为4,写(write)的权限值为2,执行(execute)的权限值为1。所以,4代表“只读”,5代表“读和执行”,6代表“读和写”,7代表“读、写和执行”。
例如,下面的命令将会对文件所有者和同组用户赋予全部权限,而对其他用户没有任何权限。
$ chmod 770 junlc
而命令
$ chmod 666 junk
将会给所有用户读和写的权限。
$ chmod 411 junk
上述命令赋予文件所有者读权限,对同组用户和其他用户赋予执行权限。
3.5.3 默认的文件配置权限
在一个新文件被创建后,它有一个默认的权限配置,该配置一般为“-rw-r--r―”。就是说,文件所有者可以读、写该文件,同组用户和其他用户只能读文件。同样,在默认配置中,用户不能读其他用户目录中的内容,因为每一个用户主目录的权限都被设定为“drwx------”。
您可以使用下面的命令检查新建文件的默认存取权限。
$ umask ?s
选项-s表示用字符的形式显示结果。同样,您也可以修改新建文件的默认文件权限,命令如下:
$ umask u=rwx,g=,o=
它会在创建新文件时给文件所有者以全部权限,而同组用户及其他用户没有任何权限。
在umask中的数字设置方式与chmod命令相反,它代表的是要禁用的权限。因此,umask 000会给全部用户赋予新创建文件的全部权限,而命令umask 077会给文件所有者全部权限而其他人什么权限也没有。
3.5.4 如何设置SUID位
如果MP3播放器在工作时总被打断,那可能是因为它没有被分配足够多的运行时间。可能您同时运行了太多CPU重负荷的程序,也可能是MP3播放器的运行优先级不够高(优先级可以用nice命令来调整,关于nice的详细说明请用命令man nice获取)。
由于root身份运行的程序比其他用户程序具有比较高的优先级,所以如果以root身份来运行MP3播放器,可能播放就正常了。解决MP3播放器的问题是为其设置SUID位,使其他用户在使用播放器时的“有效用户ID”也为root。
例如下面的命令对x11amp设置其SUID位。
$ chmod a+s x11amp
要检查结果,输入如下:
$ ls -l x11amp
-rwsr-sr-x 1 root root 319172 Mar 13 1998 x11amp
其中第一个“s”表示设置了用户的SUID位,第二个“s”表示设置了组SUID位。因此,任何人在执行x11amp时,其有效用户ID为该程序的所有者,而有效组ID为该程序所有组的ID,在本例中,两者都为 root。
设置SUID可能会给系统带来安全漏洞。上一个示例是在一个封闭的局域网环境中进行的,而且程序来源也很清楚,才设置了SUID位。
3.6 用at和cron