Я работаю над веб-приложением LAMP, и где-то есть запланированный процесс, который продолжает создавать папку с именем shop
в корне сайта. Каждый раз, когда это появляется, это вызывает конфликты с правилами перезаписи в приложении, не хорошо.
Пока я не найду скрипт-нарушитель, есть ли способ предотвратить создание какой-либо папки с именем shop
в корне? Я знаю, что могу изменить разрешения для папки, чтобы предотвратить изменение ее содержимого, но я не нашел способа предотвратить создание папки с определенным именем.
Ответы:
Вы не можете, учитывая, что пользователь, создающий каталог, имеет достаточные права для записи в родительский каталог.
Вместо этого вы можете использовать
inotify
семейство системных вызовов, предоставляемых ядром Linux, для наблюдения за созданием (и необязательноmv
-ing) каталогаshop
в данном каталоге, если он создан (или необязательноmv
-ed),rm
каталогом.Программа пользовательского пространства, которая вам нужна в этом случае
inotifywait
(поставляется вместеinotify-tools
, сначала установите ее, если необходимо).Предполагая, что каталог
shop
будет находиться в/foo/bar
каталоге, давайте установим мониторинг для/foo/bar/shop
создания, иrm
сразу же, если он будет создан:inotifywait -qme create /foo/bar
отслеживает/foo/bar
каталог для любого файла / каталога, который может быть создан, т.е. отслеживает любоеcreate
событиеЕсли создан,
awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
проверяет, является ли файл каталогом, а имя -shop
(/,ISDIR shop$/
), если да,rm
то каталог (system("rm -r -- /foo/bar/shop")
)Вам нужно выполнить команду как пользователь, у которого есть разрешение на запись в каталог
/foo/bar
для удаленияshop
из каталога.Если вы
mv
тоже хотите отслеживать операции -ing, добавьте watch formoved_to
event:Просто обратите внимание, что если вы ищете файл, а не каталог с именем
shop
:источник
inotifywait
это, возможно, что триггер также сможет перехватить процесс с помощьюps -ef
Чтобы ответить буквально на основе вопроса о предотвращении создания папки с определенным именем.
touch shop
Вы не можете создать каталог, если существует файл с идентичным именем
mkdir: cannot create directory ‘shop’: File exists
источник
chattr +i shop
чтобы сделать его неизменным. Пока неизменный флаг не будет удален, его даже нельзя переименовать / удалить.rename(2)
что все еще будет работать, поскольку name не является частью inode, но это не так. Быстрый поиск в интернете не показывает, почему. Есть намеки?rename
работы требуется нетривиальная дополнительная работа на уровне реализации .Как насчет угона
mkdir
системного вызова сLD_PRELOAD
...?Обратите внимание, что внутри этого обработчика вы можете регистрировать PID процесса, который вместо этого хочет создать этот каталог:
Вам нужно поместить это в
~/.bashrc
root (или кто-либо, кто запускает ваше приложение), чтобы гарантировать, что это будет использоваться:источник
LD_PRELOAD
подобные хаки, в основном, всегда неправильны, и если вы не знаете, что делаете, они могут сильно сломать программу, в которую вы их загружаете, нарушив свойства, такие как async-signal-safety заменяемой функции.fopen
должен иметь"a"
вместо"w"
, чтобы он мог сохранить предыдущие журналы(Я бы прокомментировал ответ Miati, но не могу вспомнить мой старый аккаунт и у меня недостаточно репутации на этом новом ...)
Вы можете заблокировать создание, создав файл и изменив его атрибуты.
Тогда любая попытка что-либо сделать с этим файлом будет заблокирована, даже если пользователь станет пользователем root.
источник
Создайте символическую ссылку, указывающую на несуществующее местоположение в несуществующем каталоге. Это имеет некоторые забавные последствия:
EEXIST
(файл существует).ENOENT
(Нет такого файла или каталога)ENOENT
. Istat, конечно, вернет информацию о символической ссылке.Это имеет два преимущества по сравнению с некоторыми другими решениями, предлагаемыми здесь: (а) вам не нужна запущенная служба, которая отслеживает создание каталога, и (б) имя, по-видимому, отсутствует в большинстве команд.
Вам придется сделать это, но я подозреваю, что, какие бы правила переписывания у вас ни были, они не используют команды lstat или другие не разыменовывающиеся команды, что делает их неудачными.
источник