Linux的文件权限管理chomd chown chgrp

chomd文件的权限管理

1
2
3
4
5
6
7
8
9
10
11
12
13
# brian @ DESKTOP-FH09R9R in ~ [16:36:58]
$ touch brianfile.txt # 用brian用户新建一个叫brianfile.txt的文件

# brian @ DESKTOP-FH09R9R in ~ [16:37:45]
$ sudo su # 切换到超级用户,即root用户

# 用root用户简新建一个叫rootfile.txt的文件
root@DESKTOP-FH09R9R:/home/brian# touch rootfile.txt

root@DESKTOP-FH09R9R:/home/brian# ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rw-r--r-- 1 root root 0 Aug 15 16:38 rootfile.txt

首先用ls -lh可以查看所在目录/home/brian的文件情况:

  • 文件brianfile.txt属于用户brian和组brian
  • 文件rootfile.txt属于用户root和组root

他们分别的权限都是:-rw-r--r--
我们拆开成4段来看,分别是-rw-r--r--,他们代表的含义是:

  • 第1组:-代表是一个文件,如果是文件夹则显示为d
  • 第2组:rw-表示文件所有者拥有权限,如果还有执行权限为rwx,但是txt文件不需要执行权限,所以默认为-
  • 第3组:r--代表所在组拥有的权限,即brian组的用户有的权限。其他同上。
  • 第4组:r--代表其他人拥有的权限,除用户brianbrian组的用户之外,都有的权限。其他同上。

图片

我们现在用root用户,在rootfile.txt文件里面加入一行文字root user add line

1
2
3
root@DESKTOP-FH09R9R:/home/brian# vim rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# cat rootfile.txt
root user add line

并且查看root用户所在的组,只有root
查看brian用户所在的组,只有brian adm dialout cdrom floppy sudo audio dip video plugdev netdev但是没有root
证明brianroot用户不在同一个组里面里面

1
2
3
4
root@DESKTOP-FH09R9R:/home/brian# groups brian
brian : brian adm dialout cdrom floppy sudo audio dip video plugdev netdev # brian用户有这么多组
root@DESKTOP-FH09R9R:/home/brian# groups root
root : root # root用户只在root组

chmod 777 写法

现在用root用操作把rootfile.txt的权限修改为700,即所有者能读、写、执行。同组的啥权限都没有,其他用户什么权限都没有。

1
2
3
4
5
root@DESKTOP-FH09R9R:/home/brian# chmod 700 rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rwx------ 1 root root 19 Aug 15 17:04 rootfile.txt

我们切换到brian用户,尝试一下能不能读。
返现返回Permission denied的报错权限被拒绝

1
2
3
4
5
6
root@DESKTOP-FH09R9R:/home/brian# exit
exit

# brian @ DESKTOP-FH09R9R in ~ [17:12:10]
$ cat rootfile.txt # 尝试浏览看这个文件
cat: rootfile.txt: Permission denied

这里用到的chmod 700 rootfile.txt是修改文件权限的其中一种写法,必须要由这个问文件的所有者来操作。虽然基础权限只有执行这4种。但是通过加减可以做到其他新的权限操作。

0:无权限
1:执行
2:写
3:写和执行 = 1 + 2
4:读
5:读和执行 = 1 + 4
6:读和写 = 2 + 4
7:读、写和执行 = 1 + 2 + 4

我们回到root用户,执行chmod 644 rootfile.txt,这是时候的rootfile.txt可以被其他用户读取,即brian用户应该能读取才对。
使用exit回到brian用户,用cat命令,果然这次能读取出来内容了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# brian @ DESKTOP-FH09R9R in ~ [17:12:23] C:1
$ sudo su
[sudo] password for brian:
root@DESKTOP-FH09R9R:/home/brian# chmod 644 rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rw-r--r-- 1 root root 19 Aug 15 17:04 rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# exit
exit

# brian @ DESKTOP-FH09R9R in ~ [17:25:28]
$ cat rootfile.txt
root user add line

如果用brian用户尝试用vim rootfile.txt去修改这个文件,就会被告知只有的权限,无法修改文件。
图片

chmod o+w 写法

从下面可以看到,在root用户中对文件rootfile.txt进行chmod o+w rootfile.txt就是给这个文件的其他用户加上的权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# brian @ DESKTOP-FH09R9R in ~ [11:43:13]
$ ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rw-r--r-- 1 root root 19 Aug 15 17:04 rootfile.txt

