1、身份
说权限之前,首先要知道身份,一个用户对一个文件或目录只有3种身份:
owner,拥有者
group,拥有组
other,其它人
注意:
root用户是个特例,root拥有无上的权限。
root组,也只是一个普通组。
创建一个新文件或目录时,这个文件或目录的拥有者和拥有组,分别是创建这个文件的用户和这个用户的主要组。
2、权限
r 可读,用八进制数字4代替
w 可写,用八进制数字2代替
x 可执行,用八进制数字1代替
注:
查看一个文件权限的时候,如果没有相应的权限就用一个横杆表示
权限对于目录和文件,意义不同
2.1、对文件而言
r 可使用文件查看工具获取文件内容
w 可修改文件内容
x 运行程序
注意:
对于linux而言,一个文件能不能执行,和文件名没关系,只和这个文件里有没有可执行代码和x权限有关。
对一个文件只有w权限,可以echo adafadsf >> file,但是不能用vim去编辑。因为vim这个工具首先需要去查看这个文件,所以对该文件还要有r权限才行。
对一个文件只有x权限,也是不能执行的,因为首先要能读到这个文件的内容,才能执行,所以还要加上r权限
2.2、对目录而言
r 可以使用ls命令查看目录中的文件列表
w 可以在目录中创建、删除文件
x 可以cd到目录,并且能使用ls -l命令查看目录中的文件属性
2.3、实例
/home/tt/f.txt,对于这个路径,user1对tt目录有x权限,对f.txt拥有rwx权限,登陆到user1,分别执行以下命令:
ls /home/tt
ls /home/tt/f.txt
3、更改身份、权限
#更改文件owner
chown user /tmp/tt
#更改文件group
chgrp group /tmp/tt
#更改文件group
chown :group /mnt/tt
#同时更改文件owner和group
#注意,冒号(:)可用点(.)代替
#也可以加上-R,递归修改。
chown user:group /tmp/tt
#指定u,g的权限都是rw
chmod ug=rw /mnt/f1
#= 覆盖原有权限
#+ - 在原有权限基础上,加减
#如果没有权限,可以用u=---,或u=
chmod u=rwx,g+w,o-w /mnt/f1
#更改/mnt/f1文件的权限,参考/mnt/f2的权限
chmod --reference=/mnt/f2 /mnt/f1
#第一个7,表示拥有者的权限之和
#第二个7,表示拥有组的权限之和
#第三个7,表示其它人的权限之和
chmod 777 /mnt/f1
#表示递归把/tmp目录下的所有子目录和子文件权限修改成777
chmod -R 777 /tmp
注意:
只有root可以更改文件的拥有者
root可以把拥有组改成任何组
文件拥有者只能把拥有组改成自己所属的组(主组和附属组),而不能改成其它非自己所属的组
root或文件的拥有者都可以修改拥有组的权限
4、UMASK 反掩码
对目录而言,默认权限是777,新建一个目录的时候,实际权限是:777-umask
对文件而言,默认权限是666,新建一个文件的时候,实际权限是:666-umask
UID为199以内的用户(包括了root用户)
默认umask是022
目录实际权限:777-022=755
文件实际权限:666-022=644
UID大于199的用户
默认umask是002
目录实际权限:777-002=775
文件实际权限:666-002=664
#查看当前用户的umask值
umask
#临时更改当前用户的umask值,重启失效
#想永久有效,改配置文件/etc/profile
umask 777
5、特殊权限
5.1、SUID
当一个用户去执行一条命令时:
这个用户是拿自己的身份去执行这个命令,所以当前用户首先要对该命令有rx权限,才可执行
执行命令时,命令会拿当前用户的身份去处理相应文件,所以,当前用户还要对命令所处理的文件拥有相应的权限
当一个用户去执行一个带有SUID的命令:
这个用户拿自己的身份去执行这个命令
这个命令在执行过程中,会拿自己拥有者的身份,去对相应的文件进行相应的处理
比如:passwd命令
ll /bin/passwd
总结:
SUID只针对二进制文件才有效
执行该二进制文件的用户,对于该二进制文件要有x权限
该二进制文件的拥有者,对于该二进制文件所处理的文件,要有相应的权限
注意:
如果拥有者的x位变成s,表示设置了suid,并且拥有者也设置了x权限
如果变成S,表示只设置了suid,而拥有者自身并没有x权限
命令:
chmod u+s
chmod u-s
5.2、SGID
针对一个二进制文件而言,和SUID一样
针对一个目录而言,在一个带SGID权限的目录下创建一个子文件或子目录时,会继承该目录的拥有组
注意:
如果拥有组的x位变成s,表示设置了guid,并且拥有组也设置了x权限
如果变成S,表示只设置了guid,而拥有组没有设置x权限
命令:
chmod g+s
chmod g-s
5.3、STICKY
只对目录有效
对于一个多人可写的目录,如果设置了sticky权限,那么这个目录下的子文件或子目录,只有两个人可以删,一个是这个子目录或子文件的拥有者,一个是root
命令:
chmod o+t
chmod o-t
数字表示:
SUID:4 SGID:2 STICKY:1
#设置/mnt/test目录的权限为755,并添加一个SGID权限
chmod 4755 /mnt/test
6、目录、文件属性
chattr +a /mnt/f1
+,增加一个特殊参数
-,移除一个特殊参数
=,设定一个特殊参数,覆盖旧参数
A,文件的atime保持不变
S,一般修改文件,不是同步写入磁盘的,加上S参数,该文件就会同步写入磁盘
a,文件只能增加内容,不能删除也不能修改
c,自动将文件压缩存储,读的时候,先解压
d,文件不会被dump程序备份
i,文件不能删、改名、写入,也就是说文件只能读,root也一样
s,删除文件时,彻底被清除出磁盘了
u,和s相反,删除文件,数据其实还在磁盘
注意:
属性设置,root用户也会受此影响,也就是说root也会被限制。
以上配置只对ext格式的文件系统完全有效
xfs文件系统只支持A、a、d、i、S
lsattr /mnt/f1
-a,将隐藏文件也显示出来
-d,查看目录属性
-R,连同子目录也显示出来
---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:龚鑫,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|