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用于设置文件或目录的权限,一般有两种操作:

  1. 数字表示法:用数字来代替赋予文件的权限,通常用 r=4 w=2 x=1
  2. 符号表示法:用符号来表示赋予文件权限,通常用 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.符号表示

简写

用户类型

说明

u

user

文件所有者

g

group

文件所有者所在组

o

others

所有其他用户

a

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