0

0

如何在Linux中检查权限漏洞 Linux find危险权限查找

P粉602998670

P粉602998670

发布时间:2025-08-30 12:39:01

|

812人浏览过

|

来源于php中文网

原创

最容易被攻击者利用的权限配置是SUID/SGID滥用和世界可写文件目录。SUID/SGID程序若配置不当,可被用来提权至root;世界可写文件或目录允许任意用户修改内容,可能被植入后门或篡改关键配置;此外,无主文件、777权限文件及ACL配置错误也常成为突破口。使用find命令可检测这些风险,结合ls、stat、getfacl及Lynis等工具进行深度审计,并通过最小权限原则修复,定期自动化检查以持续加固系统安全。

如何在linux中检查权限漏洞 linux find危险权限查找

在Linux系统中检查权限漏洞,核心思路是主动发现那些权限配置过于宽松、可能被滥用的文件和目录。这通常涉及到利用

find
命令,辅以对文件所有者、组以及特殊权限(如SUID/SGID)的深入理解。在我看来,这不仅仅是跑几个命令,更是一种安全意识的体现,需要我们像攻击者一样思考,哪些地方最容易被突破。

要解决Linux权限漏洞问题,我们首先需要一套行之有效的检测方法。我个人觉得,从宏观到微观,逐步深入是比较靠谱的路径。

查找世界可写的文件和目录

这绝对是权限漏洞的重灾区。一个所有人都可以写入的文件或目录,就好比你家大门敞开,谁都能进来放东西、改东西。攻击者可以利用这些地方植入恶意脚本、篡改配置,甚至上传后门。

  • 查找世界可写的文件:

    find / -perm -0002 -type f 2>/dev/null

    这个命令会在整个文件系统(

    /
    )中查找(
    -find
    )权限位(
    -perm
    )包含
    o+w
    (即其他人可写,用八进制表示是
    0002
    )的文件(
    -type f
    )。
    2>/dev/null
    是为了忽略那些我们没有权限访问的目录报错,让输出更干净。

  • 查找世界可写的目录:

    find / -perm -0002 -type d 2>/dev/null

    原理和上面一样,只是把查找类型改成了目录(

    -type d
    )。找到这些目录后,你还需要进一步检查其内容,看看是不是有非预期的文件。

查找SUID/SGID文件

SUID(Set User ID)和SGID(Set Group ID)是Linux中非常强大的特殊权限,它们允许普通用户以文件所有者或文件所属组的权限来执行某个程序。比如,

passwd
命令就是SUID,它让普通用户也能修改自己的密码,因为它需要写入只有root才能修改的
/etc/shadow
文件。然而,如果一个不安全的程序被赋予了SUID/SGID权限,那就可能成为巨大的安全隐患。

  • 查找SUID文件:

    find / -perm -4000 -type f 2>/dev/null

    4000
    代表SUID位。

  • 查找SGID文件:

    find / -perm -2000 -type f 2>/dev/null

    2000
    代表SGID位。

找到这些文件后,你需要逐一审查。问自己几个问题:这个程序为什么需要SUID/SGID?它是不是系统必需的?有没有更安全的替代方案?通常,非系统自带的、来自第三方应用或自定义脚本的SUID/SGID程序,都应该引起高度警惕。

查找无主文件或目录

有时候,文件或目录可能因为用户被删除,或者从其他系统迁移过来而失去其所有者或所属组,它们就会显示为数字ID而非用户名或组名。这些“无主”的文件,虽然不直接构成权限漏洞,但它们的存在可能意味着系统管理混乱,也可能被攻击者利用来隐藏文件或作为权限提升的跳板。

  • 查找无所有者的文件或目录:

    find / -nouser 2>/dev/null
  • 查找无所属组的文件或目录:

    find / -nogroup 2>/dev/null

检查这些文件,确认它们是否应该存在,并重新分配正确的所有者和组。

查找权限过于宽松的文件(例如777)

