Я хочу удалить файл в файловой системе linux ext4, чтобы диск не содержал название файла в любом месте диска (свободное пространство, метаданные файловой системы или где-либо еще).
Например, мне не нужно никаких следов того, что файл с именем "passwords.txt" когда-либо был на диске.
у меня есть разместил этот вопрос на суперпользователе в другой форме, и на него никто не ответил.
Я бы предпочел использовать /usr/bin/shred
. Он отлично подходит для удаления данных из файла, но имя файла все еще отображается на диске. Вот как я это тестирую:
dd if=/dev/zero of=fs bs=1M count=300
hexdump -C fs # verify it's empty
mkfs.ext4 fs
mkdir m
sudo mount fs m
sudo chown -R $USER m
cd m
echo secretkey > passwords.txt
cd ..
sudo umount m
grep secretkey fs # <== shows up as expected
grep passwords.txt fs
strings fs | grep sec
strings fs | grep pass
sudo mount fs m
cd m
/usr/bin/shred -vuz -n 1 passwords.txt
cd ..
sudo umount m
grep secretkey fs # <== does not show up, this is good
grep passwords.txt fs # <== PROBLEM: filename still shows
strings fs | grep sec
strings fs | grep pass # <== problem: still shows up
hexdump -C fs | grep sec
hexdump -C fs | grep pass
А вот результат mount
команда, которая показывает некоторые режимы файловой системы:
type ext4 (rw,relatime,data=ordered)
Подробности для интересующихся:
Обновление 1:
Переименование файла из passwords.txt во что-то случайное, например, asdfasdf.txt, перед его уничтожением не решает проблему. Когда ты бежишь /usr/bin/shred
в подробном режиме вы увидите, что он проходит через серию переименований файлов, прежде чем обрезать / разъединить файл. Я предположил, что это был способ надежно удалить следы имени файла. Нужны ли файловой системе определенные режимы для поддержки этого? Я скопирую / вставлю что shred
вывод выглядит так при удалении файла:
/usr/bin/shred: passwords.txt: pass 1/2 (random)...
/usr/bin/shred: passwords.txt: pass 2/2 (000000)...
/usr/bin/shred: passwords.txt: removing
/usr/bin/shred: passwords.txt: renamed to 0000000000000
/usr/bin/shred: 0000000000000: renamed to 000000000000
/usr/bin/shred: 000000000000: renamed to 00000000000
/usr/bin/shred: 00000000000: renamed to 0000000000
/usr/bin/shred: 0000000000: renamed to 000000000
/usr/bin/shred: 000000000: renamed to 00000000
/usr/bin/shred: 00000000: renamed to 0000000
/usr/bin/shred: 0000000: renamed to 000000
/usr/bin/shred: 000000: renamed to 00000
/usr/bin/shred: 00000: renamed to 0000
/usr/bin/shred: 0000: renamed to 000
/usr/bin/shred: 000: renamed to 00
/usr/bin/shred: 00: renamed to 0
/usr/bin/shred: passwords.txt: removed
Имя файла хранится в структуре данных «каталог», которая имеет значения «(строка) имя файла» и соответствующие значения «(int) inode». Каталог отвечает за отображение имени файла в индексный дескриптор и за отображение индекса в секторы на диске. Имя файла не сохраняется в секторах диска, как содержимое файла.
Имена файлов и структура каталогов имеют следующие значения:
Следовательно, переименование файла во что-то случайное должно фактически привести к тому, что имя исчезнет навсегда, если только у вас нет систем резервного копирования, которые периодически делают резервные копии, и в этом случае вам также придется позаботиться об этом.