Linux权限管理

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权限(粘滞位(粘着位)):

-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权限设置位置的不同,又分为两种权限。
当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

  1. hff对于 /usr/bin/passwd 这个程序具有 x 权限,表示hff 能执行 passwd命令
  2. passwd 文件的所有者是 root
  3. hff 执行 passwd 的过程中,会改变 /etc/shadow 的值。但是/etc/shadow 的权限为----------,而passwd 进程的拥有者是hff,所以passwd 进程应该是没有权限改变/etc/shadow的,但是我们通过观察发现确实改变了/etc/shadow 文件的值,这是为什么呢?
    这是因为我们为passwd命令设置了Suid权限,hff 启动passwd 进程时,passwd 进程的拥有者变成了passwd 文件的拥有者 root ,所以会有权限改变/etc/shadow 文件。

这里用图示更加清晰的表示原理:
如果passwd删除s权限:
-rwxr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
Linux权限管理_第1张图片passwd脚本文件具备s权限之后
Linux权限管理_第2张图片
这就是s 权限的作用。

SGid:

当s权限在文件组 x 权限上时,例如:-rwx–s--x,此时称为Set GID,简称为SGID的特殊权限,

我理解的是:执行者在执行该文件时将具有该文件所属组的权限。
经典的应用是locate命令,道理通passwd类似,这里就不赘述了,详细请看链接:SGID权限简介

参考文章: LINUX中s和t两个特殊权限及x权限说明

你可能感兴趣的:(#,这是Linux的基础知识点)