欢迎光临
我们一直在努力

Linux 权限全套通关手册,零基础一次学懂

前言

本文完整覆盖 Linux 权限全体系知识,从基础 rwx 读写执行权限、文件归属控制、默认权限掩码,到 sudo 管理员提权、SUID/SGID/Sticky 三类特殊权限、chattr 内核级文件防护,搭配终端演示命令与原理分析,兼顾理论与实操,方便系统梳理 Linux 权限安全逻辑。

一、Linux 基础权限核心概念

1. 权限划分对象

ls -l 输出的权限字符串分为三段,对应三类访问主体:

  • u(user):文件所有者,拥有最高操作权限

  • g(group):文件所属用户组,同组用户共享一组权限

  • o(other):系统其余所有登录用户

  • a(all):统一指代所有者、同组、其他全部用户

2. rwx 权限作用区分(文件与目录逻辑完全不同)

普通文件
  • r:读取文件内容,cat/less 等查看操作依赖此权限

  • w:修改、覆盖、追加文件内容,无 w 权限无法写入数据

  • x:执行权限,拥有后可通过 ./文件名 运行脚本、二进制程序

目录

目录本质是存储文件索引的记录表,权限逻辑和文本文件差异极大:

  • r:仅能列出目录内部文件名称,无法进入、无法读取文件内容

  • x:访问记录表的基础资格,用来 cd 进入目录、读取内部文件属性,仅有 r 没有 x 会出现看得见文件名但打不开文件的情况

  • w:管控目录内增删改操作,拥有 w 权限才可新建、删除、重命名目录内文件

普通文件 rwx 权限实操

[lizihan@centos7 lab 10:37:37]$ cd /lab
[lizihan@centos7 lab 10:37:51]$ cp /etc/hosts .
[lizihan@centos7 lab 10:39:27]$ chmod o=r hosts
[lizihan@centos7 lab 10:42:26]$ echo ni hao > hosts
-bash: hosts: 权限不够
[lizihan@centos7 lab 10:44:40]$ echo 'echo hello world' > mycommand
[lizihan@centos7 lab 10:44:48]$ chmod u+x mycommand
[lizihan@centos7 lab 10:45:05]$ /lab/mycommand
hello world

hosts 文件归属 root 用户,普通用户仅分配了读权限,缺少写入权限,执行覆盖写入操作直接报错。mycommand 只是纯文本脚本,系统默认不会分配执行权限,手动添加 u+x 后才能直接调用运行,直观体现 x 权限对程序执行的作用。

目录 rwx 权限实操

[lizihan@centos7 lab 11:19:18]$ sudo mkdir dir1
[lizihan@centos7 lab 11:21:24]$ sudo chmod -R a=– dir1
[lizihan@centos7 lab 11:23:27]$ ls dir1
ls: cannot open directory dir1/: Permission denied
[lizihan@centos7 lab 11:24:11]$ sudo chmod o+r dir1
[lizihan@centos7 lab 11:25:23]$ sudo chmod o=x dir1
[lizihan@centos7 lab 11:25:31]$ cd dir1

chmod -R a=- dir1 会清空目录和内部所有文件的全部权限,此时不管是列举内容还是切换目录都会被拦截。单独开放 r 权限后,终端能打印目录内文件名,但缺少 x 权限依旧无法进入目录。只有同时赋予 r 和 x,才能正常访问目录内部资源,足以说明 x 是目录操作的核心权限。

二、chmod、chown 命令详解

