1、权限管理
在 linux 中的每个用户必须属于一个组,不能独立于组外,每个组或者用户都有自己的权限。
1.1 基础
文件的一些基本属性。
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组
[root@root /]# ll
total 68
-rw-r--r-- 1 root root 0 Jul 7 17:13 9000
lrwxrwxrwx. 1 root root 7 Apr 26 2020 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Apr 26 2020 boot
lrwxrwxrwx. 1 root root 8 Apr 26 2020 sbin -> usr/sbin
drwxr-xr-x 6 root root 4096 Jul 3 23:18 www
其中第一个位置表示文件类型
,当
- 为 d 则表示是目录。
- 为 - 则表示是文件。
- 是 l 则表示是链接文档(link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的9字符,分别以三个
为一组,且均为 rwx 的三个参数的组合,表示文件的权限。其中,前三个字符为属主权限,中间三个字符为属组权限,最后三个字符为其他用户权限, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 代替。
例如:drwxr-xr-x 6 root root 4096 Jul 3 23:18 www
文件类型 | 属主权限 | 属组权限 | 其他用户权限 |
0 | 123 | 456 | 789 |
d | r w x | r - x | r - x |
目录文件 | 读 写 执行 | 读 写 | 读 写 |
代表字符 | 权限 | 对文件的含义 | 对目录的含义 | 分数 |
r | 读权限 | 可以查看文件 | 可以列出目录的内容 | 4 |
w | 写权限 | 可以修改文件 | 可以在目录中创建、删除文件 | 2 |
x | 执行权限 | 可以执行文件 | 可以进入目录 | 1 |
6:
代表的意思是文件别引用了几次,通常设置有一个计数器.
root:
代表文件的创建者
root:
文件所属的组。
4096:
文件大小。
Jul 3 23:18:
文件创建或者左后一次修改的时间。
www:
文件的名字。
1.2 权限管理
1、 chmod:修改文件或目录的权限(rwx权限)
chmod用于设置文件或目录的权限,一般有两种操作:
- 数字表示法:用数字来代替赋予文件的权限,通常用 r=4 w=2 x=1
- 符号表示法:用符号来表示赋予文件权限,通常用 r w x
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
即:
u 所有者
g 所有组
o 其他人
a 所有人(u、g、o 的总和)
1.1 数字表示法
语法
chmod [参数] [权限] [文件或目录]
参数
- -R : 递归修改
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
权限
- u 表示该文件的拥有者
- g 表示与该文件的拥有者属于同一个组
- o 表示其他人
- a 表示这三者皆是
- + 表示增加权限
-
-
表示取消权限 - = 表示唯一设定权限。
- r 表示可读取,其值为4
- w 表示可写入,其值为2
- x 表示可执行,其值为1
- X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
即:
1.符号表示
简写 | 用户类型 | 说明 |
| user | 文件所有者 |
| group | 文件所有者所在组 |
| others | 所有其他用户 |
| all | 所用用户, 相当于 ugo |
2.权限增删
符号 | 说明 |
| 为指定的用户类型增加权限 |
| 去除指定用户类型的权限 |
| 设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
值 | 权限 | rwx |
7 | 读 + 写 + 执行 | rwx |
6 | 读 + 写 | rw- |
5 | 读 + 执行 | r-x |
4 | 只读 | r– |
3 | 写 + 执行 | -wx |
2 | 只写 | -w- |
1 | 只执行 | –x |
0 | 无 | — |
案例
1.将hello.java设置为所有人皆可写。
#查看hello.java所拥有的权限
[root@root itbestboy]# ll hello.java
-rw-r--r-- 1 root root 20 Jul 27 00:43 hello.java
#增加些操作,即ugo+w 或者a+w
[root@root itbestboy]# chmod a+w hello.java
[root@root itbestboy]# ll hello.java
-rw-rw-rw- 1 root root 20 Jul 27 00:43 hello.java
2.将hello.java文件中的所属主增加执行操作,并且 将其他人的写操作去掉。
#查看hello.java所拥有的权限
[root@root itbestboy]# ll hello.java
-rw-rw-rw- 1 root root 20 Jul 27 00:43 hello.java
#给所属主,即文件的拥有者添加执行操作, u+x 其他人的写操作去掉 o-w
#当同时操作多个权限时,中间用逗号隔开
[root@root itbestboy]# chmod u+x,o-w hello.java
[root@root itbestboy]# ll hello.java
-rwxrw-r-- 1 root root 20 Jul 27 00:43 hello.java
1.2 符号表示法
语法
chmod [参数] [权限] [文件或目录]
参数
- -R : 递归修改
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
权限
- u 表示该文件的拥有者
- g 表示与该文件的拥有者属于同一个组
- o 表示其他人
- a 表示这三者皆是
- + 表示增加权限
-
-
表示取消权限 - = 表示唯一设定权限。
- r 表示可读取,其值为4
- w 表示可写入,其值为2
- x 表示可执行,其值为1
- X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
即:
1.数字表示
代表字符 | 权限 | 对文件的含义 | 对目录的含义 | 分数 |
r | 读权限 | 可以查看文件 | 可以列出目录的内容 | 4 |
w | 写权限 | 可以修改文件 | 可以在目录中创建、删除文件 | 2 |
x | 执行权限 | 可以执行文件 | 可以进入目录 | 1 |
2.组合
值 | 权限 | 数值 |
7 | 读 + 写 + 执行 | 7(4+2+1) |
6 | 读 + 写 | 6(4+2) |
5 | 读 + 执行 | 5(4+1) |
4 | 只读 | 4 |
3 | 写 + 执行 | 3(2+1) |
2 | 只写 | 2 |
1 | 只执行 | 1 |
0 | 无 | 0 |
案例
1.将hello.java文件中的所属主修改为只能读,并且 将其他人的写操作加上。
#查看权限
[root@root itbestboy]# ll hello.java
-rwxrw-r-- 1 root root 20 Jul 27 00:43 hello.java
#将所属主的权限修改为只读,即 r-- 数值为4 ,其他人的权限加上写操作,即rw- 数值为4+2=6,
#故此时hello.java的权限为466
[root@root itbestboy]# chmod 466 hello.java
[root@root itbestboy]# ll hello.java
-r--rw-rw- 1 root root 20 Jul 27 00:43 hello.java
#chmod 466 hello.java 等价于 chmod u=r,go=rw hello.java
不是所用用户都可以修改文件的,只有该文件的拥有者和root用户可以,其他对该文件没有拥有权(也就是不是自己创建的文件)是不能修改文件的权限的。
2、 chown:修改文件或命令所有者
这个命令只有root用户可以操作,其他用户不可以操作
语法
chown [参数] [权限] [文件或目录]
文件或目录:是指需要被修改所有者的文件名或者文件路径
参数 :
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -f : 忽略错误信息
- -v : 显示详细的处理信息
- -R : 递归修改
权限格式:user:group
案例
修改hello.java的所属主和所属组。
#查看hello.java的详细信息
[root@root home]# ll itbestboy/hello.java
-r--rw-rw- 1 root root 20 Jul 27 00:43 itbestboy/hello.java
#修改hello.java的所属主和所属组
[root@root home]# chown -f anmious:anmious itbestboy/hello.java
#再次查看hello.java的详细信息
[root@root home]# ll itbestboy/hello.java
-r--rw-rw- 1 anmious anmious 20 Jul 27 00:43 itbestboy/hello.java
2.在1的基础之上,不改变hello.java的拥有者,但是关联组设置为 2011(关联组ID)
[root@root home]# chown -f :2011 itbestboy/hello.java
[root@root home]# ll itbestboy/hello.java
-r--rw-rw- 1 anmious 2011 20 Jul 27 00:43 itbestboy/hello.java
3、 chgrp:修改文件或命令所属组
这个命令只有root用户可以操作,其他用户不可以操作
语法
chgrp [参数] [属组名 ] [文件名]
参数
- -R 递归处理
- -v 显示指令执行过程。
案例
更改hello.java文件所属组为root
#查看文件的所属组
[root@root home]# ll itbestboy/hello.java
-r--rw-rw- 1 anmious 2011 20 Jul 27 00:43 itbestboy/hello.java
#把文件的所属组改为root 等价于 chown -v :root itbestboy/hello.java
[root@root home]# chgrp -v root itbestboy/hello.java
group of ‘itbestboy/hello.java’ retained as root
[root@root home]# ll itbestboy/hello.java
-r--rw-rw- 1 anmious root 20 Jul 27 00:43 itbestboy/hello.java
4、 umask:显示、设置文件的缺省权限
umask可用来设定[权限掩码]。[权限掩码]是由3个八进制
的数字所组成,将文件现在的权限减掉权限掩码后,即可产生建立文件时预设的权限。
十进制值 | 权限 | rwx | 二进制 |
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r– | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | –x | 001 |
0 | 无 | — | 000 |
语法
umask [参数] [权限掩码]
参数
- -S 以文字的方式来表示权限掩码。
案例
1.查看权限掩码
[root@root home]# umask
0022
[root@root home]# umask -S
u=rwx,g=rx,o=rx
可以看出umask执行后显示的是0022,其中0022可以分为两部分来看。其中第一个0是特权的意思,后面三个数字022表示权限掩码的值,用777减去022就可以得到755,表示的就是下面umask -S执行的结果,意思就是创建一个默认权限为所属主rwx,所属组r- x其他r-x的文件,即创建的文件的权限为rwxr-xr-x
[root@root home]# touch test.txt
[root@root home]# ll test.txt
-rw-r--r-- 1 root root 0 Aug 3 22:16 test.txt
此时创建一个文件后发现该文件的权限并不是rwxr-xr-x,而是-rw-r–r--都缺少了执行的权限,那是因为在linux系统中,系统默认所有创建的文件都没有执行的权限,这是因为linux系统具有自我保护功能,这样做可以避免病毒的攻击。
如果想让文件的权限具有rwxr-xr-x,即754,则可以使用权限掩码,即777-754=023,可以将权限掩码设置为023,即umask 023