【Linux】权限理解【文件权限以及目录权限详解、以及umsk程序掩码知识详解】

权限理解

一、Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户:可以在linux系统下做任何事情不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

二、su [用户名] : 切换用户

命令:su [用户名]
功能:切换用户

从root用户切换到普通用户user,则使用 su user
从普通用户user切换到root用户 则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

三、Linux权限管理

文件

(一)文件访问者的分类(人)

  • 文件和文件目录的所有者u—User(中国平民 法律问题)
  • 文件和文件目录的 所有者所在的组的用户g—Group(不多说)
  • 其它用户o—Others (外国人)


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

在这里插入图片描述

(1)第一位:文件类型

  • -普通文件【包括 文本、源代码、图片、视频、(动静态库)库、可执行程序 等,已经涵盖了所有的文件类型】

  • l软链接 链接文件(类似Windows的快捷方式)
    在这里插入图片描述

    像windows下的桌面快捷方式
    在这里插入图片描述
    在这里插入图片描述

  • b块设备文件(例如硬盘、光驱等)

  • p管道文件
    管道文件数据化线|(都是兄弟)本质就是用来传递信息的

  • c字符设备文件(例如屏幕等串口设备

  • s套接口文件



关于文件后缀

  • windows 与 文件后缀 有关

  • 在Linux系统中 与 -ll ,-ls 显示的文件信息中,前面第一位的文件类型有关,与文件后缀无关
    在这里插入图片描述

用cat查看 确实是可执行程序
但mv到 .txt文件中
使用 gcc/g++ 等工具 需要考虑对应的后缀

在这里插入图片描述



可执行程序的条件


可执行的条件

  1. 首先,文件本身就是可执行文件

  2. 第一位:文件类型 具有 -x 可执行权限

但系统之上的编译器指令,工具, 需要考虑对应相应的文件后缀

=> Linux 的文件类型不通过后缀区分( 不代表Linux不用后缀 )


  • 对于文件后缀的态度 :虽然Linux不通过它识别文件类型,但是我们依旧推荐使用!:
    1. 使用工具时需要相应的文件后缀
    2. 人需要(人看一目了然)


(2)第2—10位:基本权限

  • r/4)[ Read ]

    对文件而言, 读取文件内容 ;对目录来说, 浏览该目录信息

  • w/2)[ Write ]

    对文件而言, 修改文件内容 ;对目录来说,删除移动目录内文件

  • 执行x/1)[ execute ]

    对文件而言,执行文件 ; 对目录来说, 进入目录

  • ” 表示 不具有该项权限



(三)文件权限值的表示方法

  1. 字符表示方法
    在这里插入图片描述

  2. 8进制数值表示方法
    在这里插入图片描述



(四)文件访问权限的相关设置方法

(1)chmod [参数] 权限 文件名:设置文件的访问权限

功能设置文件的访问权限
格式chmod [参数] 权限 文件名


常用选项

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

(2)chmod 命令权限值的格式

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

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

用户符号

  • u拥有者
  • g拥有者同组用
  • o其它用户
  • a所有用户
//实例
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
# chmod a=x /home/abc.txt

chmod a=x /home/abc.txt



②三位8进制数字

//实例
# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt

chmod 640 /home/abc.txt



(3)chown [参数] 用户名 文件名 :修改文件的拥有者

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

//实例
# chown user1 f1
# chown -R user1 filegroup1


(4)chgrp [参数] 用户组名 文件名 : 修改文件或目录的所属组

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名


常用选项

  • -R 递归修改文件或目录的所属组
//实例
# chgrp users /abc/f2

chgrp users /abc/f2



(5)file [选项] 文件或目录 :辨识文件类型

功能说明:辨识文件类型。
语法:file [选项] 文件或目录

常用选项:

  • -c 详细显示指令执行过程便于排错或分析程序执行的情形

  • -z 尝试去解读 压缩文件 的内容



sudo分配权限

四、使用 sudo分配权限:

(1)修改/etc/sudoers 文件分配文件:格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令

# chmod 740 /etc/sudoers
# vi /etc/sudoer

(2)使用 sudo 调用授权的命令:$ sudo –u 用户名 命令

//实例
$sudo -u root /usr/sbin/useradd u2


目录的权限

目录也是文件

  1. 对用户先进行匹配,对应的第2-10位用户权限
  • -x可执行权限如果目录没有可执行权限, 则无法cd到目录中.

    创建一个目录 几乎给拥有者所属组都具备了-x权限,有可执行-x权限 就一定能进文件
    在这里插入图片描述

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

    -ll ls-l 都是 查看对应文件的属性-r读权限 取决于是否有权利查看文件的属性

    -x 可以进文件,但无 -r 权限 无法通过ls查看文件属性
    在这里插入图片描述

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

    -w写权限,则无法在文件中进行创建文件等活动
    在这里插入图片描述



★ 五、关于权限的总结

  • 目录的可执行权限 是表示 你可否在目录下执行命令
  1. -x 决定是否可以进入目录

    如果 目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件

  2. -r 决定是否可以进行对文件属性信息进行查看的权力

    而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限 ,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档

    也就是说 -x 权限 是后续操作的前提

  3. -w 决定是否可以在目录下进行 新建 和 删除 文件

