当前位置 : 主页 > 操作系统 > centos >

Linux 下权限的管理

来源:互联网 收集:自由互联 发布时间:2022-06-20
Linux 下权限的管理 我们都知道,Linux系统对于用户的权限管理是十分严格的。 那么,我们就来具体了解一下。 一. 用户 在Linux中按照类型用户分为两种:1.超级用户 2.普通用户 那么它们

Linux 下权限的管理

我们都知道,Linux系统对于用户的权限管理是十分严格的。

那么,我们就来具体了解一下。

一. 用户

在Linux中按照类型用户分为两种:1.超级用户 2.普通用户

那么它们之间都有上面区别呢:

  • 超级用户的行为不受限制(我们一般称之为root用户)。
  • 普通用户的行为受到一定的限制。
  • 超级用户的命令提示符为#,普通用户的命令提示符为$。
  • 超级用户只能有一个(root),普通用户可以有多个。
  • 那么我们怎么切换用户呢?

    1. 怎么切换用户

    命令: su 用户名

    功能:切换用户

    示例:

  • 普通用户切换为root用户 -> 需要输入root用户的密码命令:su root 、su

    image-20211024220722555

  • root用户切换为普通用户 -> 不需要输入普通用户的密码命令:su 用户名示例:su opc

    image-20211024220539872

  • 普通用户切换为普通用户 -> 需要输入被切换用户的密码命令:su 用户名示例:su opc

    image-20211024220857965

  • 2. 普通用户怎么临时使用root用户的权利

    在日常操作的时候,我们经常会需要root的权利来操作一些事务,如:安装某个应用包,来查阅一些文件夹等等。

    如果我们没有root的权限就会出现如下情况:

    Error: This command has to be run with superuser privileges (under the root user on most systems).

    image-20211024221705604

    此时,我们要怎么做呢?

    我们只需将我们所需要提升权限的命令前加一个sudo即可,例如sudo yum install redis。

    但是,会有人出现如下情况:

    [fanya@centos ~]$ sudo yum install redis We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for fanya: fanya is not in the sudoers file. This incident will be reported. [fanya@centos ~]$

    image-20211024222431060

    这时我们只需以root的身份来编辑/etc.sudoers这个文件,在下述语句之后加一句你的用户名 ALL=(ALL) ALL

    ## Allow root to run any commands anywhere root ALL=(ALL) ALL

    image-20211024223916802

    具体操作命令:

    su # 切换为root用户 vi /etc/sudoers # 或 vim /etc/sudoers # 以下命令依次在vim窗口输入 1. 敲击键盘上的 Esc 按键 2. 敲击键盘上的 :按键 -> 你会发现屏幕下方出现了一个横条 3. 输入100,敲击回车 4. 敲击键盘上的y键两遍 5. 敲击键盘上的p键 6. 敲击键盘上的i键 7. 将root替换为你的用户名 8. 敲击键盘上的 Esc 按键 9. 敲击键盘上的 :按键 -> 你会发现屏幕下方出现了一个横条 10.输入 wq!,敲击回车即可

    或在root身份下以以下一行命令搞定:

    sed -i "101i fanya ALL=(ALL) ALL" /etc/sudoers # 将 fanya 修改为你的用户名

    二. 文件

    在之前说到 ls -l命令时,它会列出一些文件的权限信息,我们具体就来看看这些到底是什么image-20211106160321320

    1. 文件访问者

    对于用户来说,对权限的操控可以分为以下三种:

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

    另外还要说明几点:

  • 在Linux中,所有的用户都应隶属一个相应的组,尽管组中只有他一个人。
  • 假设有一个Linux系统里普通用户有fanya和zhang两个人,当fanya创建了一个文件,那么对于这个文件它的所有者就是fanya,zhang就是其他用户了。image-20211106163242645
  • 2. 文件类型和访问权限

    在使用ls -l命令时,会发现有形如drwxrwxr-x.这样的一串字符,那么它的意义是什么呢?

    image-20211106161025420

    1). 文件类型

    • d:文件夹
    • -:普通文件
    • l:软链接(类似Windows的快捷方式)
    • b:块设备文件(例如硬盘、光驱等)
    • p:管道文件
    • c:字符设备文件(例如屏幕等串口设备)
    • s:套接口文件

    2). 基本权限

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

    3.权限的表示

    表示权限的这串字符共有10个字符,它分为 1 + 3 + 3 + 3

    • 1 表示的时文件的类型,如普通文件、目录、可执行文件等等。
    • 3 表示某种文件访问者的可读、可写及可执行权限分别用r、w、x来表示
    • 3 + 3 + 3 则分别表示 文件所有者、文件所属组及其他人的相应权限

    image-20211106164410832

    1). 字符表示

    image-20211109212958133

    2). 数字表示(八进制)

    image-20211109213033786

    注意:一个八进制数字代表一种用户的权限,以3个八进制组成为一个文件的完整权限。例如777就代表着rwxrwxrwx。

    4.设置文件相关访问权限

    假设我们有如下文件:

    image-20211109213906185

    现有一个需求,我们需要修改test文件的权限,让其他人无法查看,我们需要怎么样做呢?

    这时就需要chomod命令了。

    1). chmod 修改文件的权限

    功能:设置文件的访问权限

    格式:chmod [参数] 权限 文件名

    常用选项:

    • R :递归修改目录文件的权限

    说明:只有文件的拥有者和超级用户才可以改变文件的权限

    chmod命令权限值的格式:

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

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

    示例:

    # 将test文件修改为其他用户无权限 # 原来的test文件权限:rw-rw-r-- chmod o=--- test # 或 chomd o-rwx test # 修改后的test文件权限:rw-rw----

    image-20211109215637649

    # 将test文件修改为其他用户可读可写可执行 # 原来的test文件权限:rw-rw-r-- chmod o=rwx test # 或 chomd o+rwx test # 修改后的test文件权限:rw-rw-rwx

    image-20211109215847781

  • 三位八进制数字

    示例:

    # 将test文件修改为其他用户无权限 # 原来的test文件权限:rw-rw-r-- chmod 660 test # 修改后的test文件权限:rw-rw----

    image-20211109220225821

    # 将test文件修改为其他用户可读可写可执行 # 原来的test文件权限:rw-rw-r-- chmod 667 test # 修改后的test文件权限:rw-rw-rwx

    image-20211109220325064

  • 2). chown 修改文件的拥有者

    功能:修改文件的拥有者

    格式:chown [参数] 用户名 文件名

    常用选项:

    • R :递归修改目录文件的权限

    注意:修改拥有者需以root身份进行

    示例:

    # 将test的拥有者改为opc sudo chown opc test

    image-20211109221204457

    3). chgrp 修改文件的所属组

    功能:修改文件的拥有者

    格式:chgrp [参数] 用户名 文件名

    常用选项:

    • R :递归修改目录文件的权限

    注意:修改所属组需以root身份进行

    示例:

    # 将test的所属组改为opc sudo chgrp opc test

    image-20211109221401951

    4). umask 查看或修改文件掩码

    当我们创建文件或是创建文件夹时,我们会发现它会带一些默认的权限,如图所示:

    image-20211109223033679

    而这些权限是怎么产生的呢?

    这就需要用到新的的知识了:

    实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。

    image-20211109223646361

    但是我们发现,它实际上与我们创建出来的文件权限并不相同,这又是为什么呢?

    原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

    格式:umask 权限值说明:

    • 将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
    • 超级用户默认掩码值为0022
    • 普通用户默认为0002
    • 查看当前默认umask只需在命令行下输入umask

    image-20211109224139252

    那么现在继续来解释上述问题,如上图所示,此时的umask为0002,文件的默认权限为0666,文件夹的默认权限为0777.

    image-20211109225235850

    此时我们发现,此时得出的权限与上述图中显示的一致。

    当然,我们可以通过控制umask的值,来控制最终生成的权限:

    image-20211109225856039

    三. 目录

    在刚才的讲解中,我们发现目录也有着可读可写可执行的权限,而它们又代表着什么意思呢?

    1. 目录的权限

    • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
    • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
    • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

    但是!!!

    在这里存在一个严重的问题,不知大家发现了没有?

    只要用户具有这个目录的写权限,用户就可以删除目录中的文件,而不论该用户是否有这个文件的写权限。

    换句话来说就是,张三创建了一个文件,但是李四却能删了它。这本就充满着极大的不合理性!

    我们来具体实践一下:

    image-20211110183804513

    那要怎么避免这种情况的发生呢?Linux中引入了粘滞位的概念。

    2.粘滞位

    语法: chmod +t 目录名

    功能: 给目录加上粘滞位

    当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件被删除的情况只有三种:

    • 一、超级管理员删除
    • 二、该目录的所有者删除
    • 三、该文件的所有者删除

    示例:

    image-20211110185524668

    注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件

    上一篇:【kubernetes】集群高可用(二进制)
    下一篇:没有了
    网友评论