• Linux_文件权限


    Linux中的用户

    用户分类

    在Linux下有两种用户:

    • root用户
    • 普通用户

    其中普通用户的权限是受管控的

    其实在Windows下,也有用户的分类

    这里的管理员其实就相当于Linux的root用户,拥有最高的权限

    用户操作

    在root用户下我们可以创建普通用户:

    adduser [用户名]

    删除用户:

    userdel -r [用户名]

    确定当前用户:

    whoami

    切换用户:

    su - [用户名](不写用户名默认切换到root用户)

    如果是从root用户切换到普通用户不需要密码,

    其他:从root–>普通用户、普通用户平行切换,都需要输入目标用户的密码

    文件类型

    我们可以使用ls -lll指令显示当前目录下的文件及其属性

    其中最左侧的一位是文件的类型

    Linux中不是以文件后缀作文件区分的

    注意:只是说Linux的文件系统不以文件后缀区分,并不代表Linux下的软件也不区分后缀

    gcc编译器在编译的时候,是会识别文件的后缀的

    常见的文件类型

    • -:普通文件:

      文本、源代码、可执行文件、第三方动静态库

      touch创建的文件就是普通文件

    • d:目录文件

      makdir创建的文件夹

    • l:链接文件

      ln -s创建的软链接文件属性就是l

      这里的link就相当于windows的快捷方式

    • p:管道文件

      mkfifo创建的是管道文件

      后面进程间通信的一篇会用到管道文件

    • b:块设备文件:磁盘

    • c:字符设备文件

      在/dev路径下也可以看到很多c属性的文件

      这是一些终端:

      • 物理层面上的,如显示器
      • 抽象模拟的,如Xshell

    Linux的文件权限

    文件权限的定义

    要定义一个文件的权限,无非就是:什么人对文件有什么权限

    • 什么人可以访问

      Linux系统中,人分三类

      1. 文件的拥有者,owner
      2. 文件的所属组,grouper
      3. 文件的其他用户,other

      如下的第三块和第四块就分别是文件的所属用户和所属组

    • 允许的访问方式

      文件的权限属性分:

      1. 读:r
      2. 写:w
      3. 可执行:x

    属性的第1位是文件类型,

    后面的2-10位就是权限,三个为一组,共三组,分别代表拥有者、所属组和其他用户的权限

    wrx的顺序是确定的,如果对应位置是 “ - ” 代表此用户不具备此权限,是对应的字母就表示具备此权限

    如上:rwx r-x r-x,就表示所属用户可读可写可执行,所属组和其他用户不可写

    注意:如上的权限约束仅针对普通用户之间

    root用户是不受任何约束的,

    甚至如果一个文件的所属用户是root,去掉所属用户的所有权限之后,在root用户下依然可以读写此文件

    修改文件权限

    方法一:

    对某个人添加或去掉某个权限

    用户操作权限
    u:拥有组-:去掉r:读
    g:所属组+:添加w:写
    o:其他用户x:可执行
    a:以上三者

    chmod [用户][操作][权限] [文件名]

    可一次去掉或添加多个权限,如:chmod u-rwx test.txt

    也可通过“ , ”同时进行多组操作,如:chmod u-rwx,g+w,o-x test.txt

    也可对所有的用户作同样的修改,如:chmod a+r test.txt

    注意:”[用户][操作][权限] “的整个字符串中不能有空格

    方法二:

    权限属性的九位,每一位无非两种状态:有权限/没有权限

    我们就可以把rwx r-x r-x看作是111 101 101

    如果每三位可以用一个八进制数表示,九位权限属性就可以用三个八进制数表示

    rwx r-x r-x --> 111 101 101 --> 755

    第二种更改权限的方法就是直接输入代表目标权限的三个八进制数:

    chmod [三个八进制数] [文件名]

    修改文件的所属用户和所属组

    我们可以使用chown修改用户的所属用户和所属组

    但是,

    • 一方面把我的文件给被人一定要征得别人的同意,

    • 再者,文件的创建者和拥有者不一定是同一个

    所以执行此命令的时候一定要将权限升级为root或者切换为root用户

    修改所属用户:

    sudo chown [对应用户] [文件名]

    修改所属用户组:

    sudo chgrp [对应用户组] [文件名]

    同时修改所属用户和所属用户组:

    sudo chown [对应用户]:[对应用户组] [文件名]

    目录的权限

    • 如果我们要进入一个目录,需要目录的x权限

    • 如果目录只有w、x权限,没有r权限——允许进入和创建文件,无法查看文件列表

      (注意:如果我们记住了文件名,即使目录没有读的权限,依然是可以访问此目录下的可读写的文件的,这是因为,虽然无法通过目录找到文件名对应的那个文件,但是由于Linux的缓存机制,就不会到目录中找了,也就不会被目录的不可读所限制了)

    • 如果目录只有r、x权限,没有w权限——允许查看文件列表,无法创建、删除文件

    • 如果只有x权限——不允许创建或查看文件列表

      (注意:文件的内容是否可以修改或查看,仅由文件自己的权限决定)

    权限掩码—umask

    1. 默认的目录其实权限是777—rwx rwx rwx
    2. 默认的普通文件的权限是666—rw- rw- rw-
    3. 默认权限 != 最终权限

    但是我们新建的目录和文件的权限却是这样:

    可以看到实际的情况别是775,664

    其他用户的写权限都被去掉了

    这是因为有权限掩码的存在:

    • 第一位代表特殊权限(suid:4、sgid:2、sbit:1),不是八进制的意思。一般将其设置为0,即系统默认。具体作用这里先不做分析
    • 剩下的三位就分别对应三类用户的权限八进制数。

    掩码的002就代表从默认权限去掉其他用户的2对应的权限w

    实际创建的文件权限就是mask & ~umask

    我们也可以umask [四位权限数]设置umask

    粘滞位

    Linux下可以存在一些目录,拥有者和所属组是root,其他人允许以other的身份在该目录下,创建或删除文件

    其实也很好创建,只需要把目录的其他用户的读写权限打开即可

    所有用户在当前这个目录下都可以创建文件,读写自己的文件,删除文件

    在这个共享目录下,张三用户可以创建文件并把其他用户的读写权限去掉,此时李四用户可以进入这个目录看到张三写了这个文件,不能读写它,但是防不住李四去删除它。

    如果张三想在共享目录下形成临时文件,但是不允许除张三和root之外的人删除张三创建的文件,就需要让root用户给这个共享目录添加粘滞位

    操作:

    chmod +t [文件名]

    可以看到,目录的其他用户的可执行权限位就变为了t,表示该目录有粘滞位

    在根目录下的tmp目录就是这样的目录

  • 相关阅读:
    踩了个DNS解析的坑,但我还是没想通
    Linux传统跨进程通信原理
    【前端】望京soho某厂面试真题,建议收藏
    论文阅读》用语义解耦改进共情对话生成 2022 IJCKG
    学习网站集锦_001
    28335之GPIO输入
    C语言 Cortex-A7核 PWM实验
    一文讲明白Java中线程与进程、并发与并行、同步与异步
    如何解决iOS打包工具AppUploader登录权限问题?
    快消品行业SaaS多租户解决方案,构建全产业链数字化营销竞争力
  • 原文地址:https://blog.csdn.net/yue152152/article/details/127571870