说明:
转自 http://ask.apelearn.com/question/5496, 并添加了一些自己的修改:P
#查找系统中被设置了setuid的文件:
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;`
-perm(permission)
-perm mode:精确匹配权限
-perm -mode:完全包含此mode时才可以匹配
-perm /mode:任何一位匹配即可#find /tmp -perm 755 //查找在/tmp目录下权限是755的文件
#find /tmp -perm -222 //表示必须所有类别用户都满足有写权限
#find /tmp -perm +222 //表示只要有一类用户(属主,属组,其他)的匹配写权限就行
-perm mode:文件许可正好符合mode
-perm -mode: 文件许可完全符合mode
-perm +或/ mode:文件许可部分符合mode
对于mode 的理解,网上找了3种理解方式,
关于find命令中-perm中+ - 的含义,举个例子:
比如当前目录下有a b c d4个文件
a文件的权限为6000 也就是a文件仅有suid sgid的特殊权限
b文件的权限为2000 也就是b文件仅有sgid的特殊权限
c文件的权限为4000 也就是c文件仅有suid的特殊权限
d文件的权限为6600 也就是d文件有sgid suid的特殊权限并且该文件拥有者对该文件有读写权限那么现在find . -type f -perm 6000 可以找到a文件,因为a文件权限为6000
那么现在find . -type f -perm -6000 可以找到a d两个文件,这是因为:
我们可以先将a b c d这4个文件的权限转化为2进制那么,
a权限转为2进制后为 110 000 000 000
b权限转为2进制后为 010 000 000 000
c权限转为2进制后为 100 000 000 000
d权限转为2进制后为 110 110 000 000
- 在find . -type f -perm -6000 中的6000权限转为2进制为110 000 000 000,那么6000前的-号代表缺一不可,也就是如果有1的地方必须有1,那么这里找-6000权限的文件,这6000权限里前面有2个位置都是1,所以这里find找-6000权限的文件就是找前面2个位置都是1的文件.而只有a d这两个文件前2个位置都是1,所以find . -type f -perm -6000 只会找到a d两个文件.
- find . -type f -perm +6000会找到a b c d这4个文件,这是因为:+6000 里的这个+号代表有1即可,也就是有1的位置,任何位置只要有1就可以.那么这里找+6000权限的文件,这6000权限前面2个位置都有1,所以这里find 找+6000权限的文件就是找前面2个位置只要有一个位置有1的文件就可以了,这4个文件都符合要求所以最后都能被 find . -type f -perm +6000找到
我们使用man查询find的帮助文档时,发现 -perm 还有一个 /modle 的格式,其实它等同+modle,它建议我们使用 / 而不使用 +, 因为+ 容易产生混淆。所以以后您见到 find -perm /modle 这样的格式时, 就把它看成是+modle 即可。
————————————————
版权声明:本文为CSDN博主「lidonghat」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lidonghat/article/details/66478071