/bin/bash 复制代码

/bin/bash 复制代码

帮我解决这个问题。到目前为止,我有“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。

相关内容