Protection from the dreaded "rm -fr /"

M. Warner Losh imp at bsdimp.com
Sun Oct 3 10:38:19 PDT 2004


In message: <20041003030946.GV35869 at seekingfire.com>
            Tillman Hodgson <tillman at seekingfire.com> writes:
: On Sat, Oct 02, 2004 at 07:29:51PM -0600, M. Warner Losh wrote:
: > In message: <20041002210554.GS35869 at seekingfire.com>
: >             Tillman Hodgson <tillman at seekingfire.com> writes:
: > : It'll never work, though, that's the thing. At some point it'll rm
: > : something it itself needs and error out. There isn't a way to use `rm
: > : -rf /` that /doesn't/ result in foot-shooting.
: > 
: > No.  You are wrong.  if you rm -rf in a chroot, then it won't result
: > in foot shooting, necessarily, like it would outside a chroot.
: 
: If you're chrooted, where is the rm binary and associated libraries?
: They're in the chroot, in a branch off hte virtual / tree root.

rm doesn't have to live in the chroot.  Consider
	chroot /some/path/to/a/chroot rm -rf /
in this case, everything under the /some/path/to/a/chroot would be
removed.  However, the rm that's running is outside of the chroot.
This is typically how chroot commands are run, often from shell
scripts.

: `rm -rf /`, even in chroot, won't delete everything that the command
: looks like it will.

It can delete just about everything, see above.

: At the very least the final unlink, that of /
: itself, will likely result in undefined behaviour.

Purhaps, but that's not rm's job: to protect you from something that
might be undefined.  unlink(2) is undefined for remote file systems as
well.  Maybe it will work, maybe it won't.

: Where do the dev's
: go if there's no / to root them in? etc etc.

Doesn't matter.  Irrelevant.  The chroot might not have a devfs
mounted in it, or any dev nodes at all.  /dev isn't required for
most operations.

Warner



More information about the freebsd-hackers mailing list