Linux 权限管理完全指南:从 chmod到 SUID 和 ACL
继文件操作、Vim 编辑器和用户管理之后我们深入学习 Linux 的权限体系。本文将详细讲解如何查看文件/目录的权限和归属使用chown和chmod修改它们理解umask对默认权限的影响以及掌握 SUID、SGID、Sticky 三种特殊权限。这些是 Linux 系统安全和权限控制的基石。前言在 Linux 系统中一切皆文件而文件的权限管理是系统安全的核心。无论是日常的文件操作、多用户环境的权限隔离还是渗透测试中的权限维持与提权分析理解 Linux 的权限模型都是必修课。本文将从最基础的ls -l输出解析开始逐步讲解chown、chmod符号模式和数字模式、umask等基本命令然后深入介绍 SUID、SGID、Sticky 三种特殊权限的用途与风险最后带你掌握 ACLgetfacl/setfacl实现更精细的访问控制。文章配有大量实验命令和截图位置提示。一、查看权限与归属ls -l和ls -ld命令格式ls -l [文件/目录]或ls -ld [目录]ls -l以长格式显示文件或目录的详细信息若参数是目录默认显示目录内的内容。ls -ld显示目录本身的信息而不是目录内的内容。使用ls -l查看文件或目录的详细属性ls -ld专门查看目录本身而非目录内的内容。[rootsvr223 ~]# ls -ld /homedrwxr-xr-x. 4 root root 4096 Mar 20 10:00 /home1. 输出格式解析以drwxr-xr-x为例共 10 个字符位置含义第 1 个字符文件类型d目录-普通文件l符号链接第 2-4 个字符属主user权限r读w写x执行。无权限为-第 5-7 个字符属组group权限同上第 8-10 个字符其他用户other权限同上使用ls命令加上-ld参数就可以显示出目录的详细信息前面的十个字符就代表权限第二个到第十个字符三个一组分别对应属主、数组、其他用户的权限。2. 目录权限的特殊说明读权限r允许列出目录内容如ls。写权限w允许在目录内创建、删除、重命名文件需要同时有x权限。执行权限x允许进入目录cd以及访问目录内的文件。权限对文件的作用对目录的作用读r可以查看文件内容如cat、less、vim只读打开可以列出目录内容如ls但无法进入目录写w可以修改文件内容、追加数据、截断文件可以在目录内创建、删除、重命名文件需要同时有执行权限 x执行x可以执行该文件如果是脚本或二进制程序可以进入目录cd以及访问目录内的文件路径解析需要示例对目录只有r没有x则只能看到文件名列表但无法进入或访问文件内容。二、修改文件归属chown命令格式chown [选项] 用户名[:组名] 文件...用户名指定新的属主。组名可选前面加冒号表示同时修改属组。常用选项-R递归修改目录及其所有子文件。chown用于修改文件或目录的属主和属组。# 修改属主chown kunkun /home/zhangsan# 只修改属组chown :kunkun /home/kunkun# 同时修改属主和属组使用冒号分隔chown kunkun:kunkun /home/kunkun这里我们来尝试将kunkun的家目录进行属主、属组的更改。从截图中可以看到我们执行完命令后使用ls命令查看发现目录的属主变成了zhangsan现在kunkun就变成了属组我们可以看到属组是三条 - 表示没有任何权限然后我们跳转到kunkun用户发现他根本都进不了他的家目录了他回不了家了使用cd命令和ls命令都显示权限不够。那么是怎么确定修改的是属主还是属组的呢其实很简单要修改属组的话在前面加上就行了。我们首先执行ls命令看看现在是什么样的发现属主是zhangsan属组是kunkun然后我们执行完命令后再次使用ls命令查看发现属组也变成了zhangsan 。其实可以同时更改属主和属组的很简单有冒号的和没有冒号的接着写就行了。下面我们来使用命令将属主和属组重新改回kunkun。我们执行完命令后使用ls命令查看发现属主和属组又变成了kunkun然后我们用su命令切换到kunkun用户现在能cd进去了使用pwd命令也看到确实可以进去了现在kunkun用户对他的家目录又有权限了他可以回家了。三、修改权限chmod命令格式chmod [选项] 模式 文件...模式有两种形式符号模式[ugoa][-][rwx]数字模式三位八进制数如 755chmod用于修改文件或目录的权限支持符号模式和数字模式。1. 符号模式对象符号含义uuser属主ggroup属组oother其他用户aall所有ugo操作符号含义添加权限-移除权限覆盖设置精确权限权限符号读r写w执行x示例# 移除属主的写权限chmod g-w file.txt# 设置其他用户只有读权限chmod or file.txt# 同时设置多个每个用逗号隔开就行了chmod urwx,grx,o-rwx file.txt下面我们来尝试给kunkun家目录进行权限的修改我们给属主减少w权限、给属组增加r和x权限、给其他用户增加r和x权限。执行完命令后可以看到权限一步到位就变成了我们想要的样子了直接用就很方便可以不用看更改之前的权限分布。2. 数字模式八进制更改权限还可以通过数字模式进行更改每个权限位对应一个数字r4w2x1。三位数字分别表示属主、属组、其他。chmod 755 file.txt # 属主 rwx属组 r-x其他 r-xchmod 644 file.txt # 属主 rw-属组 r--其他 r--chmod 600 secret.txt # 属主 rw-属组 ---其他 ---权限数值对照表权限二进制数值r读1004w写0102x执行0011-无权限0000权限组合的计算方法将某个用户类别拥有的权限对应的数值相加得到该类别的一位数字。权限组合计算数值rwx4217rw-4206r-x4015r--4004-wx0213-w-0202--x0011---0000三位数字的含义chmod 755 file中的三位数字分别代表第一位7属主user权限 rwx第二位5属组group权限 r-x第三位5其他用户other权限 r-x因此755等价于-rwxr-xr-x。下面我们试试通过数字模式来进行权限的修改。我们将/home/kunkun的属主权限改为rwx属组改为rw-其他用户改为r-x 。我们通过chmod 765成功更改权限分布像我们想的那样这个方法还是很方便。四、特殊权限SUIDSUIDSet User ID设置格式chmod us 文件名或chmod 4755 文件名作用只对可执行文件有效。普通用户执行该文件时进程获得文件属主的权限。典型例子/usr/bin/passwd属主 root权限rws普通用户可修改自己的密码。查看属主的x位变为s若原无执行权限则为S。安全风险SUID 程序可能被利用提权。我们可以使用cp命令复制/usr/bin/vim 并命令为.vim linux中万物皆文件我们使用的命令也不例外这些命令一般都可以在bin中找到对应的文件我们就可以复制出一个除了名字不一样外其他功能一样的vim。由于点开头的文件是隐藏文件所以查询的时候要加-A参数执行完查询命令后可以看到我们成功复制出了一个.vim文件可以将他当作vim来使用功能是一样的。下面我们来给.vim添加s权限。可以看到我们成功添加了s权限这个权限是占x权限位的。在/etc/hosts文件中存放着DNS信息我们可以来看看这个文件的权限可以看到这个文件属主只有rw权限属组和其他用户都只有r权限也就是说只有属组是有写入权限的kunkun用户现在是其他用户他没有写入权限。我们不妨来验证一下kunkun用户能不能写入。我们在hosts文件中尝试写入192.168.10.223 www.baidu.com 这个意思就是把这个baidu的域名解析成这个ip写入后我们用wq!来强制保存发现强制保存也是失败的说明没有写入权限确实不能成功写入。下面我们来试试使用.vim呢这个文件是有s权限的。使用.vim输入后强制保存并没有报错我们使用cat命令查看发现成功写入了。我们来分析分析这个hosts文件只有属主能够写入的现在我们是用的kunkun用户我们使用了有s权限的.vim命令后成功写入了说明这个s权限可以让普通用户拥有属主的权限如果属主是root的话这个s权限可以让普通用户暂时拥有root权限。刚才我们更改的是DNS解析的文件下面我们来试试访问www.baidu.com呢。我们ping www.baidu.com是能ping通的但是我们来看这个源ip是192.168.10.223这肯定不是baidu的ip吧事实上这是我们在hosts文件中写的ip这个ip是我本机的ip试想一下如果攻击者利用这个权限把这个ip改成钓鱼网站的ip那么用户访问百度就会跳转到攻击者的钓鱼网站这就很危险了。所以这个权限就是一个很经典的后门攻击者只要拿到了一次root然后建立了一个这样的后门以后就算拿不到root了也可以通过这个后门来获得root权限。五、精细权限控制ACLAccess Control List传统的chmod只能为属主、属组、其他三类用户设置权限。ACL 可以为任意指定的单个用户或用户组设置独立权限更灵活。1. 查看 ACLgetfacl命令格式getfacl 文件/目录# 查看文件的 ACLgetfacl /root执行完这个命令可以看到这个和ls查看的差不多只不过是竖着显示的。2. 设置 ACLsetfacl命令格式setfacl [选项] 规则 文件/目录-m修改或添加 ACL 条目-x删除指定 ACL 条目-b清除所有扩展 ACL-R递归设置对目录为指定用户添加权限bash# 为用户 alice 添加读写权限setfacl -m u:kunkun:rw file.txt为指定组添加权限bash# 为组 dev 添加读和执行权限setfacl -m g:dev:r-x /root删除指定用户的 ACLbashsetfacl -x u:kunkun /root递归设置目录的默认 ACL新文件继承清除所有扩展 ACLbashsetfacl -b /root再用getfacl查看详细信息。下面我们来进行一些操作示例。可以看到我们可以成功setfacl加上-m参数给指定用户添加额外权限。还可以使用-x参数对额外权限进行删除。使用-x参数后可以看到kunkun的额外权限没有了同时也可以使用-d参数对所有的额外权限进行清除这里就不一一展示了如果要对组进行额外权限的操作就把u改成g就行了有了这个命令后对于权限的操作就更加灵活了。六、总结命令/概念作用常用格式ls -l查看权限ls -l [文件]ls -ld [目录]chown修改属主/属组chown [用户][:组] 文件chmod修改权限chmod [ugoa][-][rwx] 文件或chmod 755 文件SUID执行时获得属主权限chmod us 文件4755getfacl查看 ACLgetfacl 文件setfacl设置 ACLsetfacl -m u:用户:权限 文件掌握这些权限知识你就能理解 Linux 多用户环境下的安全模型并能进行权限维持和提权分析。原创作者浅了