Linux是一个多用户的操作系统,正确的设置文件权限非常重要。
1.1 权限设置针对的用户
Linux为三种人准备了权限——文件所有者,文件属组用户和其他人。其中root用户不应该算在其他人中,因为root用户具有控制一台计算机的完整权限。文件所有者一般是文件的创建者,但也不一定,可以中途改变一个文件的属主,但是必须由root用户来实施。
可以将文件交给一个组,这个组就是文件的属组,文件属组中的用户成员享有对该文件的某些特殊权限,一帮情况下其他人享有最低的权限。
1.2 需要设置的权限
文件相关的权限一般由三种:读取(r) 写入(w)以及执行(x);对于文件而言读取权限意味着可以打开并查看文件的内容,写入权限意味着对文件的修改,而文件的可删除和重命名是由父目录的权限来控制的。
要让一个文件可执行,必须设置其可执行权限,可执行文件有两类,一是可以直接由CPU运行的二进制文件;另一类是Shell脚本程序。
对于目录而言,所谓的执行权限实际控制着用户能否进入目录,而读取权限控制目录中的内容能够列出,写入权限控制着目录中的创建,删除和重命名文件。
1.3 查看文件和目录的属性
使用下面的命令查看一个文件或者目录的详细信息:
$ ls -l /bin/login
查看一个目录的信息使用-ld命令:
$ ls -ld ./etc/
1.4 改变文件所有权:chown和chgrp
chown命令用于改变文件的所有权。 chown命令的基本语法如下:
chown [OPTION]...[OWNER][:[GROUP]] FILE...
上面的命令将FILE的属主更改为OWNER,属组更改为GROUP,举例如下:
$ sudo chown lewis:root days
将days文件的属主更改为lewis,而把其属组更改为root组。如果只要更改文件的属组,可以省略”:GROUP“,如果只改变属组那么可以省略前面的”OWNER“。这样一个一个的更改文件的所有权很是麻烦,可能一个目录下有多个文件和子目录,chown命令提供了-R命令,来改变一个目录下面的文件和子目录的所有权,
$ sudo chown -R :group iso/
将iso目录下的所有子目录和文件属组改为group。
Linux也提供了单独的chgrp命令来更改文件的属组,如:
$ sudo chgrp group days
同样chgrp可以使用-R命令对一个目录进行所有权的设置。
1.5 改变文件的权限:chmod
chmode用于改变文件的权限,使用”用户组+/-权限“的方式,来表示给相应的用户增加和减少权限,具体来说用户组包括:
u:文件属主
g:文件属组
o:其他人
a:所有人
而权限包括
r:读取
w:写入
x: 执行
以下面的命令为例:
$ sudo chmod u+x days
上述命令使得文件属主拥有了对文件days的执行权限。同样的也可以减少某个用户的权限,如将全部用户的执行权限去除:
$ sudo chmod a-x days
还可以直接通过”用户组=权限“的方式统一设置某个用户组的权限:
$sudo chmod ug=rw,o=r days
该命令将文件属主和文件属组都设置为拥有读写权限,其他人的权限改为只读权限。最后一种常用规则是”用户组1=用户组2“的方式,将用户组1的权限设置的和用户组2一致:
$sudo chmod o=u days
1.6 文件权限的八进制表示
上述的chmod助记符虽然意义明确,但是有时候显得太罗嗦了,系统管理员更喜欢用八进制语法来修改权限,其实八进制语法也是很简单的,权限一共有三种,那么就可以使用三位二进制来表示,那么rwx为三位,每一位置1表示拥有该权限,比如将文件设置为只写对应位为010,其八进制值为2,以此类推,我们也知道用户组包括文件属主(u),文件属组(g)以及其他人(o)三种,那么可以各自使用三位一共为9位来设置权限:
$ sudo chmod 711 prog
分析上面的命令,7对应u权限,1对应g权限,1对应o权限,所以设置后的结果为,u具有rwx权限,g具有x权限,o也具有x权限。
注意:只有文件的属主和root用户才有权修改文件的权限