一篇文章带你了解Linux的文件权限知识点

LINUX的权限概念

Linux 系统通过读(r)、写(w)、执行(x)三种权限控制用户对资源的访问:

  1. 读权限 r

    • 文件:可查看内容

    • 目录:可查看目录内文件列表(用 ls 命令)

  2. 写权限 w

    • 文件:可修改内容

    • 目录:可创建/删除文件或子目录(删除文件需同时拥有目录的写权限)

  3. 执行权限 x

    • 文件:可运行程序/脚本(如启动软件)

    • 目录:可进入目录(用 cd 命令)并访问内部文件

权限设计像三道锁,分别控制"能否看内容"、"能否改内容"、"能否进目录/运行程序",保护系统安全。

用户的身份

在 Linux 权限体系中,用户对文件的访问身份分为三类:

  • u (user):文件的主人,即创建/拥有该文件的用户

  • g (group):文件所属的"家庭",即与文件绑定的特定用户组

  • o (other):文件权限的"局外人",即既不是主人、也不在所属用户组内的其他所有用户

相当于:
主人(自己) → 家庭成员(同组) → 陌生人(其他人)
三者的权限逐层外扩,形成权限保护圈

组成模式

查看权限

ls -l 文件
ls -d 目录

种类

文件

目录

chmod 权限同步操作说明

使用chmod命令

1.同步单目录权限

chmod --reference=/tmp /mnt/gu  

2.递归同步目录及子内容权限

chmod -R --reference=/tmp /mnt/westosdir  

作用:

 -R 表示递归操作,像"连锁反应"一样

   先复制 /tmp 的权限到 /mnt/westosdir 目录本身

   再将同样的权限规则逐层传递给该目录下的所有子文件、子目录

通俗理解:

    --reference ➜ "照抄模板"

 -R ➜ "不仅改表面,还要渗透到内部每一层"

文件归属权管理命令速记

  1.更改文件主人

chown 新主人账号 文件名  

  2.更改文件归属团队

chown 新主人:新团队 文件名  

3.批量归属权继承(适用于目录)

chown -R 用户或组 目录名  
chgrp -R 用户或组 目录名  

功能:

   -R 激活递归模式,如同"权限基因复制"

   不仅修改目录自身归属,还会让目录内所有子文件/子目录继承相同的归属设置

比喻

   单层操作 ➜ 只换外套的标签

   递归操作 ➜ 给整个衣柜(含所有衣物)统一更换标签

系统默认权限设定

系统默认权限的核心逻辑

系统如同一个智能管家,在安全与功能间寻求平衡:

  1. 安全性优先

    • 默认"收缩权限":关闭非必要访问权限(如限制写操作)

    • 像守门员一样,只允许基础读/执行等低风险操作

  2. 功能性妥协

    • 对必要功能(如临时文件目录 /tmp)保留基础共享权限

    • 确保常用服务能正常运行,但严格控制权限范围

本质

  最小权限原则 ➜ 用户默认获得完成基础任务的最低权限

 风险隔离设计 ➜ 危险操作(如修改系统文件)需手动授权

 开放与封闭的博弈 ➜ 用 umask 等机制自动过滤敏感权限(如他人写权限)

比喻:系统像一家博物馆——

 游客(普通用户)可观赏展品(读文件)

 但触碰展品(修改文件)或进入后台(系统区域)需特殊许可

Linux 特殊权限

  1. SUID(4)

    • 作用:执行文件时,临时拥有文件主人的权限

    • 例子:passwd 命令修改密码时,普通用户能临时获得 root 权限

    • 符号:-rwsr-xr-x(s 表示 SUID)

  2. SGID(2)

    • 作用:目录下新建的文件,自动继承目录的所属组

    • 场景:团队共享目录,保证文件归属统一

    • 符号:drwxrwsr-x(s 表示 SGID)

  3. Sticky Bit(1)

    • 作用:目录中只能删除自己的文件

    • 例子:公共临时目录 /tmp

    • 符号:drwxrwxrwt(t 表示 Sticky Bit)

数字记忆法

      chmod 4777 → 4(SUID) + 常规权限

      chmod 2777 → 2(SGID) + 常规权限

  chmod 1777 → 1(Sticky) + 常规权限

SUID

本质:给程序开一个"特权体验卡"

触发时机:当用户运行带有 SUID 标记的程序时

效果

          程序运行时,自动切换成文件主人的身份(如 root)

          结束后立刻恢复用户原本身份

chmod u+s file
su - gu
ps ax -o user,group,comm | grep cat gu gu cat
用root身份
chmod u+s /bin/watch
su - gu
/bin/cat
ps ax -o user,group,comm | grep cat root gu cat

 SGID

    核心作用:给程序或目录颁发"团队通行证"
    对程序 → 运行时切换为文件所属组身份
    对目录 → 新建内容自动归入目录所属团队

  