虽然

find / -perm -0002
已经能找到世界可写的文件,但直接查找
777
(所有者、组、其他人都有读写执行权限)的文件和目录也是有必要的,尤其是在某些不规范的开发环境中,这种权限设置并不少见。

YOO必优科技-AI写作
YOO必优科技-AI写作

智能图文创作平台,让内容创作更简单

下载
  • 查找权限为777的文件或目录:
    find / -perm 777 2>/dev/null

    注意这里是

    777
    ,而不是
    -777
    -777
    表示权限至少包含
    777
    ,而
    777
    则表示权限恰好是
    777
    。在实际审计中,我们更关心的是那些正好被设置为
    777
    的文件,因为这往往是粗心大意的结果。

Linux系统中,哪些权限配置最容易被攻击者利用?

在我多年的经验里,最容易被攻击者盯上的权限配置,往往不是那些一眼就能看出的显眼包,而是那些看似平常却蕴含巨大风险的“隐形炸弹”。

首先,SUID/SGID权限滥用绝对是榜首。一个配置不当的SUID程序,就相当于给普通用户提供了一把“root权限的钥匙”。如果这个程序本身存在缓冲区溢出、格式化字符串漏洞,或者只是一个简单的脚本,攻击者就可以通过执行它来获取root权限。比如,一个自定义的、没有经过严格安全审计的备份脚本,如果被赋予了SUID权限,攻击者可能就能通过注入命令来执行任意操作。

其次,世界可写(World-Writable)的文件和目录是另一个重灾区。想想看,如果

/etc/passwd
或者
/etc/shadow
是世界可写的,那任何人都可以修改用户密码,甚至添加新的root用户。即使是Web服务器的上传目录,如果配置成世界可写,也可能被上传恶意WebShell,进而控制整个服务器。这种漏洞的危害性在于,它为攻击者提供了直接的写入能力,绕过了许多其他安全防护。

再者,弱所有权或组权限也常常被忽视。比如,某些关键配置文件被设置为

www-data
用户拥有,但
www-data
组的其他成员却拥有写入权限。如果攻击者能够控制
www-data
组下的任何一个其他进程,就可能通过这个权限链条来篡改配置文件,从而影响整个Web服务。这种漏洞的危险性在于,它往往需要攻击者已经获得了一定的立足点,但一旦利用成功,就能进一步扩大战果。

最后,我不得不提一下ACL(Access Control Lists)的复杂性。虽然ACL提供了比传统ugo/rwx更细粒度的权限控制,但其复杂性也导致了配置错误的可能性大大增加。一个配置不当的ACL规则,可能在无意中赋予了某个用户或组过多的权限,或者创建了一个“后门”,让攻击者有机会绕过常规权限检查。这种问题往往需要更专业的工具和知识才能发现和解决。

除了find命令,还有哪些工具可以辅助权限审计?

说实话,

find
命令虽然强大,但它只是权限审计的冰山一角。在实际工作中,我发现结合其他工具,能够更全面、更深入地揭示潜在的权限问题。

最基础的,莫过于

ls -l
stat
命令
了。当你通过
find
命令定位到可疑文件后,你需要立即用
ls -l
查看其详细权限、所有者、组、修改时间等信息。
stat
命令则能提供更丰富的元数据,包括文件创建时间、最后访问时间等,这些对于判断文件的异常性非常有帮助。比如,一个很久没有修改过的系统文件,突然在非工作时间被修改,那就非常可疑。

对于那些使用了ACL的文件,

getfacl
setfacl
命令
是不可或缺的。传统的
ls -l
只能显示ugo/rwx权限,但如果文件启用了ACL,你就会在权限字符串后面看到一个
+
号。这时,
getfacl 文件名
就能显示出详细的ACL规则,帮助你理解到底哪些用户或组拥有哪些特殊的权限。这对于排查那些传统权限看起来正常,但实际上存在漏洞的情况特别有效。

