文章目录
Linux
权限管理
首先要搞清楚一个问题,Linux
系统中为什么需要设定不同的权限,所有用户都直接使用管理员(root
)身份不好吗?
由于绝大多数用户使用的是个人计算机,使用者一般都是被信任的人(如家人、朋友等)。在这种情况下,大家都可以使用管理员身份直接登录。但在服务器上就不是这种情况了,往往运行的数据越重要,价值越高,则服务器中对权限的设定就要越详细,用户的分级也要越明确。
和 Windows
系统不同,Linux
系统为每个文件都添加了很多的属性,最大的作用就是维护数据的安全。举个简单的例子,在你的 Linux
系统中,和系统服务相关的文件通常只有root
用户才能读或写,就拿 /etc/shadow
这个文件来说,此文件记录了系统中所有用户的密码数据,非常重要,因此绝不能让任何人读取(否则密码数据会被窃取),只有root
才可以有读取权限。
此外,如果你有一个软件开发团队,你希望团队中的每个人都可以使用某一些目录下的文件,而非团队的其他人则不予以开放。只需要将团队中的所有人加入新的群组,并赋予此群组读写目录的权限,即可实现要求。反之,如果你的目录权限没有做好,就很难防止其他人在你的系统中乱搞。
比如说,本来 root
用户才能做的开关机、新增或删除用户等命令,一旦允许任何人拥有这些权限,系统很可能会经常莫名其妙的挂掉。而且,万一 root
用户的密码被其他人获取,他们就可以登录你的系统,从事一些只有 root
用户才能执行的操作,这是绝对不允许发生的。
因此,在服务器上,绝对不是所有的用户都使用root
身份登录,而要根据不同的工作需要和职位需要,合理分配用户等级和权限等级
Linux的文件类型
通过 ls -l
或者ll
命令,我们就可以查看当前目录下所有文件和目录各自的属性
显示的执行结构中,每行代表一个文件或目录,其中第一个字符表示的就是文件的类型
第一个字符 | 文件类型 |
---|---|
- | 普通文件,包括纯文本文件、二进制文件、各种压缩文件等。 |
d | 目录,类似 Windows 系统中的文件夹。 |
b | 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。 |
c | 字符设备文件,例如键盘、鼠标等。 |
s | 套接字文件,通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。 |
p | 管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误。 |
l | 链接文件,类似 Windows 系统中的快捷方式。 |
开发当中最常见的三种文件类型分别是-
,d
,|
Linux
中的权限
Linux
是一个多用户多任务的操作系统而且它把一切都看成了目录和文件来对待,为了安全性Linux
把这些文件和目录分配了权限.在现实开发当中,我们常常会听到运维工程师说一种这样的数字组合:777,666,755,644
这些数字不是密码,而是Linux的权限
Linux中的权限分类
r (read),
可读权限,权重值4
w(write)
,可写权限,权重值2
x(execute)
,可执行权限,权重值1
注意:没有权限用(-
)横杠来表示,可以把没有权限的权重值当作0
来对待
Linux
当中查看文件的权限类型
在Linux
当中如果我们输入ls -lh
就可以以人性化的方式查看文件或者目录的相关信息
按照空隔来进行分隔,那么以上可以分为7
列
- 第1列:表示权限表达式。以上一个可以分为10位,表示文件或者目录的权限
- 第1位:文件类型,以上的案例表示
我是目录
是一个目录,所以为d
- 第2-4位:表示拥有者的权限是什么,以上案例表示
root
这个拥有者的权限为可读可写可执行(rwx = 7
) - 第5-7位:表示文件或者目录所在用户组的权限是什么,表示
root
用户组当中的成员对该目录拥有可读可执行权限 - 第8-10位:表示组外成员(其他人)的权限是什么,表示在
root
这个用户组以外的成员对该目录拥有可读可执行权限
- 第1位:文件类型,以上的案例表示
- 第2列:表示
linux
文件被调用的次数(硬链接数),Centos
当中硬连接数是不准确所以忽略 - 第3列:表示文件或者目录的拥有者是谁,在以上的案例中表达
我是目录
这个目录拥有者是root
- 第4列:表示文件或者目录的所属用户组是什么,在以上的案例中表达
我是目录
这个目录所在的用户组是root
- 第5列:表示文件或者目录的大小,不过在
Centos
中文件或者目录的大小是不准确的,有一定参考价值 - 第6列:表示文件或者目录的修改或者创建时间
- 第7列:表示文件或者目录的名称
拥有者,所属组,组内成员,其他人概念
拥有者,所属组,组内成员,其他人关系
chmod
命令
修改文件或目录的权限
chmod
命令设定文件权限的方式有 2 种,分别可以使用数字或者符号来进行权限的变更
使用数字修改文件权限
Linux
系统中,文件的基本权限由 9
个字符组成,以 rwxrw-r-x
为例,我们可以使用数字来代表各个权限,各个权限与数字的对应关系如下
r --> 4
w --> 2
x --> 1
由于这 9 个字符分属 3 类用户,因此每种用户身份包含 3 个权限(r
,w
,x
),通过将 3 个权限对应的数字累加,最终得到的值即可作为每种用户所具有的权限。
拿rwxrw-r-x
来说,所有者、所属组和其他人分别对应的权限值为
所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5
所以,此权限对应的权限值就是 765
。
使用数字修改文件权限的 chmod
命令基本格式为
chmod [-R] 权限值 文件名
-R
(注意是大写)选项表示连同子目录中的所有文件,也都修改设定的权限
使用字母修改文件权限
既然文件的基本权限就是 3 种用户身份(所有者、所属组和其他人)搭配 3 种权限(rwx
),chmod
命令中用 u
、g
、o
分别代表 3 种身份,还用 a
表示全部的身份(all 的缩写)。另外,chmod
命令仍使用 r
、w
、x
分别表示读、写、执行权限
角色 | 说明 |
---|---|
u | user 表示该文件的拥有者 |
g | group 表示用户组 |
o | other 表示其他人 |
a | all 表示所有用户 |
操作符 | 说明 |
---|---|
+ | 增加权限 |
- | 撤销权限 |
= | 设置权限 |
权限 | 说明 |
---|---|
r | 可读 |
w | 可写 |
x | 可执行,假如是目录,表示可打开目录 |
- | 无任何权限 |
例如,如果我们要设定 .bashrc
文件的权限为 rwxr-xr-x
chmod u=rwx,go=rx .bashr
举个例子,如果想要增加 .bashrc
文件的每种用户都可做写操作的权限
chmod a+w .bashrc
创作不易,感谢支持