Я хочу запустить сценарий оболочки, когда date -s <string>
используется команда. Например, я хочу записать команду в файл /tmp/user.log, выполнив следующую команду в сценарии оболочки
logger -p user.notice "date -s command executed" -f /tmp/user.log
Как запустить сценарий оболочки, когда date -s <string>
выполняется на оболочке?
Чтобы сделать его более общим, я хочу запускать свой сценарий оболочки, когда кто-то другой запускает конкретную команду linux в моей системе. Как это сделать?
Перефразируя вопрос, вы хотите знать, когда кто-то пытается установить системное время. Это именно то, что audit
Подсистема предназначена для ... она позволяет вам контролировать выполнение определенных системных вызовов. В этом случае вы хотите знать, когда кто-то вызывает любой из различных системных вызовов, которые могут изменить системное время. Используя audit
подсистема, у вас есть решение, которое работает независимо от того, звонит ли кто-нибудь /bin/date
или их собственная локальная версия команды.
Видеть auditd(8)
и audit.rules(7)
для полного описания синтаксиса правил и примеров аудита операций изменения времени вы можете найти в примере "изменение времени" nispom.rules
файл. Вы можете найти это в своей локальной системе или здесь:
Для получения дополнительной информации о audit
подсистема (а документацию найти немного сложно):
Вы не можете легко запретить пользователю запускать его собственную версию программы, но если вы предполагаете, что пользователь не является злоумышленником, это легко:
Вы можете использовать псевдоним, чтобы пользователи использовали оболочку, или вы можете просто переместить / переименовать исходную программу и поместить оболочку в исходное место.
Если вы хотите регистрировать только некоторые из выполнений, используйте регулярное выражение в сценарии оболочки.
Большое спасибо, мой serverfault
друзья за ответы.
Думаю, с вашей помощью я нашел ответ на свой вопрос. Но вы все, кинлды, помогите мне, если с этим связаны какие-либо ошибки или какие-то улучшения, которые нужно сделать? Здесь я иду.
Вот что я сделал.
я). создал сценарий, 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