帮我解决这个问题。 到目前为止,我已经find了“find / -perm-4000 -o -perm -2000 | xargs ls -l> suild.list”参数,我想写成一个bash脚本。
我想写这个作为一个bash脚本,并能够每天运行在这个每晚。 但我不熟悉Unix的脚本语言。
对于crontab作业,我需要写为* 24 * * *? 我认为? 但是我很难写作剧本。
在这种情况下没有必要使用xargs
。 只要使用-ls
可以find
。
#!/bin/bash find / -perm -4000 -o -perm -2000 -ls > suild.list
如果您想邮寄并通过附加到文件logging它:
#!/bin/bash find / -perm -4000 -o -perm -2000 -ls | tee -a suild.list
你的命令已经是一个bash脚本。
你需要添加一个头文件:
#!/usr/bin/env bash
你需要在脚本上设置可执行文件(+ x)。
如果你想把结果邮寄给pipe理员,你可以在最后删除redirect到suild.list。
find / -perm -4000 -o -perm -2000 -ls | tee -a suild.list
如果想要创build完整的脚本,如何使用if / else语句。 例如我想说如果这个suild.list文件不存在,那么使用find命令来生成新的suid,否则使用find / -perm -4000 -o -perm -2000 -ls | tee -a suild.list参数,并且如果有任何新的suid被创build,则比较更改。 出于安全原因。
这听起来像你没有想要一个完整的列表每次脚本运行,而是任何新/不知名的文件列表设置suid / GUID。 如果那样的话:
获取当前结果的列表:
# find / -path '/proc' -prune -perm -4000 -o -perm -2000 /usr/bin/write /usr/bin/wall /usr/bin/crontab /usr/bin/locate /usr/bin/ssh-agent
创build一个shell脚本,查找和比较结果与以前的列表。 该列表只是脚本中的一个variables。 你可以把它当成自己的文件。
#!/bin/bash approved=" /usr/bin/write /usr/bin/wall /usr/bin/crontab /usr/bin/locate /usr/bin/ssh-agent " results=$(/usr/bin/find / -path '/proc' -prune -perm -4000 -o -perm -2000) for line in $results; do if ! echo -n $approved | /bin/grep -q $line; then ls -a $line fi done
新文件出现时的结果:
# ./suid_check.sh /sbin/netreport
把它扔在cron中,并configurationcron来发送STDOUT。