说明:
转自 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命令中-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 即可。
本文介绍如何使用find命令来查找Linux系统中设置了SetUID或SetGID权限的文件,并详细解释了find命令中-perm参数的使用方法。
1609

被折叠的 条评论
为什么被折叠?



