Назад | Перейти на главную страницу

FREEBSD создает новый порт

У меня есть сценарий, который я хочу создать как порт во 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" как часть ежедневного аудита безопасности).

При этом подробности создания порта можно найти в Справочнике Портера, и вы всегда можете накатить локальный порт только для своего сайта.