chmod 2源文件权限 project
 
chmod g+s project

Sticky Bit

核心作用

给目录加一个"防误删护盾",确保:

 自己文件自己管 → 用户只能删除/重命名自己创建的文件

 他人文件禁触碰 → 即使目录有写权限,也不能动别人的文件

chmod 1原始权限 dir
 
chmod o+t dir

关键规则

  仅对目录有效(文件设置无意义)

  需配合目录的写权限使用

ACL权限

  作用:可以针对单个用户或组设置独立的读、写、执行权限

 比喻

   传统权限 → 三把固定钥匙(主人/家庭/陌生人)

   ACL → 可自由配发任意数量的钥匙,精确控制谁能开哪扇门

ACL开启标识

-rw-rw----   未开启
-rw-rw----+  已开启

查看ACL权限

getfacl 文件名

设定ACL

setfacl 参数 文件名

参数

 -m → 添加/修改规则

 -x → 删除单条规则

 -b → 清空所有 ACL

 -d → 设置继承规则

 -k → 清除继承规则

ACL权限优先级

  拥有者 > 特殊指定用户 > 权限多的组 >权限少的组 > 其他 

mask

 本质:Mask 是 ACL 系统的"权限天花板",用于限制除文件主人和 others 之外的所有用户/组的最高权限

 即使给用户/组设置了 rwx,若 Mask 是 r-x,实际生效权限为 r-x

设置用户gu有 rwx,但 mask为r-x  
setfacl -m u:gu:rwx file  
setfacl -m m::rx file  
实际权限gu只能读和执行  

Mask 的直观比喻

  传统权限模型 → 房间内有三盏灯(主人/家庭/陌生人),开关独立控

  ACL + Mask → 新增一个总闸(mask),限制家庭和额外添加用户的灯光亮度上限

      总闸亮度调低时,所有依赖它的灯都会变暗

      但主人的灯(所有者权限)不受总闸影响

ACL列表的默认权限

范围:仅对目录有效

核心功能

 自动继承 → 在该目录下新建的文件/子目录,自动复制父目录的默认 ACL 规则

 权限预配置 → 省去手动为每个新文件单独设置 ACL 的繁琐操

setfacl -m d:u:alice:rwx/mnt/gu  只对于/mnt/gu目录本身生效

attr权限

核心概念

给文件/目录穿"防弹衣",在传统权限之外添加隐藏保护层,实现:

   防删除防篡改

   强制追加模式

   安全锁死文件

i  不能做任何更改
a  能添加不能删除
lsattr dir|file   查看attr权限
chattr +i|+a|-i|-a dir|file   设定attr权限

attr权限限制所有用户

### 使用 Visual Studio Code 在 Kali Linux 上实现恶意软件免杀技巧 #### 重要声明 开发和部署任何类型的恶意软件都是非法且道德不可接受的行为。本回答仅提供技术信息用于教育目的,旨在帮助安全研究人员了解防御机制。 #### 技术背景 Visual Studio Code (VS Code) 是一款强大的多平台代码编辑器,在 Kali Linux 中可以通过多种方式安装并配置环境来编写不同编程语言的应用程序[^1]。对于研究性质的工作而言,理解如何使某些二进制文件绕过基本检测机制具有一定的学习价值。 #### 编写混淆脚本 为了防止被简单特征码扫描工具识别出来,可以采用字符串加密、函数重命名等方式对源代码进行变形处理: ```python import base64 def obfuscate_string(input_str): encoded_bytes = input_str.encode('utf-8') encrypted_data = base64.b64encode(encoded_bytes).decode() return f"exec(__import__('base64').b64decode('{encrypted_data}'))" obfuscated_code = obfuscate_string(""" print("This is an example of string obfuscation.") """) print(obfuscated_code) ``` 此段Python代码展示了基础的Base64编码作为简单的演示[^3]。 #### 修改PE头或其他元数据 针对Windows可移植执行体(Portable Executable, PE),改变其头部结构或者嵌入额外资源能够有效干扰静态分析过程。然而请注意,这类操作通常涉及汇编层面的知识以及特定库的支持,如`pefile` Python模块。 #### 动态加载与反射注入 通过动态链接库(DLL)或内存映射技术载入必要的功能组件而非直接包含于主程序体内;这种方法增加了逆向工程难度的同时也使得传统的基于签名的安全产品难以捕捉到完整的攻击模式[^5]。 #### 创建自定义打包方案 利用PyInstaller等工具将解释型语言转换成独立运行的原生应用,并加入加壳保护措施进一步增强隐蔽效果。不过需要注意的是,过度复杂的封装可能会引起高级防护系统的怀疑。 #### 配置 VS Code 支持上述工作流程 确保已按照官方指南完成VS Code及其扩展插件的设置,以便支持目标编程语言特性及调试需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值