首先来看一张熟悉的Linux文件模式图:
接下来我们开始从ls -l命令讲起:
这是我执行ls -l后显示的结果。
-rwxrwxr-x(我们现在主要来讲解这串字符)
'-':它代表文件的类型
1> - 普通文件
2> d 目录文件
3> l 符号链接(指向另一个文件)
4> s 套接字文件
5> b 块设备文件
6> c 字符设备文件
7> p 命名管道文件
那后面的rwxrwxr-x呢?
我们把它分为3部分,与最上面的那个图的低九位对应:
1>拥有者权限:rwx
2>组用户权限:rwx
3>其他用户权限:r-x
R:读权限 W:写权限 X:执行权限
则其对应的二进制为: 111111101
通常用3位八进制对文件权限进行表示: 0775(0代表8进制)
这样,我们就搞定了文件类型,拥有者权限,组用户权限和其他用户权限,接下来来讲解权限修饰位。
SUID位:
主要针对可执行文件。如果一个文件的setuid被设置,则该文件被执行时,进程的有效用户ID(EUID)被设置成该文件的所有者。
这句话怎么来理解呢?
举个例子,比如一个普通用户运行passwd更改密码,但实际要更改/etc/passwd文件,但是,这个文件只有root权限的用户才能更改。
这样,就可以通过设置SUID位来解决。
设置了setuid位,在普通用户执行passwd操作时,他对/etc/passwd文件的操作上升至root用户权限,即可进行修改操作。
而当操作结束,它又回到普通用户的权限。
这种机制对于某些需要root用户启动,但启动后需要回到普通用户权限的程序很有帮助。
SGID位作用与SUID类似。
此为usr/bin/passwd可执行文件的权限: -rwsr-xr-x
关于SUID和SGID的表示:
x:只有可执行权限。
s:既有可执行权限,SUID(SGID)位也被设置
S:没有可执行权限,只有SUID(SGID)被设置
sticky位
对于文件来说:实现交换技术。
对于目录来说:使目录里的文件只能被创建者删除。