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

Как определить, что меняет владельца файла в Linux?

Я унаследовал несколько серверов Linux (Ubuntu Precise), и в настоящее время у меня довольно часто возникают проблемы с тем, что права собственности на папку меняются на «root». Мы запускаем puppet, который меняет владельца на пользователя, которым он должен быть, но что-то еще меняет его обратно немного позже.

В настоящее время я регистрирую разрешения для файла каждые 30 секунд, чтобы попытаться сократить время, чтобы увидеть, есть ли что-нибудь в журналах и т. Д. Это большой загруженный сервер, поэтому без дополнительной информации нелегко найти что-либо в журналах.

Есть ли способ в Linux поймать смену владельца файла / папки и определить ответственный процесс?

Я думаю, вы можете использовать аудит для конкретного файла / каталога или написать собственное правило в соответствии с вашими требованиями.

        auditctl -w <path to the file you need to monitor> -p war -k test

        Where -w is for specifying file path
        -p is for permission access (read,write,execute and attribute change)
        -k key name,you can give name you can use to filter audit rule

Затем вы можете искать его, используя

        ausearch -ts today -k test

Например, я использовал это, создал этот файл / tmp / test, а затем записал некоторые случайные данные

       auditctl -w /tmp/test -p warx -k test

а затем выполните эту команду

       ausearch -ts today -k test

      --ts for start date
      -k is for key string

Итак, результат этого

  type=SYSCALL msg=audit(1407949301.821:63216): arch=c000003e syscall=191 success=no
  exit=-61 a0=eacca0 a1=3600005db7 a2=7fff15265180 a3=84 items=1 ppid=2384 pid=16921
  auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=10096
  comm="vim" exe="/usr/bin/vim" key="test"

Итак, если вы проверите последнюю строку вывода, она покажет, что выполняемая команда - vim и с uid = 0, которая является root

Если вы хотите, чтобы эти изменения были постоянными при перезагрузке, внутри /etc/audit/audit.rules добавьте такую ​​запись

  -w /tmp/test -p warx -k test

и убедитесь, что служба auditd запущена и работает

  service auditd status 

Для получения дополнительной информации вы можете обратиться http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html

Быстрый поиск в Google показывает inotify api в ядре Linux.

Inotify (inode notify) - это подсистема ядра Linux, которая расширяет файловые системы, чтобы замечать изменения в файловой системе и сообщать об этих изменениях приложениям.

Я не могу найти никаких приложений, позволяющих смотреть файл напрямую с помощью inotify. Однако есть инструменты inotify пакет, который позволяет получить доступ к api в скриптах.

Он сам по себе не говорит вам, кто что изменил, но вы можете использовать этот api для создания сценария, чтобы сузить его. Например, объединив его с lsof и ps

К сожалению, в стандартной системе Linux нет ничего, что могло бы вести журнал на таком уровне. Однако вам, вероятно, придется написать сценарий, даже если это удачный вариант.

Хмммм .... вы могли бы установить неизменяемый бит в файле, чтобы защитить его и посмотреть, кто жалуется, что его нельзя изменить:

 chattr +i filename1 ... filenamen