BASH - 查找一组文件中引用的所有世界可写文件
BASH - Find all world writable files referenced in a set of files
问题: 我如何找到 RHEL 5 服务器的 /etc/init.d 目录中的启动脚本中引用的所有全局可写文件?
限制条件:
- BASH 仅解决方案(这是较大脚本的一部分)
- 无法安装额外的tools/packages
这是我目前的情况。
worldWritable=$(find / -type f -perm -002)
startupScripts=$(ls -l /etc/init.d/* | tr '1' ' ' | tr -s ' ' | cut -f 9,9 -d " ")
for file in $worldWritable
do
for line in $startupScripts
do
grep -w "$file" $line | grep -v "^#" >> outFile
done
done
这种方法可行,但需要很长时间,并且其中包含很多不正确的地方(至少不是我要找的)。我只需要 "outFile" 包含在 /etc/init.d 目录中的任何脚本中引用的世界可写文件列表。
如果有人能提供更好的解决方案,我不介意完全放弃这种方法。我只需要更快、更可靠的东西。谢谢!
主要的缓慢当然来自 find /
,扫描整个文件系统。反过来会更快:
- 从初始化脚本中提取所有绝对路径
- 使用适当的正则表达式,例如排除在同一行中较早出现 # 的匹配项
- 对于每个提取的潜在路径,检查:
- 文件实际存在
- 文件是全局可写的
结果应该明显更快。
问题: 我如何找到 RHEL 5 服务器的 /etc/init.d 目录中的启动脚本中引用的所有全局可写文件?
限制条件:
- BASH 仅解决方案(这是较大脚本的一部分)
- 无法安装额外的tools/packages
这是我目前的情况。
worldWritable=$(find / -type f -perm -002)
startupScripts=$(ls -l /etc/init.d/* | tr '1' ' ' | tr -s ' ' | cut -f 9,9 -d " ")
for file in $worldWritable
do
for line in $startupScripts
do
grep -w "$file" $line | grep -v "^#" >> outFile
done
done
这种方法可行,但需要很长时间,并且其中包含很多不正确的地方(至少不是我要找的)。我只需要 "outFile" 包含在 /etc/init.d 目录中的任何脚本中引用的世界可写文件列表。
如果有人能提供更好的解决方案,我不介意完全放弃这种方法。我只需要更快、更可靠的东西。谢谢!
主要的缓慢当然来自 find /
,扫描整个文件系统。反过来会更快:
- 从初始化脚本中提取所有绝对路径
- 使用适当的正则表达式,例如排除在同一行中较早出现 # 的匹配项
- 对于每个提取的潜在路径,检查:
- 文件实际存在
- 文件是全局可写的
结果应该明显更快。