Я бы сделал следующее:
sudo strace -pXXXX -tfo /tmp/strace.log
где XXXX - это идентификатор процесса bash. При быстрой проверке завершения имени файла в одном из моих деревьев каталогов, смонтированных по NFS, он работает без проблем:
-f
Отслеживать дочерние процессы, поскольку они созданы отслеживаемыми в настоящее время процессами в результате fork (2) системный вызов.
-t
Приставьте к каждой строке трассировки время дня.
Некоторые люди могут предпочесть -r
:
-r
Печатать относительную временную метку при входе в каждый системный вызов. Это записывает разницу во времени между началом последовательных системных вызовов.
Имя каталога помещается там, где стоят фигурные скобки, и затем подчиняется оболочке; рассмотрим mkdir '$(reboot)'
, где find
найдет его. Затем вы заканчиваете выполнением sh
:cd $(reboot)
--или любой другой команды, которую вы хотели бы представить. Команда cd
, вероятно, потерпит неудачу, если злоумышленник не будет чрезвычайно хитрым и повторит там имя действительного каталога, но ущерб нанесен, несмотря ни на что. Для менее -радикального тестирования от имени пользователя root попробуйте что-то вроде:
$ mkdir '$(touch.evil_file; echo directory-name)'`
Вы получите этот вывод:
something
sh: line 0: cd:./directory-name: No such file or directory
... и:
$ ls -a
. .. .evil_file $(touch.evil_file; echo directory-name)