文章目录
1.文件所有者、用户组和其他人概念
对于刚刚从隔壁Windows系统中过来的人来说,会觉得不可思议,在Windows,文件以及目录哪里有说属于谁的说法,只要电脑能开机,操作电脑的人就能对眼前的文件进行操作,这是因为对于我们大部分的人来说,在同一时刻,一般只有一个用户登录Windows操作系统,甚至不同时刻的登录都是使用的同一个账号,所以文件和目录的权限显的不是特别的重要。
而在Linux系统就不一样了,它是一个多用户、多任务的系统,为了让各个用户具有较保密的文件数据,这就需要使用到文件的权限管理了。
而对于Linux系统来说,一般将文件可存取访问的身份分为3类,分别是文件所有者(owner)、用户组(group) 和 其他人(others);同时每一种身份都具有读取®、写入(w)、执行(w)三种权限。
1.1 文件所有者
顾名思义,每一个文件都有一个文件所有者,文件属于该用户,只需要设置好权限,其他的用户将不能对文件进行操作,从而达到安全的效果
1.2 用户组
文件除了有一个文件所有者,同时还会属于一个用户组,而用户组最大的作用就是团队开发的时候,可以不让其他团队的成员使用我们团队的资源文件,而这些文件可以对自己团队成员进行开放。
1.3 其他人
当一个用户,既不是文件所有者,也不和文件所有者属于同一个用户组时,那这个用户就是其他人
1.4 三种身份的理解
有一门课程的作业,需要分小组完成,班级里面一共分成三个小组A、B、C,而在A组,小组成员是甲、乙、丙。甲完成了自己的分工有一个文件。
对于这个文件来说
甲就是文件所有者
A组就是这个文件所属的用户组
B组和C组就是其他人
而与此同时,有一个特殊的人,他就是老师,也就是我们的root
,对于所有的小组的所有成员来说,老师都可以检查他们的“作业”,拥有最高权限。
在我们的Linux系统中,应该设置好不同身份对于文件的权限,这样才可以控制好不同用户对于文件的访问,这也是一种安全措施,防止出现我们不希望发生的操作(如让别人看到存储在你的用户文件下的私密文件)。
Linux用户身份与用户组记录的文件
在Linux系统中,有关于账号、密码、用户组的信息基本记录在以下3个文件中:
- /etc/passwd:记录所有的系统上的账号与一般身份用户,同时还有
root
用户的相关信息 - /etc/shadow:记录用户的密码(因为许多服务对于
/etc/passwd
文件都有读权限,所以将密码单独保存,以提高安全性) - /etc/group:记录Linux系统中的所有用户组名
2.Linux文件权限的概念
2.1 Linux文件属性
想要查看Linux文件的属性,我们可以使用ls -al
命令,列出当前目录下所有文件的相关属性,如下所示。
[root@VM_0_3_centos www]# ls -al
-rwxrwxrwx 2 root root 4096 Aug 30 04:25 test.md
#[权限] [连接] [所有者] [用户组] [大小] [修改日期] [文件名]
显示出来的[所有者]
和[用户组]
属性就是在上文说的文件所有者和用户组,这里就不再说明了。对于Linxu文件来说,最重要的权限,就是第一列代表的文件的类型和权限(一共有十个字符)
- 第一个字符代表文件的类型(不止以下两种)
d
:代表目录-
:代表文件
- 后面的九个字符,每3个分为一组,且均为
rwx
3个参数的组合,([r]表示可读,[w]表示可写,[x]表示可执行),这三个参数的顺序不会改变,如果没有相应的权限时,则显示为-
。- 第一组:文件所有者的权限
- 第二组:用户组的权限
- 第三组:其他非本用户组的权限
Linux文件权限的重要性
2.2 修改Linux文件的权限
在上文中讲完了Linux系统文件的权限,那么这么多复杂的权限肯定是需要管理的,所以也需要修改文件权限的操作,主要有以下三个操作:
- chown:改变文件所有者
- chgrp:改变文件所属的用户组
- chmod:改变文件的权限
2.2.1 chown
- 修改文件所有者,需要注意的是,要修改成的账号名称必须存在于
/etc/passwd
文件中才能改变,否则会报错[root@VM_0_3_centos www]# chown [-R] 账号名称 file/dir [root@VM_0_3_centos www]# chown [-R] 账号名称:组名 file/dir #选项与参数 # -R:进行递归更改,连同子目录下的所有文件 #例子: [root@VM_0_3_centos www]# chown hadoop test.md #修改 test.md 文件所有者为 user
2.2.2 chgrp
- 修改文件的所属用户组和上面类似,但必须注意的是,要改变成的用户组名字必须已经在
/etc/group
文件中才行,否则会报错。[root@VM_0_3_centos www]# chgrp [-R] 用户组名称 file/dir #选项与参数 # -R:进行递归更改,连同子目录下的所有文件 #例子: [root@VM_0_3_centos www]# chgrp user test.md #修改 test.md 文件的用户组为 user
为什么需要修改文件所有者和文件用户组?
举一个常见的例子,用户B让用户A复制一份A的文件给它,用户A使用cp
这个命令
[root@VM_0_3_centos www]# cp t1.md t2.md
[root@VM_0_3_centos www]# ls -al
-rwxr--r-- 1 A root 4096 Aug 30 04:25 t1.md
-rwxr--r-- 1 A root 4096 Aug 30 04:25 t2.md
cp
复制命令会同时复制执行者的权限,所以我们这里看到,这一个文件的文件所有任然是A
,这种时候我们就需要使用chown
或者chgrp
命令了。
2.2.3 chmod
文件权限的改变使用的是chmod
这个命令,但是权限设置的方法分为两种,数字或者符号来进行修改
2.2.3.1 数字类型改变文件权限
- Linux文件的基本权限有9个字符,分别对应三个身份(owner、group、others)各自的
rwx
权限,我们使用数字来代表各个权限,如下:- r:4
- w:2
- x:1
- 每种身份(owner、group、others)各自的三个权限(r、w、x)是需要累加的。
示例:
-rwxr-xr–:第一个字符 “-” 表示这是一个文件,前文有说明
owner(rwx):4 + 2 + 1 = 7
group(r-x):4 + 1 = 5
others(r–):4 = 4
所以这个文件的权限数字就是754
[root@VM_0_3_centos www]# chown [-R] xyz filr/dir
#选项与参数
# xyz:就是刚刚的权限数字
# -R:进行递归更改,连同子目录下的所有文件
[root@VM_0_3_centos www]# chmod 754 t1.md
2.2.3.2 符号类型改变文件权限
- Linux文件的基本权限有9个字符,分别对应三个身份(owner、group、others)各自的
rwx
权限,
在这里我们使用(u、g、o)
来代表这三种身份,同时还加了一个a
代表全部的身份,如下图所示
chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |
示例
[root@VM_0_3_centos www]# chmod a+x t1.md #表示赋予所有用户对于 文件t1.md 的执行权限
- 只要是命令中没有指定到的选项,该权限就不会被变动。
2.3 目录与文件权限的意义
在前面我们已经介绍了,对于Linxu系统中的文件来说,有三种身份,同时每个身份都有三个权限(可读、可写、可执行),然而这三种权限对于文件和目录的意义确实不一样的。
2.3.1 权限对文件的意义
文件是实际包含数据的地方,包括一般的文本文件、数据库内容文件、二进制文件等等
权限 | 意义 |
---|---|
r(可读) | 表明可以读取文件的实际内容 |
w(可写) | 表明可以对文件的实际内容进行修改(不包括删除文件) |
x(可执行) | 表明该文件可以被系统执行 |
-
在这里需要注意的一定是,平时在我们的Windows系统中,判断一个文件是否可以执行是由文件的后缀名决定的(如
.bat
),而在Linux系统中,文件是否可以执行,是由是否具有x(可执行)
这个权限来决定,而与文件后缀没有关系(在这里需要说明,可执行
和执行成功
是两个概念,执行成功
是由文件中的内容决定的) -
对于文件的权限,是针对文件中的内容的,所以文件的
w(可写)
权限,仅限于对文件进行内容层面的修改,而对于文件本身的修改(如重命名、删除文件)等的权限,是由文件所在目录的权限决定的
2.3.2 权限对目录的意义
目录的主要内容是记录文件名列表,文件名和目录有强烈的关系
权限 | 意义 |
---|---|
r(可读) | 表示具有读取目录结构列表的权限,可以查询该目录下的文件名数据 |
w(可写) | 表示具有更改该目录结构列表的权限,如下: 1.新建新的文件和目录 2.删除已经存在的文件和目录(不论该文件的权限为何) 3.将已经存在的文件或目录进行重命名 4.转移该目录内的文件、目录位置 |
x(可执行) | 表示用户能否进入该目录,成为工作目录的用途(即:能都cd 进行) |
参考书籍:《鸟哥的私房菜·第3版》