ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux(2) 权限管理详解:rwx、chmod、chown、umask 与粘滞位

Linux(2) 权限管理详解:rwx、chmod、chown、umask 与粘滞位 Linux 权限管理详解rwx、chmod、chown、umask 与粘滞位在 Linux 中访问一个文件并不只是“文件存不存在”的问题还要看当前用户是否拥有相应权限。Linux 是一个多用户操作系统。为了防止不同用户之间互相修改文件、误删数据系统会为文件和目录记录访问权限并根据访问者的身份决定操作能否执行。本文从权限的基本概念出发依次讲解用户身份、rwx、chmod、chown、chgrp、umask最后分析目录权限和粘滞位。一、为什么 Linux 需要权限权限可以理解为系统对某个操作的“允许”或“拒绝”。当用户访问文件时Linux 至少需要判断两件事访问者是谁访问者准备对文件做什么。例如读取文件、修改文件和执行程序是三种不同的操作可能分别得到不同的授权。Linux 权限管理中通常有三类角色user文件所有者简称ugroup文件所属组简称gother既不是所有者也不属于所属组的其他用户简称o。系统会先确定当前用户属于哪一种角色再读取该角色对应的权限位。二、root、普通用户与 sudoLinux 中常见的用户可以分为两类。1. root 用户root是超级用户拥有很高的系统管理权限。提示符通常为#[roothost ~]#root 可以管理用户、安装软件、修改系统文件也可以绕过许多普通的权限限制。因此日常操作不建议长期使用 root 身份。2. 普通用户普通用户的权限受到限制提示符通常为$[userhost ~]$普通用户只能直接操作自己有权访问的资源。3. su 与 sudosu用于切换用户surootsu- root其中su -不仅切换身份还会加载目标用户的登录环境。sudo用于让经过授权的普通用户临时以更高权限执行一条命令sudotouch/root/demo.txt需要注意普通用户并不会因为输入自己的密码就自动获得 sudo 权限。用户必须被管理员加入 sudoers 配置系统才会允许其使用sudo。三、读懂 ls -l 显示的权限执行下面的命令ls-l可能得到-rw-r--r-- 1 alice developers 1024 Jul 19 15:23 test.txt从左到右可以重点关注- rw- r-- r-- alice developers test.txt │ │ │ │ │ │ │ │ │ │ │ └─ 所属组 │ │ │ │ └──────────── 所有者 │ │ │ └──────────────────── other 权限 │ │ └───────────────────────── group 权限 │ └────────────────────────────── user 权限 └────────────────────────────────── 文件类型第一个字符表示文件类型后面九个字符每三个一组依次表示所有者、所属组和其他用户的权限。四、r、w、x 到底表示什么1. 对普通文件权限数字含义r4读取文件内容w2修改文件内容x1将文件作为程序执行-0没有对应权限例如rw-r--r--表示所有者可以读写所属组只能读取其他用户只能读取。需要特别注意文件拥有执行权限并不意味着它一定能够正确运行。x表示系统允许尝试执行文件本身还必须是可执行程序或带有正确解释器声明的脚本。2. 对目录目录中的rwx含义与普通文件不同r可以查看目录中的文件名w可以在目录中创建、删除或重命名目录项x可以进入目录并访问已知名称的目录项。因此能否删除某个文件主要取决于用户是否拥有该文件所在目录的w和x权限而不是文件本身是否可写。这是 Linux 权限中非常容易混淆的一点。五、修改权限chmodchmod用于修改文件或目录的权限。1. 符号方式基本格式chmod[角色][操作][权限]文件名常用角色u所有者g所属组o其他用户a所有角色。常用操作增加权限-取消权限直接设定权限。示例# 给所有者增加执行权限chmodux script.sh# 取消所属组的写权限chmodg-w test.txt# 让其他用户只能读取chmodor test.txt# 所有人增加读取权限chmodar README.md也可以一次修改多个角色chmodurw,gr,o-rwx secret.txt2. 八进制数字方式数字权限把三种权限相加r 4 w 2 x 1常见组合如下权限数值含义rwx7读、写、执行rw-6读、写r-x5读、执行r--4只读---0无权限示例chmod755script.sh755可以拆成7 rwx 所有者 5 r-x 所属组 5 r-x 其他用户另一个常见设置是chmod644test.txt它表示所有者可以读写其他人只能读取。对于目录及其内部内容如果确实需要递归修改可以使用chmod-R755directory但不要随意对系统目录使用递归权限修改否则可能造成严重的安全问题或使程序无法运行。六、修改所有者和所属组1. chown修改所有者sudochownbob test.txt同时修改所有者与所属组sudochownbob:developers test.txt递归修改目录sudochown-Rbob:developers project2. chgrp修改所属组chgrpdevelopers test.txt普通用户不能任意把文件交给另一个用户也不能随意改成自己不属于的用户组。这些操作受到系统权限限制必要时需要管理员权限。七、Linux 中常见的文件类型ls -l输出中的第一个字符表示文件类型字符文件类型-普通文件d目录l符号链接b块设备文件例如磁盘c字符设备文件例如终端p管道文件s套接字文件Linux 中有“一切皆文件”的设计思想磁盘、终端和进程间通信对象都可以通过类似文件的接口进行操作。文件后缀通常只是命名习惯。Linux 判断文件类型时并不完全依赖.txt、.c或.jpg这样的扩展名可以使用下面的命令识别内容类型file文件名八、默认权限为什么不是 777umask创建文件或目录时系统会先给出理论上的最大权限再使用umask屏蔽一部分权限。通常普通文件的起始权限按666计算目录的起始权限按777计算。查看当前 umaskumask假设结果是0022则常见结果为文件666 屏蔽 022 → 644 目录777 屏蔽 022 → 755这里更准确的理解是按权限位进行屏蔽而不是普通十进制减法。临时修改 umaskumask0027修改只对当前 Shell 及其子进程生效如果需要永久生效应修改对应的 Shell 配置文件并谨慎评估安全影响。九、共享目录与粘滞位假设一个公共目录允许多人写入chmod777shared这时所有用户都可以在其中创建文件但他们也可能删除其他用户创建的文件。为解决这个问题可以给目录设置粘滞位sticky bitchmodt shared或者使用数字形式chmod1777shared设置后权限末尾通常显示为tdrwxrwxrwt此时即使所有用户都能在目录中创建文件通常也只有文件所有者、目录所有者或 root 能删除对应文件。系统的/tmp目录就是典型例子。十、常见问题1. 为什么进入目录需要 x 权限目录的x表示搜索和穿越权限。没有x即使看到了文件名也无法正常访问目录中的文件。2. 为什么新文件的权限不是目录的权限目录权限决定用户能否在其中创建目录项新文件本身的权限则由程序申请的初始权限和当前umask共同决定。3. 为什么文件不可写仍然可能被删除删除操作修改的是父目录中的目录项。因此只要用户对父目录拥有合适的w和x权限就可能删除其中的文件除非还受到粘滞位等机制限制。总结Linux 权限管理可以归纳为三个问题当前访问者属于所有者、所属组还是其他用户目标是普通文件还是目录对应角色是否拥有本次操作需要的r、w、x权限常用命令如下ls-l# 查看权限chmoduxfile# 使用符号方式修改权限chmod755file# 使用数字方式修改权限sudochownuser:groupfile# 修改所有者和所属组chgrpgroupfile# 修改所属组umask# 查看权限掩码chmodt directory# 为目录设置粘滞位掌握这些概念后遇到Permission denied时就不必盲目使用sudo或chmod 777而是可以从用户身份、文件角色、权限位和父目录权限逐层定位问题。
返回列表