• Linux 权限管理


    目录

    0.前言

    1.shell命令及其运行原理

    2.Linux权限概念

    3.Linux权限管理

    3.1文件访问者分类(人属性)

    3.2文件类型与访问属性(事物属性)

    3.2.1文件类型

    3.2.2基本权限

    3.3文件权限值的表示方法

    3.3.1字符表示

    3.3.2八进制/二进制数字表示

    3.4文件访问权限的设置方法

    3.4.1chmod

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

    3.4.1.2三位8进制数字

    3.4.2chown

    3.4.3chgrp

    3.4.4umask

    4.file指令

    4.1使用 sudo 分配权限

    4.1.1 修改 /etc/sudoers 文件分配权限

    4.1.2 使用 sudo 调用授权的命令

    5.目录的权限

    5.1目录权限介绍

    5.2粘滞位

    6.结语


    (图像由AI生成)

    0.前言

    在前面的章节中,我们介绍了Linux的一些基本指令和操作。这一节我们将深入探讨Linux系统中的权限管理,这是保障系统安全和正常运行的关键环节。通过对权限管理的理解和掌握,可以有效地保护系统文件和数据,避免不必要的安全风险。

    1.shell命令及其运行原理

    在Linux中,Shell是用户与操作系统之间的重要桥梁。虽然我们无法直接与Linux内核(kernel)交互,但可以通过Shell与其进行沟通。Shell的主要功能是解释用户输入的命令并将其传递给内核,执行相应的操作。

    Shell的工作原理可以简单归纳为以下几点:

    • 将用户的指令翻译成内核可以理解的命令。
    • 反馈执行结果并显示给用户。

    Windows的图形用户界面(GUI)不同,Linux通过命令行界面(CLI)与用户进行交互,这使得操作更加灵活和强大。用户可以通过输入命令来执行各种任务,例如文件管理、系统监控和网络配置等。

    Shell在Linux中的作用主要体现在以下方面:

    • 命令解释器:将用户输入的命令翻译成内核可以理解的操作指令。
    • 脚本执行器:可以编写Shell脚本,自动化执行多条命令,简化复杂任务。

    2.Linux权限概念

    在Linux系统中,权限管理是保证系统安全和稳定运行的重要机制。权限控制决定了谁可以访问、修改或执行文件和目录。

    用户分类

    Linux中的用户分为三类:

    • 超级用户(root):拥有系统的最高权限,可以执行任何操作。
    • 普通用户:权限受限,只能访问和操作自己拥有的文件和目录。
    • 组用户:与文件所有者同组的用户,具有特定的组权限。

    权限类型

    每个文件和目录都具有三种基本权限:

    • 读(r):允许查看文件内容或列出目录内容。
    • 写(w):允许修改文件内容或在目录中创建、删除文件。
    • 执行(x):允许执行文件或进入目录。

    通过理解这些基本概念和权限类型,用户可以更有效地管理和保护Linux系统中的资源。

    示例命令

    • su [用户名]:切换用户身份。如果普通用户要切换到root用户,则使用su命令,并输入root用户的密码。这使得用户可以临时获得超级用户权限,执行需要更高权限的操作。

    3.Linux权限管理

    3.1文件访问者分类(人属性)

    在Linux系统中,文件和目录的访问者被分类为三种类型:

    • 用户(User,u):文件或目录的所有者。
    • 组(Group,g):文件或目录所属的用户组。
    • 其他人(Others,o):系统中的其他用户。

    例如,在下图中:

    可以看到每个文件和目录的权限设置,包括所有者、所属组以及其他用户的权限。

    3.2文件类型与访问属性(事物属性)

    3.2.1文件类型

    Linux系统中的文件类型主要包括:

    • 普通文件(-):例如文本文件、脚本文件等。
    • 目录文件(d):用于存放其他文件和目录。
    • 符号链接文件(l):类似于Windows的快捷方式。
    • 块设备文件(b):例如硬盘、光驱等。
    • 字符设备文件(c):例如屏幕、串口设备等。
    • 管道文件(p):用于进程间通信的特殊文件。
    • 套接字文件(s):用于网络通信的特殊文件。

    如3.1中截图所示,不同的文件类型(具体为每行的第一个字符)在权限显示中有不同的表示方式。如install.sh为“-”,表示普通文件;linux_learning为“d”,表示目录(文件夹)。

    3.2.2基本权限

    每个文件和目录都有三种基本权限:

    • 读(r):允许查看文件内容或列出目录内容。
    • 写(w):允许修改文件内容或在目录中创建、删除文件。
    • 执行(x):允许执行文件或进入目录。

    在3.1的示例截图中:(注:每行第2-4字符为“所有者”权限,5-7为“所属组”权限,8-10为“其他用户”权限

    • -rw-rw-r--表示普通文件install.sh的权限,其中所有者和所属组都有读写权限,而其他用户只有读权限。
    • drwxrwxr-x表示目录linux_learning的权限,其中所有者和所属组都有读写执行权限,而其他用户只有读和执行权限。

    3.3文件权限值的表示方法

    3.3.1字符表示

    文件权限可以通过字符来表示,每个权限用三个字符表示,分别对应读(r)、写(w)、和执行(x)。以下是不同权限组合的字符表示方法:

    Linux表示说明Linux表示说明
    r--只读-w-仅可写
    --x仅可执行rw-可读可写
    -wx可写和可执行r-x可读可执行
    rwx可读可写可执行---无权限

    3.3.2八进制/二进制数字表示

    文件权限也可以用八进制和二进制数字来表示。以下是不同权限符号对应的八进制和二进制表示方法:

    权限符号 (读写执行)八进制二进制
    r4100
    w2010
    x1001
    rw6110
    rx5101
    wx3011
    rwx7111
    ---0000

    通过以上两种表示方法,可以清晰地理解和设置Linux系统中文件的访问权限。字符表示法直观易懂,而八进制/二进制表示法则在权限设置命令中更加简洁和高效。

    3.4文件访问权限的设置方法

    在Linux系统中,文件和目录的访问权限可以通过多种命令进行设置。以下是常用的命令和其使用方法。

    3.4.1chmod

    chmod命令用于设置文件的访问权限。其基本格式为:

    chmod [参数] 权限 文件名

    常用选项:

    • -R:递归修改目录及其文件的权限。

    说明:只有文件的所有者和root用户才可以改变文件的权限。

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

    使用符号表示法,可以通过以下符号来设置权限:

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

    用户符号:

    • u:所有者
    • g:所有者同组用户
    • o:其他用户
    • a:所有用户

    实例

    • 向文件/home/abc.txt的所有者增加写权限:
      chmod u+w /home/abc.txt
    • 取消文件/home/abc.txt对其他用户的执行权限:
      chmod o-x /home/abc.txt
    3.4.1.2三位8进制数字

    使用八进制数字表示法,可以一次性设置所有权限。(如忘记,可返回阅读3.3.2八进制/二进制数字表示)注意:第一、二、三个八进制数字分别代表所有者、所属组和其他用户的权限。

    实例

    • 设置文件/home/abc.txt的权限为所有者读写,组用户和其他用户只读:
      chmod 644 /home/abc.txt
    • 设置文件/home/abc.txt的权限为所有者读写,组用户只读,其他用户无权限:
      chmod 640 /home/abc.txt

    3.4.2chown

    chown命令用于修改文件的所有者。其基本格式为:

    chown [参数] 用户名 文件名

    实例

    • 将文件f1的所有者改为用户user1
      chown user1 f1
    • 递归修改目录filegroup1及其文件的所有者为用户user1
      chown -R user1 filegroup1

    3.4.3chgrp

    chgrp命令用于修改文件或目录的所属组。其基本格式为:

    chgrp [参数] 用户组名 文件名

    常用选项:

    • -R:递归修改文件或目录的所属组。

    实例

    • 将文件f1的所属组改为组group1
      chgrp group1 f1
    • 递归修改目录filegroup1及其文件的所属组为组group1
      chgrp -R group1 filegroup1

    3.4.4umask

    umask命令用于查看或修改文件权限掩码(umask)。创建新文件或目录时,系统默认权限会受到umask值的影响。

    新建文件的默认权限是0666(即所有用户都有读写权限),新建目录的默认权限是0777(即所有用户都有读写和执行权限)。然而,实际创建的文件和目录的权限往往不是这些默认值,这是因为它们受到了umask的影响。

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

    格式

    umask 权限值

    说明: 将现有的权限值减去权限掩码值后,即可产生建立文件时的预设权限。超级用户默认掩码值为0022,普通用户默认为0002

    实例

    • 查看当前umask值:

      umask
    • 设置umask值为755

      umask 755

    通过设置umask值,可以控制新建文件和目录的默认权限,从而提高系统的安全性和管理的灵活性。例如,设置umask值为0022,意味着新建文件的默认权限将从0666变为0644(即所有者有读写权限,组和其他用户只有读权限),新建目录的默认权限将从0777变为0755(即所有者有读写执行权限,组和其他用户有读执行权限)。

    这对于系统管理员和开发者来说,是一种有效的权限管理方式,可以确保新建文件和目录的安全性,同时减少不必要的权限设置操作。

    4.file指令

    file命令用于识别文件类型,它通过检查文件的头部信息和内容来确定文件的具体类型。该命令在文件管理和系统维护中非常有用。

    功能:辨识文件类型。

    语法

    file [选项] 文件或目录...

    常用选项

    • -c:详细显示指令执行过程,便于排错或分析程序执行的情况。
    • -z:尝试去解读压缩文件的内容。

    示例

    file /etc/passwd

    这条命令将输出文件/etc/passwd的类型,例如“ASCII text”。

    4.1使用 sudo 分配权限

    sudo命令允许系统管理员将权限授予普通用户,从而让他们能够执行特定的系统命令。下面介绍如何配置和使用sudo命令。

    4.1.1 修改 /etc/sudoers 文件分配权限

    要配置sudo权限,需要编辑/etc/sudoers文件。建议使用visudo命令进行编辑,以避免语法错误。

    步骤

    • 修改/etc/sudoers文件权限,使其只有所有者可读写:
      chmod 740 /etc/sudoers
    • 使用visudo命令编辑/etc/sudoers文件:
      vi /etc/sudoers

    /etc/sudoers文件中,可以添加如下行来授予用户特定权限:

    username ALL=(ALL) ALL

    这样配置后,用户username将拥有执行所有命令的权限。

    4.1.2 使用 sudo 调用授权的命令

    配置完成后,用户可以使用sudo命令来执行需要权限的操作。

    语法

    sudo -u 用户名 命令

    示例

    • 使用root用户权限添加用户u2
      sudo -u root /usr/sbin/useradd u2

    通过使用sudo命令,系统管理员可以有效地控制用户权限,确保系统的安全性和稳定性。

    5.目录的权限

    目录在Linux系统中不仅仅是存放文件的地方,它们也有自己的权限设置。理解目录权限对于有效管理系统资源和保证安全至关重要。

    5.1目录权限介绍

    目录的权限和文件类似,分为读(r)、写(w)和执行(x)三种,但它们的作用有所不同:

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

    举个例子:

    • 一个用户如果对某个目录只有写权限,但没有读和执行权限,那么这个用户可以在该目录下创建或删除文件,但无法查看目录内容或进入目录。

    5.2粘滞位

    粘滞位(Sticky Bit)是目录权限的一种特殊设置,它限制了目录中文件的删除权限。通常,任何用户如果对某个目录具有写权限,都可以删除该目录中的文件。然而,启用了粘滞位的目录中,只有文件的所有者、目录的所有者或超级用户才能删除文件。

    设置粘滞位的命令是chmod +t。例如:

    chmod +t /home

    设置粘滞位后,可以使用ls -ld命令查看目录权限:

    ls -ld /home

    输出结果将显示粘滞位设置,如下所示:

    drwxrwxrwt 3 root root 4096 9月 19 16:00 /home/

    下面是一个示例,展示了粘滞位的作用:

    1. 给目录/home添加粘滞位:

      chmod +t /home
    2. 查看目录权限:

      ls -ld /home
    3. 尝试删除其他用户的文件:

      su - litao rm /home/abc.c

    如果文件不是当前用户创建的,将会出现以下提示,无法删除:

    rm: 无法删除“/home/abc.c”:不允许的操作

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

    1. 超级管理员删除
    2. 该目录的所有者删除
    3. 该文件的所有者删除

    通过以上设置和管理,可以有效防止用户意外删除其他用户的重要文件,保证系统的安全和稳定。

    6.结语

    通过本篇博客,我们深入了解了Linux权限管理的各个方面,从基本的权限概念到具体的命令操作,再到特殊的粘滞位设置。这些知识不仅帮助我们有效管理系统文件和目录,确保系统安全和稳定运行,也为我们的日常操作提供了有力支持。希望这些内容能为你在实际工作中带来帮助,让你在Linux系统管理中更加得心应手。

  • 相关阅读:
    【JavaWeb】FilterConfig应用示例
    判断矩形与矩形、圆、三角形的相交问题
    【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型
    mysql的索引
    详解synchronize关键字
    Android BottomSheet总结
    基于Java+SpringBoot+Vue前后端分离失物招领平台设计和实现
    爆冷?黑马?这次用python来给你推测一波.....
    455. 分发饼干
    KT6368A蓝牙的认证问题_FCC和BQB_CE_KC认证或者其它说明
  • 原文地址:https://blog.csdn.net/wxk2227814847/article/details/140992302