文件权限管理

更多资料下载,冲击月薪过万,一线经验工程师录制, 干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com

文件的权限有三种:只读、可写、可执行。
Linux是一个多用户的系统,每个用户在系统中的角色和地位不同,所拥有的权限也不一样,同样一个文件,有的用户可读可写,有的用户则只能进行读操作,无法对其改写。有的文件具有执行权限,可以直接运行,而有的文件则不能。

这些是如何做到的呢?
Linux使用9位字符来表示一个文件的不同权限:

# ls -al
-rwxr-xr-x 1 root root 7348 Oct 10 08:40  a.out
drwxr-xr-x 2 root root 4096 Oct 10 08:44  dir
-rwxr-xr-x 1 root root 37   Oct 10 07:52  hello.sh
-rw-r--r-- 1 root root 83   Oct 10 08:40  main.c

一个文件一般都有一个唯一的所有者(owner),谁创建了这个文件,一般谁就是这个文件的所有者。文件的所有者一般对文件有读、写和执行的权限。

Linux分别使用r、w、x表示一个文件的读、写、执行权限,分别对应数字是1、2、4。对应符号位上的-表示当前用户没有该权限。文件的所有者对文件的权限最大,所以一般是rwx。所有者权限为前面还有一个字符位用来表示文件类型,d是目录,-是普通文件。

在一个公司项目中,一般都是团队开发,假设你创建的一个文件main.c,项目组的其他同事可能也会修改它,那该如何设置呢?很简单,可以创建一个用户组,把项目团队里的用户都拉进这个用户组里,赋予这个用户组写的权限,那么,所有属于这个用户组的用户都可以修改这个文件了。而对于公司里的其他用户,为了安全起见,只赋予他们只读权限就可以了:可以阅读和访问这个文件,但是无法更改。

在Linux系统中,一个用户必须有一个自己的组,所有的用户都是按组分类的,一个用户可以属于一个单人组,也可以同时属于多个组。就和人类一样,你可以同时是骑行协会和围棋社的成员,如果你什么社团都不加,你本身也有一个组,你是这个组的唯一成员。

在Linux系统下,对于每一个普通用户,如wit,对应目录/home/wit下的文件都是wit用户创建的,文件的所有者和所属群组都是wit,wit用户对该目录下的文件有读和写的权限,其它普通用户则只有读的权限。

# pwd
/home/wit
# ls -al
drwxr-xr-x 2 wit wit  4096 Jun 19 2017 Music
drwxr-xr-x 2 wit wit  4096 Jun 19 2017 Pictures
-rw-r--r-- 1 wit wit  675  Jun 19 2017 .profile
drwxr-xr-x 2 wit wit  4096 Jun 19 2017 Public
-rw-r--r-- 1 wit wit  0    Jun 19 2017 .sudo_as_admin_successful
drwxr-xr-x 2 wit wit  4096 Jun 19 2017 Templates
drwxr-xr-x 2 wit wit  4096 Jun 19 2017 Videos
-rw------- 1 wit wit  4526 Oct 8 13:38 .viminfo
-rwxr--r-- 1 wit wit  8400 Jul 9 2019  .vimrc
-rw------- 1 wit wit  51   Oct 9 18:16 .Xauthority
-rw------- 1 wit wit  201  Oct 9 18:16 .xsession-errors

而在Linux其它目录下的文件,如Linux根目录下的文件和目录,都是root用户创建的,文件的所有者和所属群组都是一般都是root,除了root用户,其它普通用户只有读的权限。

# pwd
 /
# ls -al
total 112
drwxr-xr-x 23 root root 4096 Oct 9 11:56 .
drwxr-xr-x 23 root root 4096 Oct 9 11:56 ..
drwxr-xr-x  2 root root 4096 Oct 9 11:54 bin
drwxr-xr-x  3 root root 4096 Oct 9 11:56 boot
drwxrwxr-x  2 root root 4096 Jun 19 2017 cdrom
drwxr-xr-x 18 root root 4040 Oct 9 16:06 dev
drwxr-xr-x 134 root root 12288 Oct 9 16:01 etc
drwxr-xr-x  9 root root 4096 Oct 10 07:51 home
drwxr-xr-x 23 root root 4096 Oct 9 11:53 lib
drwx------  2 root root 16384 Jun 19 2017 lost+found
drwxr-xr-x  3 root root 4096 Apr 21 2016 media
drwxr-xr-x  2 root root 4096 Apr 21 2016 mnt
drwxr-xr-x  3 root root 4096 Jun 19 2017 opt
dr-xr-xr-x 197 root root   0 Oct 9 15:56 proc
drwx------  8 root root 4096 Oct 10 09:41 root
drwxr-xr-x 28 root root  960 Oct 10 07:48 run
drwxr-xr-x  2 root root 12288 Oct 9 11:54 sbin
drwxr-xr-x  2 root root 4096 Feb 16 2020 snap
drwxr-xr-x  2 root root 4096 Apr 21 2016 srv
dr-xr-xr-x 13 root root   0 Oct 10 07:51 sys
drwxrwxrwt 14 root root 12288 Oct 10 09:17 tmp
drwxr-xr-x 13 root root 4096 Jun 19 2017 usr``
drwxr-xr-x 14 root root 4096 Apr 21 2016 var

因为root用户是一个具有超级权限的用户,对所有的文件都有最高读写权限,所以对于普通用户创建的文件,虽然所有者和所属组都不包含root,但root仍然对其有读、写的权限。

用户可以通过chmod命令来更改一个文件的读写权限,通过chomd +数字,重新设置9个符号位,来修改不同用户和组对该文件的读写权限(读4:、写:2、执行:1)。

# chomd 666 main.c   将main.c文件设置为所有人可读写
# touch test.sh
# ll test.sh
-rw-r--r-- 1 root root 0 Oct 10 09:51 test .sh
# chmod +x test.sh     给test.sh添加可执行权限 
# ll test.sh
-rwxr-xr-x 1 root root 0 Oct 10 09:51 test.sh

我们在root账户下创建了test.sh文件,所以test.sh文件的所有者和所属组都是root,我们也可以通过chown来更改文件的所有者、所属组。

# chown wit test.sh                       更改文件的owner
# ll test.sh
-rwxr-xr-x 1 wit root  0 Oct 10 09:51  test.sh
# chown wit:wit test.sh                   更改文件的owner和groups
# ll test.sh                              
-rwxr-xr-x 1 wit wit   0 Oct 10 09:51 test.sh
《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客