Случайное удаление файлов root

Данная статья о Случайном  удаление файлов root (а), написанная в шуточной форме:

Вы спокойно блуждаете по директории $HOME, думая о своих делах.

$ whoami
> user
$ pwd
> /home/user 

Но что-то вас беспокоит. Это как маленький камушек (little rock), попавший в ботинок. Вы снимаете обувь, чтобы посмотреть, в чём дело.

$ ls -lah ./left-shoe
———- 1 root root 4 May 30 13:20 little-rock

Странно. Он здесь, но как будто не принадлежит вам. Его оставил root, Рок Теймер, и только он решает его судьбу.

# bash -c «echo ‘You stay here’ > /home/user/left-shoe/little-rock»
# chmod 0000 /home/user/left-shoe/little-rock 

Вы лезете в карман за телефоном, чтобы быстро позвонить ему через sudo. Неожиданно вы чувствуете прилив сил (из-за просмотра «Гладиатора» прошлым вечером) и решаете отложить телефон, чтобы испытать свою мощь.

$ rm -f ./left-shoe/little-rock
$ ls -lah ./left-shoe/little-rock
ls: cannot access little-rock: No such file or directory

Вы опускаете взгляд на дрожащие руки, пытаясь понять: это всё произошло на самом деле? Да. Вы действительно это сделали. Без Рока Теймера. Но как?

Маленький камушек в вашем ботинке понятия не имел, что его ждёт. Как видно из его реинкарнации, ни у кого не было на него никаких разрешений (— — —). Ни чтений, ни записей, никаких действий ни от кого (владелец, группа, другие).

Подвох:

Что здесь произошло, так это Рок Теймер забыл, что вы даже более могучи, чем он сам, когда вы находитесь в $HOME. И вот почему.

Чтобы иметь возможность сделать что-нибудь с файлом, первым делом нужно найти его в директории. Листинг содержимого директории контролируется флагом выполнения. Если у пользователя есть разрешение на выполнение в этой директории, он может посмотреть её содержимое. Также флаг выполнения для директории даёт доступ к дескрипторам inode для файлов в этой папке, что имеет решающее значение в этом контексте, поскольку процесс удаления отсоединяет файл.

Затем, процесс удаления. Переименование или перемещение файла не предусматривает системного вызова write(). На практике нам не нужны никакие разрешения для удаления файла и нам нет дела, кто его владелец. Единственное требование — иметь разпрешения на запись в родительскую директорию (и флаг выполнения для родительской директории).

Директория $HOME естественным образом соответствует обоим этим требованиям с точки зрения пользователя.

Анти-подвох:

Если Рок Теймер действительно не хотел, чтобы посторонние трогали его камушки, то сделал бы следующее:

# chattr +i /home/user/left-shoe/little-rock

Эта операция гарантирует неизменность файла, что, среди прочего, предотвращает его удаление.

Выдержка из мануала:

$ ls -lah ./left-shoe
———- 1 root root 4 May 30 13:20 little-rock или переименовать, на этот файл нельзя создать ссылку и в него нельзя записать никакие данные. Только суперпользователь или процесс, владеющий CAP_LINUX_IMMUTABLE, может установить или убрать атрибут

 

Nazario

Я — Nazario, создатель и автор сайта linuxwin.ru, специализируюсь на информационных технологиях с акцентом на системное администрирование Linux и Windows, веб-разработку и настройку различных систем.

Linux и Windows
Выскажите своё мнение или присоединяйтесь к обсуждению:

Отправляя комментарий, вы даете согласие на обработку ваших данных в соответствии с политикой конфиденциальности и даёте согласие на их использование.