Запустить сценарий оболочки по команде
Я хочу запустить сценарий оболочки, когда date -s <string>
команда используется. Например, я хочу записать команду в файл /tmp/user.log, выполнив следующую команду в сценарии оболочки
logger -p user.notice "date -s command executed" -f /tmp/user.log
Как запустить сценарий оболочки, когда date -s <string>
выполняется на оболочке?
Чтобы сделать его более общим, я хочу запустить свой сценарий оболочки, когда кто-то еще выполняет конкретную команду linux в моей системе. Как это сделать?
3 ответа
Спасибо тонна моя serverfault
друзья за ответы.
Я думаю, что я придумал ответ на мой вопрос со всей вашей помощью. Но вы все kinldy выручите меня, если есть какая-либо ошибка, связанная с этим, или какие-либо улучшения должны быть сделаны? Здесь я иду.
Это то, что я сделал.
я). создал скрипт, datewrapper.sh
в / etc со следующим кодом
#! /bin/bash # wrapper script for the date command. # whenever the date -s command is issued, it will be logged. # executing the date command first with parameter list if any date $@ # check whether the date command executed successfully if [ "$?" == "0" ] ; then for param in $@ ; do # if "-s" option is used, log it if [ "$param" == "-s" ] ; then # user.notice logs the message to /tmp/log/user.log # as per the commands in /etc/syslog-ng/syslog-ng.conf logger -p user.notice "New date set" break fi done fi exit 0
II). chmod a+x /etc/datewrapper.sh; псевдоним date='/etc/datewrapper.sh'
III). Дата
Вт дек 21 21:51:01 UTC 2010
IV). date -s "21:53:05"
Вт дек 21 21:53:05 UTC 2010
v). Я проверил /tmp/log/user.log. Показывает сообщение
21 дек 21:53:05 localhost root: новая дата установлена
Таким образом, результат заключается в том, что всякий раз, когда пользователь дает date
команда, мой сценарий будет выполняться, и всякий раз, когда он выполняет команду с -s
вариант, он вошел в /tmp/log/user.log
Перефразируя вопрос, вы хотите знать, когда кто-то пытается установить системное время. Это именно то, что audit
Подсистема предназначена для... она позволяет проверять выполнение конкретных системных вызовов. В этом случае вы хотите знать, когда кто-либо вызывает какие-либо из системных вызовов, которые могут изменить системное время. Используя audit
подсистема, у вас есть решение, которое работает независимо от того, кто-то звонит /bin/date
или их собственная локально построенная версия команды.
Увидеть auditd(8)
а также audit.rules(7)
для полного описания синтаксиса правил и примеров аудита операций с изменением времени, вы можете найти "изменение времени" в примере nispom.rules
файл. Вы можете найти это в вашей локальной системе, или вы можете найти это здесь:
Для получения дополнительной информации о audit
подсистема (и документация немного сложна):
Вы не можете легко запретить пользователю запускать собственную версию программы, но если вы предполагаете, что пользователь не является вредоносным, это легко:
- Создайте скрипт-обертку, которая регистрирует программу и затем запускает ее (используя исходные параметры)
- Убедитесь, что оболочка заменяет исходную программу в пути пользователя.
Вы можете использовать псевдоним, чтобы пользователи использовали оболочку, или вы можете просто переместить / переименовать исходную программу и поместить оболочку в исходное местоположение.
Если вы хотите регистрировать только некоторые из выполнений, используйте регулярное выражение в сценарии оболочки.