当前位置: 首页 > news >正文

论find -group和-gid的区别

引子

看一百次不如用一次,诚不欺我!!!

现场进行Linux账号文件权限检查,反馈出现误报的情况。

find /etc/passwd /etc/group \( -perm /133 -o -not -user root -o -not -group root \) -ls |awk '{print}END{print "check result="NR}'
33555170 4 -rw-r--r-- 1 root root 4047 Mar 4 2025 /etc/passwd 
33554546 4 -rw-r--r-- 1 root root 1129 Oct 13 11:15 /etc/group 
check result=2 

先说明一下这命令作用及参数含义:

-perm /133 :133是八进制,转换成二进制:001 011 011 ,只要文件的权限同133对应二进制位“与运算”结果是1,那么就算find到了。我们看一下/etc/passwd的权限是-rw-r--r--,转成八进制:644,转成二进制:110 100 100。同001 011 011与运算结果就是个0。不可能匹配到东西。

-o:或运算参数

-not:取反运算参数

-user root:文件的owner是root

-group root:文件的owner组是root组

从回显看,/etc/passwd和/etc/group的ower和group分别就是root。所以,无论如何都不应该find到

问题定位

定位过程就简略说一下,但确确实实花了我不少时间。

1、操作系统的find版本缺陷或者对命令中的-o、-not不支持

2、操作系统shell环境异常,对于\(的转义失效

现场反馈操作系统是BCLinux for Euler 21.10,find版本是(GNU findutils) 4.7.0;我设置找到同版本操作系统环境验证,均没问题。

遇事不明问AI吧。结果,把DeepSeek给干晕了,在思考阶段死循环了(重复循环了21次之多还没改出来):

将问题拆分,自己整理思路,然后结合AI和现场反馈,最后定位到了问题:

1、将-not替换成!

!(感叹号)

  • POSIX 标准:是 POSIX 标准规定的语法

  • 兼容性:在所有 Unix/Linux 系统上都可用

  • 可移植性:最佳,脚本迁移到不同系统时不会出问题

2、将\(替换成'('

两个都差不多,就是让shell不要转义(,或者说不让shell将(当成特殊字符进行解释。

3、拆分find组合条件

如上,皆无效之后,只能将脱条件组合查找拆分了:

find /etc/passwd /etc/group -perm /133 -ls |awk '{print}END{print "check result="NR}'
find /etc/passwd /etc/group ! -user root -ls|awk '{print}END{print "check result="NR}'
find /etc/passwd /etc/group ! -group root -ls|awk '{print}END{print "check result="NR}'

发给现场执行回显:

~]# find /etc/passwd /etc/group -perm /133 -ls |awk '{print}END{print "check result="NR}'
check result=0
~]# find /etc/passwd /etc/group ! -user root -ls|awk '{print}END{print "check result="NR}'
check result=0
~]# find /etc/passwd /etc/group ! -group root -ls|awk '{print}END{print "check result="NR}'
  2093689      4 -rw-r--r--   1 root     root         1536 10月 31 19:21 /etc/passwd
  2093690      4 -rw-r--r--   1 root     root          741 11月 11 17:22 /etc/group
check result=2

原来问题出现在-group root这里。问AI,AI建议用-gid 0试试!!显而易见后者没问题。

那么,-group root和-gid 0有啥区别呢?搞清楚了区别,不就知道原因了吗?

结论

可能的原因:

  1. 系统中不存在名为 "root" 的组,或者 "root" 组被映射到了其他GID。

  2. 在某些特殊环境(如容器)中,组名解析可能有问题,但GID(0)是固定的。

  • -group root 会查找组名为 "root" 的文件,它依赖于系统上的组数据库(/etc/group)来将组名解析为GID。

  • -gid 0 直接使用GID(0)来查找,不依赖于组名解析。

-group root会去/etc/group查找名为root的组,然后查找它的gid,然后跟文件的owner group的id对比。而-gid 0 直接进行gid对比。很明显了:/etc/group中的root组的gid不是0。

 ~]# getent group root
root:x:100:

果不其然!!!又被现场的网管给耍了一圈又一圈。。。

http://www.dtcms.com/a/598449.html

相关文章:

  • Spring Cloud中分布式事务的监控和日志使用小窍门
  • LeetCode(python)——560.和为k的子数组
  • cae毕业设计代做网站淮北论坛招聘最新消息兼职
  • 今天我们学习zabbix网络设备监控的配置
  • NRBO-XGBoost+SHAP分析+新数据预测!机器学习可解释分析不在发愁!提供9种混沌映射方法(tent、chebyshev、singer等)
  • 两学一做教育网站家政服务app软件开发
  • 网站建设必学课程企业文化包括哪些内容
  • Poco: 一个功能丰富、易于使用的跨平台C++开发框架(FTP上传下载、断点续传等)
  • 网站建设学什么专业网络营销的发展前景
  • 做公众号首图网站wordpress禁止访问模版页面
  • 如何更新Dev-C++到最新版本?
  • 传统文化信息|文化管理|基于java的传统文化信息管理系统设计与实现(源码+数据库+文档)
  • 【题解】[GESP样题 七级] 迷宫统计
  • 丰台广州网站建设tomcat 建网站
  • 基于 GEE 利用 WorldPop 数据集批量导出 100 米分辨率人口影像数据与时序分析
  • 《实施意见》推动新场景应用:乡村政务场景如何借AI破局
  • 哪有专做飞织鞋面的网站做网站内容需要自己填的
  • 文山州住房和城乡建设局网站建筑工程网格化
  • 用Canvas画出你的第一个网页小游戏
  • ProfiNet转ModbusTCP工业级数据采集网关保障增压站无人值守
  • 网站最上面标题怎么改成都市四方建设工程监理有限公司网站
  • 重庆本地网站有哪些公司邮箱怎么查询
  • xtuoj 素数
  • 静态路由综合实验【实验报告】
  • 电影网站这么做关键词电子产品展示网站
  • 新加坡网站建设公司涡阳在北京做网站的名人
  • JavaScript面试手写题(持续更新)
  • 网站首页的head标签内wordpress标题太长
  • SpringMVC整理
  • 网站会员发展计划ip安装wordpress