помогите мне с этой проблемой. пока что у меня есть аргумент «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
Если вы хотите отправить его по почте и зарегистрировать, добавив в файл:
#!/bin/bash
find / -perm -4000 -o -perm -2000 -ls | tee -a suild.list
Ваша команда уже является сценарием bash.
Вам нужно будет добавить заголовок:
#!/usr/bin/env bash
И вам нужно будет установить исполняемый бит (+ x) в скрипте.
Если вы хотите отправить результаты по почте администратору, вы можете удалить перенаправление на suild.list в конце.
найти / -сперм -4000 -о -перм -2000 -ls | тройник -a suild.list
Как я могу использовать оператор if / else с этим, если я хочу создать полный скрипт. например я хотел сказать, что если этот файл suild.list не существует, используйте команду find для создания нового suid или используйте команду find / -perm -4000 -o -perm -2000 -ls | tee -a аргумент suild.list и сравните изменения, если был создан новый suid. по соображениям безопасности.
Похоже, вам не столько нужен полный список при каждом запуске скрипта, сколько список любых новых / неизвестных файлов, для которых установлено 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
Создайте сценарий оболочки, который находит и сравнивает результаты с предыдущим списком. Список - это просто переменная в скрипте. Однако вы могли бы получить его собственный файл.
#!/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.