chmod命令:变更文件或目录的权限
u 用户user,文件或目录的所有者。
g 用户组group,文件或目录所属群组
o 其它用户othersa 所有用户
all,系统默认使用此项
+添加某些权限-取消某些权限
=设置文件的权限为给定的权限
r 表示可读权限w 表示可写权限
x 表示可执行权限
s 设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位
t 只有目录或文件的所有者才可以删除目录下的文件-R递归处理,将指令目录下的所有文件及子目录一并处理
o+w | o=rw+表示直接加上写权限。
=表示将其他用户权限设置为可读可写,如果以前还有可执行权限,现在也去掉。[root@localhost ~]# ll
-rw-r–r--1 root root 0 Aug 2205:09 file1
#对普通文件授权:
[root@localhost ~]# chmod o+w file1
[root@localhost ~]# ll-rw-r–rw-1 root root 0 Aug 2205:09 file1
或者:
[root@localhost ~]# chmod o=rw file1
#对目录进行授权,R表示递归:
[root@localhost ~]# chmod -R o+w lutixia/
如果对一个目录授权其他人可写那么,该目录中的所有的文件都会继承该目录的可写权限,这是很危险的!!!
例如:
[root@localhost /]# chmod 777 mydata2/
[root@localhost /]# ll
drwxrwxrwx 2 root root 6 Nov 9 10:12 mydata2
[root@localhost /]# cd mydata2
[root@localhost mydata2]# touch a.txt
[root@localhost mydata2]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 9 10:13 a.txt
[root@localhost mydata2]# su zs
[zs@localhost mydata2]$ vim a.txt
[zs@localhost mydata2]$ cat a.txt
this is a.txt
可以看到虽然a.txt 的权限是其他人不可以写的,但是由于他的父目录是可写的,所有a.txt也继承了可写的属性。这显然是不安全的。
总结一下:父目录其他用户有可写权限,其下子文件不管有没有可写权限,均可强行写入,修改!父目录其他用户没有可写权限,其下子文件只有可写才有写入权限,但不具备删除,修改文件名权限。
除了常见的读、写、执行权限之外其实还存在着一些特殊权限。这就是suid和sgid以及t 权限。他们有不同的应用场景。
-t 是对目录设置特殊权限,用户只能删除自己的文件。
应用场景:创建一个目录,该目录用于储存许多用户的文件,所有的用户都可以向该目录中存储自己的文件,但是只能够删除自己的文件。
我们分析一下:如果所有的用户都能够向一个目录中存储文件,那么这个目录的权限一定是777,但是如果这个目录是设置的777 那么这个目录下的所有的文件都可以被任意用户删除。这显然是不符合我们的应用场景的,所以为了满足允许各⽤户在⽬录中任意写⼊数据,但是禁⽌随意删除其他⽤户的数据。 这个场景,所以提出了t 权限。
设置方法:chmod o+t mydir #固定了只能够是其他人添加t 权限。
实例:
[root@localhost /]# chmod o+t mydata/
[root@localhost /]# ll
drwxrwxrwt 2 root root 53 Nov 9 10:11 mydata
[mysql@localhost mydata]$ cd mydata && ll
total 12
-rw-rw-r-- 1 mysql mysql 18 Nov 9 09:46 mysql.txt
-rw-r--r-- 1 root root 17 Nov 9 09:45 root.txt
-rw-rw-r-- 1 zs zs 36 Nov 9 09:49 zs.txt
[root@localhost mydata]# su zs
[zs@localhost mydata]$ echo "aaaa">> mysql.txt
bash: mysql.txt: Permission denied
由上述实例可以看出t 权限的作用,就是允许任意用户向设置了t 权限的目录创建文件,但是不允许用户任意的删除其他人的文件,用户只能够删除自己的文件。(root用户除外,root 可以删除该目录中任意的文件)
注意事项
粘滞位权限是针对目录的,对文件无效
根据s权限设置位置的不同,又分为两种权限。
当s权限在文件所有者 x 权限上时,例如:-rwsr-xr-x,此时称为Set UID,简称为SUID的特殊权限,
即当执行该文件时将具有该文件所有者的权限。
这个权限的常见的应用场景是提升命令的权限。
最经典的应用是passwd 命令。
[root@localhost mydata]# ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
例如:有一个普通用户hff,当hff修改密码时,执行passwd这个命令,passwd该文件权限为:-rwsr-xr-x
这里用图示更加清晰的表示原理:
如果passwd删除s权限:
-rwxr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
passwd脚本文件具备s权限之后
这就是s 权限的作用。
当s权限在文件组 x 权限上时,例如:-rwx–s--x,此时称为Set GID,简称为SGID的特殊权限,
我理解的是:执行者在执行该文件时将具有该文件所属组的权限。
经典的应用是locate命令,道理通passwd类似,这里就不赘述了,详细请看链接:SGID权限简介
参考文章: LINUX中s和t两个特殊权限及x权限说明