У меня есть сценарий, который я хочу создать как порт во freebsd, а затем сделать его как пакет, чтобы я мог установить его на некоторых машинах. сценарий ниже.
#!/usr/local/bin/bash
if [ ! -f "/suid.old" ]
then
find / -perm -4000 -o -perm -2000 -ls > /suid.old
else
find / -perm -4000 -o -perm -2000 -ls > /suid.new
diff suid.old suid.new > newchanges
fi
exit 0
if [ -s "/newchanges" ]
then
mail -s "changes has occured" someone@gmail.com
else
mail -s "No changes has occured" someone@gmail.com /newchanges
fi
Как я могу этого добиться?
Если вы устанавливаете только этот небольшой скрипт, я бы просто сделал это вручную. Вы могли бы использовать shar
файл, но это кажется излишним.
Я вижу самые большие проблемы: bash
будет находиться в разных местах в разных системах, но в вашем скрипте нет ничего специфичного для Bash, поэтому вы можете изменить свой shebang на:
#!/bin/sh
или
#!/usr/bin/env bash
для портативности.
Во-вторых, вам нужно будет выбрать место для вашего скрипта. Мне кажется, что /usr/local/bin
будет так же хорошо, как и любой другой.
В-третьих, вам нужно будет chown
установить право собственности и chmod
чтобы установить разрешения.
В-четвертых, вам следует выбрать лучшее место для выходных файлов. Если они предназначены только для временного использования, то их следует создавать в /tmp
а не корневой каталог, в котором у вас suid.old
и suid.new
идет или текущий каталог, в котором у вас есть newchanges
собирается. Иначе где-нибудь в var
может быть там, где вы хотите разместить более постоянные данные. Возможно /var/local/suid
.
В-пятых, exit
предотвращает второй if
от когда-либо оцениваемых, поэтому никакая почта никогда не будет отправлена.
В-шестых, вы можете захотеть mv suid.new suid.old
в какой-то момент, поэтому в следующий раз, когда вы сделаете свою проверку, он будет сравнивать самые последние сохраненные данные.
В-седьмых, ваша последняя почтовая команда должна передать файл по конвейеру или перенаправить. Он не будет работать в качестве аргумента. И две почтовые команды следует поменять местами, чтобы вы не отправляли файл, когда он пуст, и отправляли его, когда он не был.
if [ -s "/newchanges" ]
then
mail -s "No changes have occurred" someone@gmail.com < /path/to/newchanges
else
mail -s "changes have occurred" someone@gmail.com
fi
Порт для одного сценария оболочки не является излишним - как сказал Деннис, это то, что я копирую на отдельные машины по мере необходимости (или создаю пакет вручную, но это боль).
Я также не уверен, что у этого есть достаточная общая утилита, чтобы включить его в официальную коллекцию портов (в частности, уже есть проверка "двоичных файлов setuid" как часть ежедневного аудита безопасности).
При этом подробности создания порта можно найти в Справочнике Портера, и вы всегда можете накатить локальный порт только для своего сайта.