此外,一些专业的安全审计工具也能提供很大的帮助。比如,Lynis就是一个非常棒的开源审计工具,它会自动检查数百项系统配置,其中就包括了对文件权限的扫描。它会根据一套预定义的规则,标记出潜在的风险项,并给出修复建议。虽然它可能不会像

find
那样给出所有世界可写的文件列表,但它能从更宏观的角度评估系统的整体安全态势,并指出一些你可能忽略的权限问题。

有时候,我也会自己编写一些简单的Bash或Python脚本。比如,我想找出所有

root
用户拥有但组是
www-data
,且权限为
664
的文件,这种复杂的组合查询,用脚本处理起来会更灵活高效。脚本还能集成到自动化流程中,定期进行权限检查,这在大型环境中尤其有用。

最后,别忘了日志分析。虽然不是直接的权限审计工具,但通过分析

auth.log
syslog
等日志文件,你可以发现异常的登录尝试、权限提升操作,或者对敏感文件的访问记录。这些信息能间接帮助你定位到可能存在权限漏洞的区域,或者确认某个权限漏洞是否已经被利用。

如何修复或加固Linux系统中的权限漏洞?

修复和加固权限漏洞,在我看来,不仅仅是执行几个

chmod
chown
命令那么简单,它更像是一场持续的战役,需要我们秉持“最小权限原则”,并将其融入到日常运维的每一个环节。

首先,针对世界可写的文件和目录,最直接的修复方法就是收紧权限。对于文件,通常我会将其权限修改为

644
(所有者可读写,组和其他人只读);对于目录,通常是
755
(所有者可读写执行,组和其他人只读执行)。

# 修复世界可写文件示例
chmod 644 /path/to/vulnerable_file
# 修复世界可写目录示例
chmod 755 /path/to/vulnerable_directory

当然,这需要根据实际应用的需求来定。如果某个目录确实需要被特定用户组写入,那就应该把权限设置为

775
,并确保只有授权用户在那个组里。

其次,处理SUID/SGID权限滥用。这是个需要特别谨慎的环节。对于那些被错误赋予SUID/SGID权限的非系统关键程序,最安全的做法就是直接移除这些特殊权限:

chmod u-s /path/to/suid_file # 移除SUID
chmod g-s /path/to/sgid_file # 移除SGID

对于那些确实需要SUID/SGID权限的程序(比如

passwd
),我们要做的是确保它们是系统自带的、经过安全审计的版本,并且其所在目录的权限是安全的(通常是
root
拥有,且只有
root
可写)。如果发现自定义程序有SUID/SGID,我会强烈建议重新评估其设计,看看是否有其他更安全的实现方式,例如使用
sudo
规则来代替。

再者,纠正无主文件和目录。对于这些文件,你需要找到它们应该属于哪个用户和组,然后使用

chown
命令进行修复:

chown newuser:newgroup /path/to/orphan_file

如果这些文件是遗留的,且不再需要,最安全的做法是直接删除它们。但删除前务必确认,以免误删重要数据。

在我看来,加固权限的另一个关键点是定期审计和自动化。手动检查权限既耗时又容易出错,尤其是在大型、复杂的系统环境中。我通常会编写一些脚本,结合

find
ls
getfacl
等命令,定期扫描系统中的权限配置,并将异常情况通过邮件或监控系统告警。这能帮助我们及时发现新的权限漏洞,并迅速响应。

最后,也是最重要的,是建立严格的权限管理策略和变更流程。任何对文件或目录权限的修改,都应该经过审批,并有详细的记录。避免开发人员或运维人员在没有充分评估风险的情况下,随意设置宽松的权限。通过强制执行最小权限原则,并对所有权限变更进行审查,我们才能真正构建一个健壮、安全的Linux系统环境。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1132

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1249

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1206

2024.04.29

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

2

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.8万人学习

Git 教程
Git 教程

共21课时 | 4.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号