# brian @ DESKTOP-FH09R9R in ~ [11:43:18]
$ sudo su
[sudo] password for brian:
root@DESKTOP-FH09R9R:/home/brian# chmod o+w rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rw-r--rw- 1 root root 19 Aug 15 17:04 rootfile.txt

图片

列举的用法如下

1
2
3
4
chmod u+w rootfile.txt # 为所有者添加写权限
chmod g+w rootfile.txt # 为所在组添加写权限
chmod o+w rootfile.txt # 为其他用户添加写权限
chmod a+w rootfile.txt # 为所有用户添加写权限
1
2
3
chmod o+w rootfile.txt # 为所在组添加写权限
chmod o-w rootfile.txt # 为所在组除去写权限
chmod o=w rootfile.txt # 为所在组设定写权限,其他读和执行的权限都没有
1
2
3
chmod o+w rootfile.txt # 为所在组添加写权限
chmod o+r rootfile.txt # 为所在组添加读权限
chmod o+x rootfile.txt # 为所在组添加执行权限

这种操作可以一次性处理多个权限类型

1
2
3
4
5
root@DESKTOP-FH09R9R:/home/brian# chmod o+rwx rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rw-r--rwx 1 root root 19 Aug 15 17:04 rootfile.txt

briandoc是一个文件夹,里面有doc1doc2两个文件,文件和文件夹的权限都是drwxr--r---rwxr--r--

  • 如果我们用chmod 777 briandoc只能把文件夹的权限修改。
  • 我们需要用chmod -R 777 briandoc才能把文件夹及里面的文件的全部权限都修改了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# brian @ DESKTOP-FH09R9R in ~ [13:50:21]
$ ls -lh
total 0
drwxr--r-- 1 brian brian 4.0K Aug 16 13:44 briandoc

# brian @ DESKTOP-FH09R9R in ~ [14:05:43]
$ tree -pug
├── [drwxr--r-- brian brian ] briandoc
│   ├── [-rwxr--r-- brian brian ] doc1
│   └── [-rwxr--r-- brian brian ] doc2

# brian @ DESKTOP-FH09R9R in ~ [14:05:51]
$ chmod 700 briandoc/

# brian @ DESKTOP-FH09R9R in ~ [14:06:45]
$ tree -pug
├── [drwx------ brian brian ] briandoc
│   ├── [-rwxr--r-- brian brian ] doc1
│   └── [-rwxr--r-- brian brian ] doc2

# brian @ DESKTOP-FH09R9R in ~ [14:06:49]
$ chmod -R 700 briandoc/

# brian @ DESKTOP-FH09R9R in ~ [14:07:57]
$ tree -pug
├── [drwx------ brian brian ] briandoc
│   ├── [-rwx------ brian brian ] doc1
│   └── [-rwx------ brian brian ] doc2

chown的文件所属人和用户改变

如下面root用户通过chown brian:brian rootfile.txt命令,把本来属于自己的rootfile.txt文件给了brian用户和用户组。

1
2
3
4
5
6
7
8
9
10
11
12
# brian @ DESKTOP-FH09R9R in ~ [13:36:43]
$ sudo su
[sudo] password for brian:
root@DESKTOP-FH09R9R:/home/brian# ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rwxrwxr-- 1 root root 19 Aug 15 17:04 rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# chown brian:brian rootfile.txt
root@DESKTOP-FH09R9R:/home/brian# ls -lh
total 0
-rw-r--r-- 1 brian brian 0 Aug 15 16:37 brianfile.txt
-rwxrwxr-- 1 brian brian 19 Aug 15 17:04 rootfile.txt

同样,如果修改的是文件夹和里面的文件,需要用到chown -R briandoc来操作,不然就只能修改到这个文件夹的权限,里面的文件权限都不会变。

chgrp修改文件所在组

如下文:root用户通过chgrp brian rootfile.txt把文件所在的组给了brian

1
2
3
4
5
6
7
8
root@DESKTOP-FH09R9R:/home/brian# ls -lh
-rwxrwxr-- 1 root root 19 Aug 15 17:04 rootfile.txt

root@DESKTOP-FH09R9R:/home/brian# chgrp brian rootfile.txt

root@DESKTOP-FH09R9R:/home/brian# ls -lh
-rwxrwxr-- 1 root brian 19 Aug 15 17:04 rootfile.txt