Есть ли способ вести журнал файлов, скопированных с помощью SCP? Я администрирую сервер, который содержит некоторые файлы, которые следует отслеживать (в определенной папке и ее подпапках), поэтому, когда кто-то копирует их через SSH, процесс копирования должен регистрироваться.
Я подумал о том, чтобы заглянуть в историю команд Bash пользователей и найти команды, которые начинаются с scp
, но это вопиющее вторжение в частную жизнь, и пользователям очень легко удалить эту историю (даже без злого умысла).
Кто-нибудь знает способ для этого? Я могу создать веб-интерфейс для сервера с именами пользователей и паролями, и тогда будет легко регистрировать загрузки, но меня интересует «голое железо» решение, если оно есть.
РЕДАКТИРОВАТЬ: Я просмотрел параметры ведения журнала SSHD, такие как FascistLogging или ведение журнала отладки, но они не казались очень подходящими. Действительно ли они решение?
РЕДАКТИРОВАТЬ 2: Я начинаю полагать, что этот вопрос должен быть не о переполнении стека, а скорее о сбое сервера ... Что мне делать?
я хотел бы использовать Incron. Он использует ядро Linux inotify
подсистема, и если какое-либо отслеживаемое дерево каталогов / файл будет изменено, вы можете выполнить все, что захотите. В incrontab
формат файла очень простой, например
/your/directory IN_MODIFY /usr/local/bin/log_file_modifications.sh $@/$#
будет бежать /usr/local/bin/log_file_modifications.sh
каждый раз, когда что-то изменяется в /your/directory
дерево каталогов, вызывая скрипт с полным путем ($@
аргумент) и файл, который был изменен ($#
аргумент).
Ваш сценарий может быть таким же простым, как
#!/bin/bash
logger -t modification_stalker "Yo dawg, these files got modified $1 $2 ..."
Теперь я понимаю, что это только sftp, а не scp, как первоначально запрашивалось, однако я оставляю ответ здесь, чтобы помочь людям.
Я пытался найти ответ на этот вопрос, так что вот оно.
Во-первых, вам нужно включить ведение журнала подпрограммы sftp, которую использует ssh:
В / etc / ssh / sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO
Затем перезапустите sshd, но ваш конкретный дистрибутив делает это:
service sshd restart
Теперь вы должны увидеть сообщения журнала scp, появляющиеся в чем-то вроде / var / log / messages или, возможно, /var/log/auth.log в зависимости от настроек вашего системного журнала.
Я использую syslog-ng и хочу, чтобы мои журналы передач sftp были отделены от остальных журналов ssh.
В /etc/syslog-ng/syslog-ng.conf:
#sftp configuration
destination sftp { file("/var/log/sftp.log"); };
filter f_sftp { program("sftp-server"); };
log { source(s_src); filter(f_sftp); destination(sftp); };
Это означает, что журналы теперь идут в /var/log/sftp.log - вам может потребоваться отредактировать программу ("sftp-server"), чтобы она соответствовала той программе, которую вы используете в SSH, поскольку есть различные варианты
Наконец, чтобы журналы не попадали в журнал ssh, мы их отфильтровываем:
filter f_auth { facility(auth, authpriv) and not filter(f_debug) and not filter(f_sftp); };
Перезапустите syslog-ng (или ваш демон syslog): * Когда я попытался просто перезагрузить, изменения не помогли, мне пришлось перезапустить его.
service syslog-ng restart
Параметр sshd здесь бесполезен. scp просто запустите что-то вроде 'scp -t - dest_file' на удаленном хосте.
Самый простой способ - создать оболочку вокруг реальной программы scp для регистрации аргументов командной строки.
OpenSSH
поддерживает регистрацию scp
. Итак, если вы включите его VERBOSE
вы даже увидите каталоги, которые прошли ваши клиенты.
Посмотреть журнал проверки
/var/log/auth.log
Вы можете настроить уровень подробного ведения журнала для sshd и использовать некоторые программы аудита, например auditd для создания отчетов на основе сообщений журнала.