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
(所有者、组、其他人都有读写执行权限)的文件和目录也是有必要的,尤其是在某些不规范的开发环境中,这种权限设置并不少见。

Heeyo
Heeyo

Heeyo:AI儿童启蒙陪伴师,风靡于硅谷的儿童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系统环境。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

761

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

763

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

619

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1285

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

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

精品课程

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

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

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

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