1.操作权限简介
Linux是多用户的操作系统,允许多个用户同时在系统上登录和工作。为了确保系统和用户的安全,Linux采取了很多的安全措施。用户在登入系统时需要输入用户名和口令,这样,就使系统可以通过用户的识别号(UID)来分别确定每个用户在登录系统后都做了些什么,也可以用来区别不同用户所建立的文件或目录。
普通用户在系统上受到权限的制约,一个普通用户若要切换至其他的普通用户甚至超级用户的工作目录,将会收到拒绝提示信息,例如:
2.3种基本的权限
在Linux中,将使用系统资源的人员分为4类:超级用户、文件或目录的属主、属主的同组人和世界上的其他人员。由于超级用户具有操作Linux系统的一切权限,所以不用指定超级用户对文件和目录的访问权限。对于其他3类用户都要指定对文件和目录的访问权限,对每一类用户都有如表3-10所示的3种基本的权限需要说明。
表3-10 文件或目录的3种基本的权限
提示
1.目录上只有执行权限,表示可以进入或穿越该目录进入更深层次的子目录。
2.目录上只有执行权限,要访问该目录下的有读权限的文件,必须知道文件名。
3.目录上只有执行权限,不能列出目录列表也不能删除该目录。
4.目录上执行权限和读权限的组合,表示可以进入目录并列出目录列表。
5.目录上执行权限和写权限的组合,表示可以在目录中创建、删除和重命名文件。
3.查看文件和目录的权限
在Linux中通过给3类用户分配3种基本权限,就产生了文件或目录的9个基本权限位。可以使用带l参数的ls命令查看文件或目录的权限,例如:
每一行显示一个文件或目录的信息,这些信息包括文件的类型、文件的权限、文件的属主(第3列)、文件的所属组(第4列),还有文件的大小以及创建时间和文件名。
输出列表中每一行的第一列的第一个字母指示了该文件的类型。第一列的其余9个字母可分成3组,3个字母一组。这3组分别代表文件属主的权限、文件所属组的权限、其他用户的权限。每组中的3个栏位分别表示了读取权限(r)、写入权限(w)、执行权限(x)或没有相应的权限(-)。
提示
当某用户访问系统中的某文件时:
(1)若访问者的UID与文件的UID匹配,就应用用户(user)权限。
(2)否则,若访问者的GID与文件的GID匹配,就应用群组(group)权限。
(3)如果都不匹配,就应用其他用户(other)权限。
通常将由ls-l命令输出的第一列称为文件或目录的权限字符串。表3-11中列出了几个权限字符串的说明。
表3-11 权限字符串举例
注意
把权限设为666会允许每个人对文件或目录都有读取和写入的权限。把权限设为777允许每个人都有读取、写入和执行的权限。这些权限可能会允许对机密文件的篡改,因此,一般来说,使用这类设置是不明智的。
系统管理员和文件的属主可以根据需要来更改文件的权限。更改文件和目录的操作权限使用chmod命令进行,有两种设置方法:文字设定法和数值设定法。
1.文字设定法
chmod命令的文字设定法格式如下:
其中第1个选项表示要赋予权限的用户,具体说明如表3-12所示。
表3-12 用户选项说明
第2个选项表示要进行的操作,具体说明如表3-13所示。
表3-13 权限操作选项说明
第3个选项是要分配的权限,具体说明如表3-14所示。
表3-14 分配权限选项说明
操作步骤3.5 chmod命令的文字设定法举例
2.数值设定法
chmod命令的数值设定法格式如下:
其中,n1代表属主的权限,n2代表组用户的权限,n3代表其他用户的权限,这3个选项都是八进制数,其意义如表3-15所示。
表3-15 权限字符说明
操作步骤3.6 chmod命令的数值设定法举例
管理员有时还需要更改文件的属主和所属的组。除了root用户之外,只有文件的属主才有权更改其属主和所属组,即用户可以把属于自己的文件转让给他人。改变文件的属主和组可以用chown命令,命令格式如下:
操作步骤3.7 chown命令使用举例
用户可以使用umask命令设置文件的默认生成掩码。默认的生成掩码告诉系统当创建一个文件或目录时不应该赋予其哪些权限。如果用户将umask命令放在环境文件(.bash_profile)中,就可以控制所有新建的文件或目录的访问权限。
umask命令的格式如下:
其中,u1表示的是不允许属主有的权限;u2表示的是不允许同组人有的权限;u3表示的是不允许其他人有的权限。
操作步骤3.8 umask命令使用举例
1.SUID、SGID和sticky-bit
除了上述的基本权限之外,还有特殊权限存在。由于特殊权限会拥有一些“特权”,因而用户若无特殊需要,不应该去打开这些权限,避免安全方面出现严重漏洞,甚至摧毁系统。3个特殊权限位是对可执行文件或目录进行的,使用了特殊权限将影响执行者的操作权限。对文件可以设置SUID和SGID特殊权限;对目录可以设置SGID和sticky-bit特殊权限。表3-16和表3-17中分别列出了文件和目录特殊权限的说明。
表3-16 文件的特殊权限说明
表3-17 目录的特殊权限说明
一个设置了SUID的典型例子是passwd程序,它允许普通用户改变自己的口令,这是通过改变/etc/shadow文件的口令字段实现的。然而系统管理员决不允许普通用户拥有直接改变/etc/shadow文件的权利,因为这绝对不是个好主意。解决方法是将passwd程序设置SUID,当passwd程序被执行时将拥有超级用户的权限,而passwd程序运行结束后又回到普通用户的权限。下面显示passwd程序的权限。
一个设置了sticky-bit的典型例子是系统临时文件目录/tmp,这样就避免了不法用户存心破坏,恣意乱删其他用户放置的文件。下面显示/tmp目录的权限:
2.SUID、SGID和sticky-bit的表示
从上面的显示可以看出:SUID是占用属主的x位置来表示的;SGID是占用组的x位置来表示的;sticky-bit是占用其他人的x位置来表示的。
SUID、SGID和sticky-bit也可用1位八进制数(3位二进制数)表示,如表3-18所示。
表3-18 特殊权限的数值表示
3.设置特殊权限
设置特殊权限仍旧使用chmod命令,并且依然有字符设定法和数值设定法之分。
●使用chmod命令的字符设定法时,可以使用s和t权限字符。
●使用chmod命令的数值设定法时,要使用4位八进制数,其中第1位八进制数用于设置特殊权限,后3位八进制数用于设置基本权限。
操作步骤3.9 使用chmod命令设置特殊权限举例
1.ACL权限
传统的UNIX/Linux使用UGO方式设置权限,具体地说就是通过user(用户)、group(组)、other(其他人)与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求,具有一定的局限性。
例如,目录/data的权限如下:
所有者与所属组均为root,在不改变所有者的前提下,要求用户tom对该目录有完全访问权限(rwx)。只能考虑以下两种办法(这里假设tom不属于root组)。
(1)给/data的其他人增加rwx权限。由于tom被归为其他人,其将拥有rwx权限。
(2)将tom加入到root组,并为root组分配rwx权限,那么其将拥有rwx权限。
以上两种方法其实都不合适:第一种方法将导致所有其他人都具有rwx权限而非tom一个人;第二种方法将导致所有root的同组人都具有rwx权限而非tom一个人。
因此传统的权限管理设置起来就力不从心了。为了解决这些复杂的权限控制问题,就有了IEEE POSIX 1003.1e这个ACL的标准,Linux也开发出了一套符合该标准的文件系统权限管理方案。
所谓ACL就是访问控制列表(Access Control List),为了与其他的ACL相区别,有时也称文件访问控制列表(FACL)。一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。
支持ACL需要内核和文件系统的支持。Linux从2.6版内核开始支持ACL。不是所有类型的文件系统均支持ACL,但Linux 2.6内核配合常用的ext2/ext3/ext4、jfs、xfs、ReiserFS等文件系统,都可以支持ACL。
有两种类型的ACL:
●一种是存取ACL(access ACLs),针对文件和目录设置访问控制列表。
●一种是默认ACL(default ACLs),只能针对目录设置。如果目录中的文件没有设置ACL,就会使用该目录的默认ACL。
2.CentOS下的ACL
CentOS 7默认支持ACL。
●CentOS 7的Linux内核版本3.10.0支持ACL。
●默认使用的xfs和ext4文件系统也支持ACL。
●软件包acl提供了用于查看和设置ACL的工具。
3.使用setfacl设置ACL权限
setfacl命令的语法如下:
表3-19中列出了setfacl命令的选项说明。
表3-19 setfacl命令的选项说明
操作步骤3.10 使用setfacl命令设置ACL权限
4.使用getfacl查看ACL权限
getfacl命令用于查看文件或目录的ACL设置,其格式如下:
操作步骤3.11 使用getfacl命令查看ACL权限
提示
1.若目录已设置了默认ACL,则新创建的文件将从其目录继承默认ACL设置。
2.使用mv命令和cp-p命令操作文件时将保持ACL设置。
下面的例子用于创建用户和组并为不同目录设置不同的权限。
操作步骤3.12 创建用户和组并为不同目录设置不同的权限