Linux--权限问题(2)

目录

前文

前言

1. 文件的权限 

1.1 文件的访问者分类

 1.2 文件类型和访问权限(事物属性)

 2. 如何修改文件的权限

 3.对比权限有无的表现

4.修改用户角色

5.修改权限的第二种做法 

 6.目录的权限

7.默认权限


前文

Linux--权限问题(1)-CSDN博客

前言

在权限问题(1)中,我们了解到:权限= 用户角色(具体的人)+文件权限的属性。    

本章我们将对用户角色和文件权限属性展开更加深入的解读。

1. 文件的权限 


1.1 文件的访问者分类

  • 文件和文件目录的所有者: u---User
  • 文件和文件目录的所有者所在的组的用户: g---Group
  • 其它用户: o---Others 

 1.2 文件类型和访问权限(事物属性)

Windows中是如何区分文件类型的?后缀名

但Linux不是通过后缀区分文件类型!

证明:

        我们gcc生成了可执行文件a.out 我们执行它打印出了hhh,我们将a.out mv到a.sdsadsa,执行这个文件它同样可以正常执行,因此可以说明,inux不是通过后缀区分文件类型。

Linux是通过第一个属性列来区分文件类型。但是Linux上面的工具可能区分(eg:gcc)

文件类型:

  •         d:目录文件(文件夹)
  •         -:普通文件(文本文件,可执行程序,库等)
  •         l:软链接(类似Windows的快捷方式)
  •         b:块设备文件(例如硬盘、光驱等)

  •         p:管道文件
  •         c:字符设备文件(例如屏幕等串口设备)

在xshell中显示器文件一般都在,/dev/pts中,下面的0和1就是表示我们开了两个终端,序号为0和序号为1的终端

在Linux中一切皆文件,我们可以像访问文件一样去访问显示器这样的硬件设备

  •         s:套接口文件

基本权限:

三三为一组,分别对应:拥有者,所属组,other。

  •         i.读(r/4): Read对文件而言,,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  •         ii.写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  •         iii.执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  •         iv.“—”表示不具有该项权限

eg:

        test.txt文件,他的拥有者有读写权限,但没有可执行权限,他的所属组有读写权限,但没有可执行权限,other只有读权限。


 2. 如何修改文件的权限

我们想修改一个人的权限,这时我们要用到一个指令:chmod


功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:

  •         R -> 递归修改目录文件的权限
  •         说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式

① 用户表示符+/-=权限字符

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限
  • 用户符号:
  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

eg:去掉testr.txt中ugo的所有权限

如图(testr.txt中ugo的所有权限都被去掉了)

        加回testr.txt中ugo的所有权限

如图(testr.txt中ugo的所有权限都被加回了)

        上面的这种方式适合对1种或者2种角色的权限进行修改,如果想修改所有人的权限,这里有更简便的方法

如图(a就代表所有人了)


 3.对比权限有无的表现

        我们可以看到,此时test.txt的拥有者拥有文件的读写权限,我们成功的向test.txt中写入了“hello”,从文件中成功的读出了“hello”。

        这时我们删掉了test.txt拥有者读写的条件,对文件进行读写操作,结果发现无权限。

        这说明,普通用户要受到对应的权限约束,即使这个文件时自己的。

我们su,进入root账户下,结果发现仍然可以进行读写操作。

        说明 root账户不会受到权限的约束。但除了root以外其他的普通用户都是可以被限制的。

权限存在的意义:是为了保护普通用户的文件的一般安全性。


        这里有个小细节:在上面操作中我们发现,拥有者和所属组都是light,我们把拥有的权限修改了, 结果发现light所属组的身份并没有起到作用。

        这是因为,Linux进行身份匹配的时候,对用户身份进行识别,只识别一次。(light已经和test.txt文件的拥有者身份匹配过了,在当前指令下就不会在进行第二次匹配了)

我们来证明一下:我们先把拥有者改成root,改成root后,light就只是所属组了,就有权限对test.txt进行读写操作了。

这里我们要介绍两个指令:chown&&chgrp

chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名

chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
1. 将拥有者修改成root

2. 切换回light,尝试对test.txt进行读写

(发现权限并没有被限制)


*****关于可执行权限与可执行

eg:我们给test.c中拥有者加上了可执行权限,但是这个文件并不可以执行,原因是这个文件不是一个可执行的文件。

我们gcc test.c 生成可执行文件 a.out。只是后才可以执行

现在我们去掉可执行文件a.out拥有者的可执行权限,这时候文件就不能执行了。

所以,在这里我们可以得出一个结论:

        可以执行=有文件的执行权限+该文件是一个可执行文件


4.修改用户角色

我们在权限问题的第一章有谈到过:权限= 用户角色(具体的人)+文件权限的属性

在上面我们主要对文件的属性进行了操作,现在我们谈谈对用户角色的操作。

        在3.中,我们在root下将test.txt的拥有者改成了root,那么现在,我们在light下将test.txt的拥有者改成root

发现我们并没有权限修改。这相当于把文件给别人,在Linux中把文件给别人,这个动作也是需要权限的,因为Linux无法识别文件的好坏,这样可以有效的保护用户。

        那么我们如何将文件给别人呢,这里就要用到sudo,将指令提权,这就可以无视权限,将文件给别人了。(只有被root用户添加到信任列表里面的人才可以用sudo命令,这种方式一般常用于公司里面,现阶段我们用不到sudo,可以直接使用su变成root账户来模拟操作),实际上就是变相的把判断文件好坏的这一部分交给了人来做。

eg:将拥有者变成root

eg:将所属组也改成root

eg:简便方法,将所属组和拥有者一次性都改成light


5.修改权限的第二种做法 

8进制数值表示方法

        拥有者,所属组,other都是三三为一组。

我们把是由否有权限:是用1代替,否用0代替。

那么rw,我们就可以对应的写成110,那么转成八进制就是6,所以6就等于rw的效果。

rg:如果想表示文件的全部权限(u--rw ,g--rw,o--r)

rw6 rw6 w4来表示。


 6.目录的权限

文件=内容+属性

目录也是文件,目录的内容就是:该目录里面的所有的文件信息详情数据。

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中


可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.


可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.


在目录里删除一个文件是和目标文件是没有关系的!!!

       之和它所在的目录有关,目录的权限有多大,那么就决定了用户对目录中文件权限的大小。一个普通用户是一个目录的拥有者,并且拥有该目录的最大权限,该目录中如果有root创建的文件,那也是可以最该文件进行任意操作的!


7.默认权限

新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。

我们可以看到新建目录的默认权限是0776,新建文件的默认权限是0664。

这是为什么呢?

        原因就是创建文件或目录的时候还要受到umask的影响。

mask
功能:查看或修改文件掩码

假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

通过查看我们发现,Linux系统文件掩码默认值是0002

eg: 创建文件默认权限是0666,那么0666还要  按位与 上取反的umask的值

猜你喜欢

转载自blog.csdn.net/2301_76618602/article/details/134989486
今日推荐