Как отслеживать имена загруженных файлов на серверах Linux?

Я хочу отслеживать / отслеживать все файлы, загружаемые с помощью веб-сервера (в основном с использованием PHP / Apache и НЕ с использованием FTP-сервера).

I Googled и обнаружил, что единственный возможный способ – написать крючок для move_uploaded_file в PHP.

Если мы можем написать функцию hook для файла move_uploaded_file в PHP, мы можем сохранить путь к файлу назначения в одном месте. Но нет решения, которое я мог бы найти для достижения того же.

может ли кто-нибудь предложить мне способ сделать это?

Изменить: веб-сервер имеет учетную запись 100s хостинга и 1000 веб-сайтов, поэтому контролировать их с помощью веб-приложения невозможно, так как у нас нет контроля над веб-приложением.

4 Solutions collect form web for “Как отслеживать имена загруженных файлов на серверах Linux?”

Вы можете использовать команду inotifywatch (внутри пакета inotify-tools на Debian) с параметром -r (рекурсивный)

например:

 inotifywatch -q -e moved_to,create -r /var/www/ 

Я хочу отслеживать / отслеживать все файлы, загруженные с помощью веб-сервера (в основном с использованием PHP / Apache

Нет простого способа . Вы можете найти все файлы, используя функцию move_uploaded_file , но это будет только перехватывать загрузку файлов POST. Загрузка AJAX, такая как HTML5 / PLupload, не будет распознана.

Вопрос в том, почему вы хотите отслеживать «все загруженные файлы»? Поскольку вы даже не знаете, что эти файлы и где они находятся, кажется, мало смысла знать имена файлов, размеры и владельцы – это все, что вы сможете получить.

Если вы пытаетесь перехватить изменения в системе, например, веб-атаки, то вам будет гораздо лучше обслуживаться tripwire и / или некоторые утилиты сканирования журналов или, возможно, Snort или специализированные пакеты безопасности (например, для WordPress). Или вы можете быть заинтересованы в famd , или решите быть упреждающим и развернуть ( и настроить и поддерживать ) AppArmor.

Если это ваша ответственность, вам нужно будет изменить сценарии загрузки независимо от того, что. И вам нужно будет сделать это по сценарию по сценарию, если вы используете несколько различных фреймворков загрузки.

Если вы хотите отслеживать трафик или квоты, есть намного лучшие способы .

Но в принципе, вам не придется беспокоиться о файлах, загруженных на ваши размещенные веб-сайты, если у вас нет других проблем вверх . Беспокойство о загрузке файлов заставляет меня подозревать, что ваша, как заявлено, является проблемой XY .

Если вы все еще придерживаетесь идеи создания файлов мониторинга (как указано ранее, загрузка слишком ограничительная), возможно, самым простым способом является создание процесса strace , но теперь он зависит от того, как вызывается PHP – это модуль Apache , или CGI, или FPM? Для модуля Apache, предполагая, что двоичный код называется httpd :

 strace -f -p "$( pidof httpd )" -e open 2>&1 | grep -F -v ', O_RDONLY' 

вы получите что-то вроде,

 [pid 28882] open("/var/lib/php5/sess_8v107eun48rj0u42uf9ncplrbobj4cqackscb2thx1138k78uk01", O_RDWR|O_CREAT, 0600) = 12 [pid 29739] open("/var/lib/php5/sess_8v107eun48rj0u42uf9ncplrbobj4cqackscb2thx1138k78uk01", O_RDWR|O_CREAT, 0600) = 12 [pid 28882] open("/srv/www/wiki.matrix.boa/data/boawiki.sqlite", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 13 [pid 29739] open("/srv/www/wiki.matrix.boa/data/boawiki.sqlite", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 13 

Проверка точек

как моментальные снимки, так и rsync -dry-run невероятно быстрые, потому что они делают только make / check inodes без фактических данных. Для снимков требуются корова fs, такие как zfs или btrfs.

 btrfs subvolume snapshot -r / /snapshots/$(date +%Y%m%d) rsync -ad --dry-run /var/www /snapshots/20161103/var/www 

Моментальные события

Трассирование

strace и grep могут использоваться для регистрации изменений каждого файла php;

 strace -e open php_pid 2>&1 | grep open >> log.txt 

Inotify

inotify хорош, но может быть тяжелым, потому что он добавляет часы для каждой папки.

 inotifywatch -v -e modify,moved_to,create -r /var/www/ 

PHP

Комбинация php.ini, runkit , override и auto-preend-файла может использоваться для регистрации событий файла, но это не может помешать людям умышленно избегать журнала. Вы хотите отключить exec, и надеетесь, что никто не найдет переименованную функцию;

php.ini:

 disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source runkit.internal_override = On auto_prepend_file = /var/www/html/prepend.php 

prepend.php

 rename_function('move_uploaded_file', 'real_move_uploaded_file'); override_function('move_uploaded_file', '$filename,$destination', 'log ( $filename, $destination ) ; return real_move_uploaded_file ( $filename, $destination );'); rename_function("__overridden__", 'dummy_move_uploaded_file'); 

С

Поскольку php является FLOSS, вы можете скомпилировать свой собственный PHP, но это нецелесообразно, прежде чем сделать абсолютно уверенным, что все остальные перечисленные параметры непригодны.

logstash / elk / kibabna …

Я уверен, что вы сможете намазать некоторое количество регулярных выражений из файлов журнала …

вы сможете проверить наличие php-загрузок, загрузить webdav, затем объединить эту информацию с картами, раз и так далее …

элегантность в простоте … (не было никакого упоминания о необходимости обработки в реальном времени в размещенном вопросе, поэтому я предполагаю, что вам не нужно запускать какие-либо скрипты каждый раз, когда файл загружается? Вы просто хотите отслеживать и поддерживать Войти?)

если я ошибаюсь, то +1 на inotify

  • Как заставить IP-адрес и имя хоста отображаться только как domain.com на сервере Tomcat?
  • Имеете ли сервер на DigitalOcean только доступным SSH, что произойдет, если мой компьютер сломается?
  • Используйте существующий wampserver из раздела Windows на linux mint
  • Условия OpenBSD httpd.conf
  • Где я должен разместить автономное веб-приложение, которое не требует внешнего веб-сервера?
  • Как добавить другой домен на мой chrooted named server
  • Как включить перенаправление SMTP?
  • логин с пользователем apache
  • Настройка RAID на работающем сервере Ubuntu 14.04
  • Попытка создать туннель для MySQL через SSH
  • Защита моего веб-сервера с помощью NAS
  • Linux и Unix - лучшая ОС в мире.