Linux 文件系统 -- 文件权限简介
一、文件权限
使用 ls -l 命令可以查看文件的具体属性:
如图所示,第一列所示告诉了用户一个文件的类型和权限信息:
1)第一个字符 "d",表明该文件是一个目录文件;
2)r 表示该文件具有可读权限;
3)w 表示该文件具有写权限;
4)x 表示该文件具有可执行权限。
5)第一个 rwx 表示该文件所有者的权限;第二个 rwx 表示该文件所在组的权限;第三个 rwx 表示其他用户对该文件的权限。
二、使用 chmod 命令修改文件权限
可以使用 chmod 命令来改变文件的权限,chmod 命令有两种使用方法:
2.1 使用数字类型来改变文件的权限
我们已经知道,一个文件使用 r、w、x 来分别代表三种权限属性。每个 rwx 为一组,共有三组。给每个权限都赋一个权值:r -> 4 ,w -> 2,x -> 1,这样就可以用数字的方式来表示一组的文件权限,如:rwx 转化为数字为 4 + 2 + 1 = 7;r-x 转化为数字为 4 + 1 = 5。因此,若一个文件的权限属性为:rwxr-xr-x,转化成数字即为 755。
chmod 755 newfile # 将文件 newfile 的权限设为 rwxr-xr-x chmod 421 newfile # 将文件 newfile 的权限设为 r---w---x
2.2 使用字符的方式来改变文件权限
可以在 chmod 后面接上字符选项来改变文件权限:
1)u(user),表示为文件所有者设置权限;
2)g(group),表示为文件所在组设置权限;
3)o(other),表示为其他用户设置访问权限;
4)a(all),表示为所有用户设置访问权限。如果没有添加u、g、o选线,则 chmod 命令默认添加 a 选线;
5)+,表示为文件添加某种权限,后面可接 r、w、x,分别表示添加可读权限(+r),添加写权限(+w),添加可执行权限(+x);
6)-,表示给文件删除某种权限,后面可接r、w、x,分别表示删除可读权限(-r),删除写权限(-w),删除可执行权限(-x);
7)=,表示给文件赋予某种权限,后面可接r、w、x,分别表示赋予可读权限(=r),赋予写权限(=w),赋予可执行权限(=x);
chmod +x newfile # 为所有用户添加该文件的可执行权限 chmod u+r newfile # 为文件的所有者添加可读权限 chmod o-x newfile # 删除其他用户的可执行权限 chmod u=rwx newfile # 为文件的所有者赋予 rwx 的权限
三、特殊权限位
除了常见的 r、w、x 权限外,linux 文件还有一些特殊权限:SUID、SGID 和 SBIT:
3.1 SUID
SUID 的标志为 s,出现在文件所有者的 x 权限上,其作用是让执行该文件的用户在使用这个文件时具有该文件所有者的权限:
1)SUID 权限仅对二进制可执行文件有效,不能用于目录文件,脚本也不行;
2)执行者对于该文件需要由可执行权限;
3)本权限仅在执行该文件的过程中有效,即在文件被执行时文件使用者才具备该文件所有者的权限,执行完毕后不再拥有文件所有者的权限;
关于 SUID 的一个典型的例子就是 /etc/passwd 和 /usr/bin/passwd 文件:
如图所示,/etc/passwd 文件是系统用于存放用户登录相关的重要信息(用户名、密码等)的文件,可以看到,该文件的所有者(即 root)拥有读写权限,用户组的用户和其他用户只有读权限没有写权限。但是我们发现,在系统中,root 用户和普通用户都可以使用 passwd (即 /usr/bin/passwd 文件)命令来修改这个 /etc/passwd 文件。这是因为 /usr/bin/passwd 文件被设置了 SUID 权限,所有用户在使用 passwd 命令时都可以获得 passwd 命令所有者的权限,passwd 命令的所有者是 root,因此普通用户在使用 passwd 命令时也具有 root 权限。这样就可以通过 passwd 命令来修改 /etc/passwd 这个文件了。
3.2 SGID
SGID 的标志为 s,出现在文件所在组的 x 权限上。 与 SUID 一样,其作用是让执行该文件的用户在使用该文件时具有该文件所属组的权限。
3.3 SBIT
SBIT 的标志为 t,出现在文件其他用户的 x 权限上,只能用于目录。其作用是,该目录下的文件只有文件的创建者自己和 root 用户才可以执行删除或修改操作。
3.4 SUID、SGID、SBIT 权限位的设置
与 r、w、x 一样,这三个标志位也可以用数字来标识: SUID -> 4、SGID -> 2、SBIT -> 1,在使用时,只需要将数字标识加在 rwx 的数字标识之前即可:
chmod 4755 newfile # 为文件设置 rwsr-xr-x 权限 chmod 2755 newfile # 为文件设置 rwxr-sr-x 权限 chmod 7755 newdirectory # 为目录设置 rwsr-sr-t 权限