Linux文件权限
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1.1Linux文件权限
在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
1.权限的表示方法
使用ls -l或ll命令,可以列出文件和目录的详细信息,而文件的权限就包含在这些信息中。
使用以下命令查看当前工作目录中的文件:
# ls -l
执行完以上命令,将会显示如图3- 1所示的结果。
图3- 1 显示文件目录信息
在上图中最左侧的一列显示文件属性。
文件属性共占用10个字符,由一个文件类型标识和3组权限属性组成,其构成如图3- 2所示。
文件拥有者对该文件拥有的权限与文件拥有者同组用
户对文件拥有的权限
其他用户对该文件拥
有的权限
图3- 2 Linux文件属性的构成
文件权限是与用户账户和用户组紧密联系在一起的,在Linux系统中,可使用chmod命令来重新设置或修改文件或目录的权限,但只有文件或目录的拥有者或root用户才能有此更改权。
对于文件或目录,权限字符所代表的意义不同,解释如下:
r(read):读取权限。
如果文件具有该权限,表示对应用户可读取文件的内容;如果目录具有该权限,表示对应用户可浏览目录。
w(write):写入权限。
如果文件具有该权限,表示对应用户可对文件进行新增、修改、删除内容操作;如果目录具有该权限,表示对应用户可删除、移动目录内的文件。
x(execute):执行权限。
如果文件具有该权限,表示对应用户可执行该文件(文件必须是可执行文件);如果目录具有该权限,表示对应用户可进入该目录。
-:若对应位置权限位为字符“-”,表示对应用户没有该位权限。
权限除了可用r、w、x来表示外,也可用一个3位的数字来表示,比如644,其百位上的数代表拥有者的权限,十位上的数代表拥有者所属的组中的用户的权限,个位上的数代表其他用户对该文件的权限。
这种采用数字来表示权限的方法,称为绝对权限表示法。
由于用户的权限是用rwx来表示的,没有的权限对应位置上用“-”表示,因此可用一个3位的二进制数来表示用户的权限,有权限的位置用1 表示,没有权限的位置用0表示,这样就会形成一个3位的二进制数编码,然后将该二进制数转换成对应的十进制数,这样就
得到一个0~7的数,从而就可实现用十进制数来表示用户对文件的权限。
比如某一文件的权限为:rw- r-- r--
若用二进制数表示,则为:110 100 100
将每部分转换成对应的十进制,则为: 6 4 4
因此,该文件的权限(rw-r—r--)用数字来表示,则为644。
rwx表示的权限与用数字表示的权限对照如表3-5所示。
表3-5 权限的表示形式
2.改变文件或目录的权限
由于权限有两种表示法,因此,改变权限的chmod命令的具体用法也有两种。
利用绝对权限表达法(即用权限对应的数值)来设置或改变文件或目录的权限,其用法格式为:
chmod [-R] 绝对权限值要改变的文件或目录名
参数-R代表递归设置指定目录下的所有文件的权限。
比如,当前目录下的myfile.txt文件的权限为rw-r—r--,若要更改为rw-rw-r--,则操作命令为:
# chmod 664 myfile.txt
若通过r、w、x表示方法来更改权限,则只需在chmod命令中表达出权限需要改变的部分即可,该方法可视为是相对修改法。
此时用u(user)表示修改文件或目录的拥有者的权限,用g(group)表示修改文件拥有者所属的用户组的权限,用o(other)表示修改其他用户的权限,用a(all)表示同时修改三类用户的权限,a相当于ugo。
若要增加某项权限,则用“+”表示,若要去掉某项权限,则用“-”表示,若只赋予该项权限,则用“=”表示。
比如,当前目录下的myfile.txt文件的权限为rw-rw-r--,若要修改为rw-r-----,则操作命令为:
# chmod g-w myfile.txt
# chmod o-r myfile.txt
以上两条命令还可以合成一条命令执行,功能是一样的,其操作命令为:
# chmod g-w,o-r myfile.txt
若要给其他用户增加读的权限,则实现命令为:
# chmod o+r myfile.txt
若要给同用户组的用户同时增加写的权限和执行权限,则实现命令为:
# chmod g+wx myfile.txt
若要同时去掉同用户组和其他用户对文件的读权限,则实现命令为:
# chmod go-r myfile.txt
若文件拥有者、用户组和其他用户都只赋予读的权限,则实现命令为:
# chmod a=r myfile.txt 或# chmod ugo=r myfile.txt
3.特殊权限
Linux系统中除了常见的读(r)、写(w)、执行(x)权限以外,还有3个特殊的权限,分别是setuid、setgid和sticky bit。
(1)setuid位与setgid位
在Linux中,有时执行某个命令时,需要对某个文件进行操作,而该文件又不是普通用户有权限进行操作的。
比如,用于修改用户密码的命令passwd(下一个项目会详细讲解),该命令在执行时会修改/etc/passwd文件中的内容,而该文件只有root才有权修改。
也就是说passwd命令应该只有root才能使用,可实际上每个普通用户都可以通过该命令去修改自己的密码,于是这里就涉及了特殊权限setuid,如图3- 3所示。
图3- 3 特殊权限setuid位
从上图中可以看出,passwd命令文件/usr/bin/passwd的权限为rwsr-xr-x,表示该命令启用了特殊权限setuid。
这样,当普通用户执行passwd命令时,其身份会被临时提升为root 身份,也就临时拥有了该执行文件拥有者的权限,便可以修改密码文件的内容了。
执行完该命令后,又恢复用户本来的权限。
注意,特殊权限setuid只能运用在可执行文件上,并且在设置setuid位以后,在可执行文件的拥有者权限中,原来的x(执行权限)变成了s,表示该文件在执行时将以所有者(root 用户)身份访问系统。
setgid位可以用在目录或可执行文件上。
若一个目录设置了setgid位,在该目录中新创建的文件和子目录的拥有组将是该目录的拥有组,而不是创建文件的用户所属的组。
被复制到这个目录下的文件或目录,其所属的组也都会被重设为和这个目录一样,除非在复制文件时加上-p的参数,才能保留原来所属的群组设置。
当一个设置了setgid位的可执行文件运行时,该文件将具有所属组的特权,任意存取整个组所能使用的系统资源。
如果可执行文件或目录的拥有组权限中,原来的x(执行权限)变成了s,就表示该文件或目录设置了setgid位。
(2)sticky-bit位(粘贴位)
当一个目录设置sticky-bit位之后,存放在该目录的文件或子目录仅准许其拥有者和root 用户执行删除、移动等操作。
比如,/tmp目录是所有用户共有的临时文件夹,所有用户都对其拥有读写权限。
这就很可能会出现如下情景:A用户在/tmp里创建了文件a.txt,然后B用户觉得该文件没用,
在/tmp里把它给删了(因为拥有读写权限),然后C用户又有可能把B用户的文件删除,诸如此类。
如果上述情景频繁出现,对于/tmp目录的使用将会十分混乱,但实际上是不会发生这种情况的,因为有特殊权限stick-bit(粘贴位)的运用,查看/tmp目录的权限,如图3- 4所示。
图3- 4 特殊权限stick y-bit位
从上图的显示结果可以看出,/tmp目录的权限为rwxrwxrwt,该目录的其他用户权限中的第3位既不是x也不是-,而是t,表示该目录设置了stick-bit位。
也就是说,在/tmp目录中,只有文件的拥有者和root才能对其进行修改和删除,其他用户则不行,避免了上面所说的问题。
注意,有时我们会看到特殊权限的表示形式为大写字母,这是因为系统规定:如果本来在该位上有x,则这些特殊标志显示为小写字母(s,s,t);否则,显示为大写字母(S,S,T)。
(3)设置特殊权限
特殊权限也可以用数字来表达。
由于这三类特殊权限的设置分别对应着文件的拥有者、所属的用户组和其他用户,因此可用一个三位的二进制数来表示这三类用户对特殊权限的拥有情况,有特殊权限的用1表示,没有的用0表示,如表3-6所示。
表3-6 特殊权限的表示形式
比如,要求在/test(若没有,自行创建)中创建的文件,只能由其拥有者和root删除,则实现的命令为:
# chmod o+t /test
如果用数值形式来表达权限,则可以在原有三位十进制前面,再增加一个数字“1”表示sticky-bit位,比如1755(/test原有权限的数值形式为755),则实现命令为:
# chmod 1755 /test
在上面命令中755的7代表文件的所有者具有读、写和执行权限;755中间的5代表所属的用户组的权限是具有读和执行的权限;755最后的5代表其他用户的权限,也是读和执行权限,但由于此时他同时有了t权限,因此在最后显示时,其权限将显示为r-t。
若要求在/test目录中创建的文件,其所属的组一定是/test目录的拥有组,则实现的命令为:
# chmod g+s /test 或# chmod 2755 /test。