对于 删除 存在着一些讨论:root就算没有权限,也能进行修改,任何都能做

在这里插入图片描述



于是, 问题来了~~

  • 问题一
    换句话来讲, 就是 只要用户具有 目录 的写权限, 用户就可以删除 目录中 的文件, 而不论这个用户是否有这个文件的写权限.

    • 这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下


虽然文件目录确实是你的,但文件的所有者是root。且该文件并没有开放任何权限,所以普通用户无法对其进行任何修改。
在这里插入图片描述


既然什么都做不了,留着也没什么用,那我普通用户就你root账号建设的文件给删除了。
在这里插入图片描述

问:为什么 普通用户 可以将 root账号 设置的文件给删除掉?即便你是root文件 我想删我也能删,尽管没有任何权限-x -r -w 凭什么可以删掉?

解答:答案就是我们前面说的。只要用户具有 目录 的写权限, 用户就可以删除 目录中 的文件, 而不论这个用户是否有这个文件的写权限.

虽然文件目录确实是你的,但文件的所有者是root,文件所有者有权对文件权限进行设置 。

但该 文件所在的目录 是我的,虽然文件不是我的 。
对于这个目录,我是拥有者-u 对应的写权限我是有的,所以我可以对这个目录里的内容进行修改


一个文件能否被删除,并不取决于文件本身!!! 而取决于文件所处的目录,拥有者是否具有-w权限!!

  • 问题二
    但应不应该删除root在未经自己允许的情况下设置的文件呢 ?这是否合理?

    • 合理,你root账号可以未经别人允许即可进入别人的目录里 别人并没有同意让你在里面写文件 那么别人也有权删除你创建的文件。

    • 现在的问题已经不在于删的合不合理了 而是在于你为什么要随便在别人的目录下创建文件呢

但现实中并不会存在这样的问题

只对自己有权限,别人都没有。普通用户之间 乱搞不了
在这里插入图片描述
只有root用户 和 超级用户 才会出现这样的情况 但你也有权 也可以 删除



六、/tmp目录:文件共享

家目录只对自己一个人有权限,对其他用户无权访问。

所以只能且 需要 在系统中的非家目录中进行 文件共享 。比如说 系统中的 /tmp 目录( 权限对u,g,o 都开放了 )
在这里插入图片描述
所以有 -w 权限,所有人都能删除tmp里的文件


删一个文件你这个文件无关!如果 想让其他人 看 或者 写,确实做到了 ---- 但是我们防不住别人删我!

  • 问题三:我们去掉other的w权限不就可以了吗?

    • /tmp 目录,无-w 虽说删不了( 能解决上述由于/tmp目录对于u,g,o的权限的全开放,避免了自己开辟的文件被别人删除的可能 )

    • 但你能在root拥有者的tmp中能建文件的前提 也是因为-w

      没了-w,新文件也在里面建不了,何来的共享可言。


为了解决这个不科学的问题, Linux引入了粘滞位的概念 .



七、粘滞位 chmod o+t

[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 919 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

other 新增一个权限:t

粘滞位:给 自录共享 中的 other 设置的一个权限位 t,具有x的意义,同时也进一步对目录权限进行特殊限定:

该目录里面的文件,只有 超级用户root文件的拥有者目录的所有者 有权利进行删除!!
其他人一概不允许!


粘滞位 ( 用chmod o+t )



八、umask

umask前言引入

  • 在Linux系统当中,可执行程序所占的比例只占其中一部分,只有必须得用可执行程序的才会加上-x, 不需要的可由用户自己去加,或者其他生成软件去加。

目录和可执行程序,本身天然的就需要-x,系统自动就会给你带上

那么

  • 新建目录文件 的起始权限 本身就是从777开始( 带-x ),事实上:775
  • 而新建普通文件 的起始权限 则是从666开始( 不带-x ),实际上:664

在这里插入图片描述

这是为什么呢? 原因就是创建文件或目录的时候还要受到umask文件掩码的影响。



(一)umask 权限值 :查看或修改文件掩码 [ 权限掩码:定制一个文件被创建的时候的默认权限 ]


功能
查看修改 文件掩码给目录定制 被创建时的 默认权限

//实例
# umask 755
# umask    ★查看
# umask 044     ★设置

(二)umask过程及原理

  • 新建文件默认权限=0666

  • 新建目录 默认权限=0777

    【只关心后面3个】

在这里插入图片描述
不是减法借位作减法 得到的663 而不是664 】


(1)什么叫程序掩码?

  • umask【值】:【值】八进制二进制:权限掩码

  • 程序掩码=最终不会出现的码 在umask当中出现的权限,就不应该在最终的权限中出现

(2)程序掩码具体实现

先 按位取反~(任何跟0按位与都会被转换成0) 后 再按位与 &
在这里插入图片描述

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

格式:umask 权限值
说明:将现有的存取权限 减去 权限掩码后即可产生建立文件时预设权限。

超级用户root 默认掩码值为 0022普通用户 默认为 0002


umask 权限值:修改文件掩码,将现有的存取权限 减去 权限掩码后即可产生建立文件时预设权限。
在这里插入图片描述
由此可见,最终权限:由 起始权限 和 umask权限掩码 共同决定

猜你喜欢

转载自blog.csdn.net/NiNi_suanfa/article/details/134496272
今日推荐