Debian.pro/

Про Debian


Mountpoint, в который нельзя писать, если он не смонтирован.

Сложнее всего было придумать название к статье %) Спойлер — не получилось.
В общем, думаю, вы сталкивались с ситуацией, когда бэкапы делаются в какой-нибудь /mnt/backup, потом по какой-то причине он не смонтировался/отмонтировался (будь то сетевая ФС или отвалившийся диск), после чего скрипт бэкапа забивает всё место в корне и… ну дальше вы всё и так знаете.
Защититься от такого не просто, а очень просто, но на на практике я редко вижу, чтобы кто-то так делал (а зря).

Достаточно поставить на каталог-маунтпойнт immutable флаг. Если потом вы что-то смонтируете в этот каталог — то immutable флаг остаётся на «нижележащей» файловой системе, писать в смонтированную он не мешает. А как только смонтированная ФС отвалится — система в каталог записать уже ничего не сможет (в том числе и от рута, у нас тут не бсд, где 000 работает).

immutable-флаг ставится так:

root@server:~# chattr +i /mnt/path

Снимается, соответственно, так:

root@server:~# chattr -i /mnt/path

Ну и посмотрим на примере:

root@server:~# mkdir /mnt/backups
root@server:~# chattr +i /mnt/backups
root@server:~# touch /mnt/backups/asfasf
touch: setting times of '/mnt/backups/asfasf': No such file or directory
root@server:~# echo 123123 > /mnt/backups/asfas
-bash: /mnt/backups/asfas: Operation not permitted
root@server:~# mkdir /mnt/backups/asfasf
mkdir: cannot create directory '/mnt/backups/asfasf': Operation not permitted
root@server:~# mount /dev/loop3 /mnt/backups/ #типа диск с бэкапами или сетевая ФС
root@server:~# touch /mnt/backups/new; touch /mnt/backups/{1..3}
root@server:~# ls /mnt/backups/
1 2 3 lost+found new

Само собой, это не единственная задача, в которой пригодится chattr +i (например, я иногда его использую, чтобы ТОЧНО ни одна сцобака не поправила опять resolv.conf), но пример, так сказать, очень жизненный. Ну и да, флаг этот ставится и на файлы, и на каталоги, и на чёрт знает что ещё. Впрочем, на симлинки, вроде бы, не ставится.


Комментариев пока нет.

Написать комментарий