核心功能区分

  • chmod:修改文件 / 目录 rwx 读写执行权限,管控用户能对文件执行哪些操作,分为符号写法、八进制数字写法两种使用方式。

  • chown:修改文件所有者与所属用户组,决定文件归属谁,该操作属于管理员操作,普通用户无执行资格。

  • -R:递归参数,仅对目录生效,执行后会同步修改目录本体以及内部全部文件、子目录的权限或归属信息。

  • 关键实操命令

    [lizihan@centos7 lab 13:59:09]$ sudo chown root:root dir1/hosts
    [lizihan@centos7 lab 13:59:47]$ sudo chmod o=r,ug=– dir1/hosts
    [lizihan@centos7 ~ 15:00:39]$ chown lizihan:lizihan dir1
    chown: 正在更改"dir1" 的所有者: 不允许的操作
    [lizihan@centos7 ~ 15:01:32]$ sudo chown lizihan:lizihan dir1

    chown 命令中冒号前是新所有者,冒号后是目标用户组。普通用户直接执行 chown 会被系统拦截,只有搭配 sudo 临时获取管理员身份,才能变更文件归属。

    三、umask 默认权限掩码

    底层计算规则

    系统预设两套基础权限:新建目录默认最大权限 777,普通文件不会自带执行权限,基准权限固定为 666。 最终生效权限 = 基准权限 – umask 掩码数值,掩码代表新建文件时系统自动剔除的权限。 直接在终端设置 umask 仅当前会话生效,写入~/.bashrc 环境配置文件后,所有新登录终端都会沿用该掩码。

    [lizihan@centos7 lab 14:55:29]$ umask
    0002
    [lizihan@centos7 lab 14:55:44]$ umask 077
    [lizihan@centos7 ~ 16:07:46]$ vim ~/.bashrc
    # 文件末尾写入 umask 077 实现永久生效

    以 umask 077 举例计算: 目录:777 – 077 = 700,权限 rwx——,仅所有者可操作; 文件:666 – 077 = 600,权限 rw——-,同组、其他用户无任何访问权限,适合存放私密数据。

    四、sudo 管理员提权机制与典型坑点

    核心原理

    普通用户权限存在限制,无法操作系统目录、核心配置以及其他用户的文件。sudo 可以让授权用户临时借用 root 权限执行指令,命令运行完毕后管理员身份会立刻回收。 CentOS 系列系统默认规则:只有加入 wheel 用户组的账号,才能使用 sudo 提权。

    多条命令分号分隔踩坑演示

    [lizihan@centos7 lab 14:53:28]$ sudo mkdir d1;touch f1
    touch: 无法创建"f1": 权限不够
    # 正确写法,整条命令统一使用sudo权限
    [lizihan@centos7 lab 14:53:47]$ sudo bash -c "mkdir d1;touch f1"

    分号属于命令分隔符,会把一行语句拆成两条独立指令。sudo 仅作用于紧随其后的第一条 mkdir,后面的 touch 会退回普通用户身份。/lab 目录归属 root,普通用户没有写入权限,因此新建文件失败。使用 sudo bash -c 包裹全部指令,所有操作都会在管理员 shell 内执行,规避权限丢失问题。

    wheel 用户组与 sudo 权限管理

    [lizihan@centos7 lab 11:29:23]$ id lizihan
    uid=1000(lizihan) gid=1000(lizihan)=1000(lizihan),10(wheel)
    [lizihan@centos7 lab 11:34:09]$ sudo groupmems -g wheel -d lizihan
    [lizihan@centos7 lab 11:34:57]$ id lizihan
    uid=1000(lizihan) gid=1000(lizihan)=1000(lizihan)

    id 指令可以查看账号所属全部用户组,把用户从 wheel 组移除后,该账号会彻底失去 sudo 使用权限,日常运维中常用来限制普通用户的管理员操作范围。

    五、三大特殊权限:SUID / SGID / Sticky

    1. SUID 属主特殊权限

    仅针对二进制可执行文件生效,文件配置 SUID 后,任意用户运行该程序时,都会临时获得文件所有者的权限。passwd 命令是最典型的案例,普通用户依靠该特性修改归属 root 的 /etc/shadow 密码文件。

    [lizihan@centos7 ~ 15:04:27]$ ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27856 41 2020 /usr/bin/passwd
    [lizihan@centos7 ~ 15:32:03]$ sudo chmod u+s /usr/bin/vim
    [lizihan@centos7 ~ 15:37:51]$ sudo chmod u-s /usr/bin/vim
    [lizihan@centos7 ~ 15:42:08]$ stat -c %a /usr/bin/passwd
    4755

    权限位所有者 x 位置显示小写 s,代表同时拥有执行权限和 SUID;如果无执行权限则显示大写 S。八进制权限首位数字 4 代表开启 SUID,4755 就是带 SUID 标识的 755 基础权限。

    2. SGID 属组特殊权限

    SGID 分两种使用场景:作用于程序时,运行者临时获取文件所属组权限;作用于目录是最常用场景,目录开启 SGID 后,内部新建文件、子目录会自动继承目录的所属组,不用手动调整归属,适配多人协同的共享目录。

    [lizihan@centos7 ~ 16:04:52]$ sudo groupadd devops
    [lizihan@centos7 ~ 16:05:14]$ sudo useradd -G devops dev1
    [lizihan@centos7 ~ 16:05:39]$ sudo mkdir /lab/webapp
    [lizihan@centos7 ~ 16:11:42]$ sudo chmod g+s /lab/webapp/
    [lizihan@centos7 ~ 16:12:28]$ sudo su -l dev1
    [dev1@centos7 ~ 16:12:43]$ touch /lab/webapp/webapp.sh

    dev1、dev2 两个用户同属于 devops 协作组,共享目录开启 SGID 后,dev1 创建的文件归属自动为 devops,dev2 登录后可直接编辑该文件,简化团队文件权限配置工作。

    3. Sticky 粘滞位

    粘滞位仅对公共目录生效,系统 /tmp 是标准示例。目录即便开放全部读写权限,开启粘滞位后,用户只能删除、修改自己创建的文件,无法操作其他用户的数据,避免公共目录内互相误删文件。

    [lizihan@centos7 ~ 16:15:52]$ ls -ld /tmp
    drwxrwxrwt. 39 root root 4096 720 16:04 /tmp
    [lizihan@centos7 ~ 16:56:18]$ stat -c %a /tmp
    1777

    权限字符串其他用户 x 位显示 t,代表粘滞位已开启;八进制权限首位数字 1 对应 Sticky,1777 就是带粘滞位的全开放目录权限。

    六、chattr 内核级隐藏属性

    这类属性由 Linux 内核管控,优先级高于普通 rwx 和特殊权限,就算 root 用户也会受到约束,多用于核心配置、密钥文件安全加固。

    1. +a 仅追加属性

    [root@centos7 ~ 17:01:29]# chattr +a operator.log
    [root@centos7 ~ 17:01:37]# rm -f operator.log
    rm: cannot remove ‘operator.log’: Operation not permitted
    [root@centos7 ~ 17:01:49]# echo 123 >> operator.log

    文件添加 a 属性后,仅支持 >> 追加写入,不允许 > 覆盖清空、删除、重命名操作,非常适合系统日志文件,防止日志被恶意清空篡改。

    2. +i 不可变锁定属性

    [root@centos7 ~ 17:02:43]# chattr +i money_for_my_old_life
    [root@centos7 ~ 17:03:02]# rm -f money_for_my_old_life
    rm: cannot remove ‘money_for_my_old_life’: Operation not permitted

    i 是最高级别文件锁定,任何账号包括 root,都不能修改、删除、重命名目标文件。需要调整文件时,执行 chattr -i 解除锁定即可。

    七、stat 查看完整文件底层属性

    ls -l 只会展示简化后的权限信息,stat 能够输出八进制原始权限、inode 编号、atime/mtime/ctime 三类时间、磁盘占用等底层数据,编写自动化脚本时经常用来提取文件权限数值。

    [lizihan@centos7 ~ 15:41:47]$ stat -c %a /etc/passwd
    644
    [lizihan@centos7 ~ 15:42:08]$ stat -c %a /usr/bin/passwd
    4755

    总结

  • chmod 管控读写执行权限,chown 调整文件归属,二者搭配完成基础权限配置;

  • umask 控制新建文件、目录的初始权限,临时修改仅当前终端生效;

  • sudo 是普通用户临时获取管理员权限的工具,多条命令共用时需要注意作用域限制;

  • SUID 实现程序临时提权,SGID 适配多人共享目录,Sticky 保护公共临时目录;

  • chattr 内核锁定属性优先级最高,可对关键文件进行高强度安全防护。

  • 赞(0)
    未经允许不得转载:171主机测评 » Linux 权限全套通关手册,零基础一次学懂
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址