![/bin/bash 复制代码](https://linux22.com/image/505109/%2Fbin%2Fbash%20%E5%A4%8D%E5%88%B6%E4%BB%A3%E7%A0%81.png)
帮我解决这个问题。到目前为止,我有“find / -perm -4000 -o -perm -2000 | xargs ls -l > suild.list”参数,我想将其写为 bash 脚本。
我想将其编写为 bash 脚本,并能够每天晚上运行它。但我不熟悉 unix 脚本语言。
对于 crontab 作业,我需要写成 * 24 * * *?我想是吧?但是我写成脚本时遇到了麻烦。
答案1
xargs
在这种情况下没有必要使用。只需-ls
使用find
。
#!/bin/bash
find / -perm -4000 -o -perm -2000 -ls > suild.list
如果您想要通过邮件发送它并通过附加到文件来记录它:
#!/bin/bash
find / -perm -4000 -o -perm -2000 -ls | tee -a suild.list
答案2
您的命令已经是一个 bash 脚本。
您需要添加一个标题:
#!/usr/bin/env bash
并且您需要在脚本上设置可执行 (+x) 位。
如果您想将结果邮寄给管理员,您可以删除最后的到 suild.list 的重定向。
答案3
/bin/bash 复制代码
查找 / -perm -4000 -o -perm -2000 -ls | tee -a suild.list
如果我想创建完整的脚本,我该如何使用 if / else 语句。例如,我想说如果这个 suild.list 文件不存在,则使用 find 命令生成新的 suid,否则使用 find / -perm -4000 -o -perm -2000 -ls | tee -a suild.list 参数并比较更改(如果有任何新的 suid 创建了)。出于安全原因。
答案4
听起来你并不是每次运行脚本时都想要一个完整列表,而是想要一个设置为 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
创建一个 shell 脚本,查找并将结果与上一个列表进行比较。该列表只是脚本中的一个变量。不过,您可以将其作为自己的文件。
#!/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 中并将 cron 配置为通过电子邮件发送 STDOUT。