Linux的文件权限
相关概念
Linux 最优秀的地方之一就在于多人多任务环境。为了让各个使用者有较为保密的文件数据,文件的权限管理尤为重要。
在Linux系统中,每个文件和目录都有一组权限,用于控制谁可以对文件进行读、写、执行操作。权限分为三类用户:
- 所有者(User):文件的拥有者。
- 所属组(Group):文件所属的用户组。
- 其他用户(Others):系統中的其他用户。
权限类型
- 读(Read, r):可以查看文件内容或列出目录内容。
- 写(Write, w):可以修改文件内容或在目录中添加、删除文件。
- 执行(Execute, x):可以运行文件(脚本/程序)或进入目录。
对于写权限有些小问题:
- 文件:是否能编辑文件内容(是否包含删除文件的权限?是否能修改文件名?)
- 文件夹:是否能在文件夹下创建、删除、复制、移动、重命名(能对当前文件夹重命名吗?)
答:
-
是否能删除文件:
- 删除文件实际上是删除目录中的一条指向该文件的链接,而不是直接修改文件内容。
- 权限要求:删除文件的权限取决于包含该文件的目录的写权限,而不是文件本身的写权限。
-
是否能修改文件名:
- 修改文件名(重命名)也是在目录中操作的,属于目录权限而非文件权限。
- 权限要求:目录需要有写权限才能重命名(即在目录所在的父目录中有写权限)。
-
是否能在文件夹下创建、删除、复制、移动、重命名:
- 创建文件或子目录:需要目录的写权限。
- 删除文件或子目录:需要目录的写权限。
- 复制/移动文件:涉及修改目录内容,需目录的写权限(目标目录必须有写权限)。
-
重命名:
- 对当前目录下的文件/子目录重命名:需要对所在目录的写权限。
- 对目录本身重命名:需父目录的写权限。
权限 | 文件内容编辑 | 删除文件 | 重命名文件 | 在目录创建/删除/移动文件 | 目录重命名 | 备注 |
---|---|---|---|---|---|---|
w (写) | 是 | 由目录权限决定 | 由目录权限决定 | 是 | 由父目录权限决定 | 编辑文件内容只需文件的写权限,删除、重命名、创建、删除文件都要目录的写权限 |
身份介绍
- owner(文件拥有者)
文件拥有者可以实现每个用户的隐私权和喜好的工作环境。
每个用户都可能有自己的私密文件,可以利用文件拥有者的身份设置权限使其他人无法查阅私密文件 - group(文件所属用户组)
用户组的最主要功能就是团队开发。
例如,当多个团队在同一台主机上开发时,每个团队下的用户可以互相修改文件,但是不能修改不是一个团队下用户的文件。 - others(其他人)
不属于该文件的文件拥有者和文件所属用户组的用户
Linux权限介绍
文件权限分配信息如下:
第一位是文件类型,接下来的字符,三个为一组(读、写、执行)
- rwx:权限分配中,rwx 是固定顺序不会改变,没有对应权限就要 - 代替
- -:表示没有对应权限,例如:第三组中 w 权限位置为 - ,表示其他人没有写权限
- 第一组:文件拥有者的权限
- 第二组:在文件所属用户组的用户的权限
- 第三组:非本人,且不在文件所属用户组的其他账号权限
a.txt 权限说明? - 普通文件类型
- 拥有者:可读写
- 同组用户:可读写
- 其他用户:只读
权限设置
-
用法:chmod 选项 权限 文件名
常用选项:
R:递归修改,连同目录下所有文件都变更
字母形式
- 权限分配对象:
- u:user,所有者身份 owner
- g:group,所有者同组用户
- o:others,其他用户
- a:all,给所有用户设置权限,默认是所有用户
- 权限分配方式:
- +:新增权限
- -:删除权限
- =:设置权限
相同权限可以一起设置:sudo chmod u=rwx,go=rw a.txt
sudo chmod u-x,g-w,o-rw a.txt
默认给所有用户设置权限:sudo chmod +x a.txt
数字形式
Linux 文件的基本权限有九个(-rwxrwxrwx),九个权限是三个三个一组的。其中我们可以用数字表示各个权限,权限的分数如下:
- r:4
- w:2
- x:1
- -:0
每种身份(owner/group/others)的权限就是各自三个权限的分数之和。例如当某个权限为:[-rwxr-xr–] 每种身份的权限分数就是:
- owner = rwx = 4 + 2 + 1 = 7
- group = rwx = 4 + 0 + 1 = 5
- others = rwx = 4 + 0 + 0 = 4
如果一个权限数字中出现2与3的数字,则该权限有不合理的情况。
sudo
sudo可以让管理员(root)事先定义某些特殊命令谁可以执行。
默认只有 root 可以执行 sudo,其他用户可以通过配置文件 /etc/sudoers 进行配置
查看 sudo 配置文件:sudo vim /etc/sudoers 或 visudo
- purr ALL=(ALL:ALL) ALL
- purr:表示用户名,如果是用户组,则可以写成“%组名”
- ALL:表示允许登录的主机(地址白名单
- (ALL:ALL):表示以谁的身份执行,ALL表示 root 身份
- ALL:表示当前用户可以执行的命令,多个命令可以使用 “,” 分割