Slash is Safe
by John Beck
Most people who have spent any time on any version of Unix know that "rm -rf /"
is about the worst mistake you can make on any given machine.
(For novices, "/"
is the root directory, and -r
means recursive, so rm
keeps deleting files until the entire file system is gone, or at least until something like libc
is gone after which the system becomes, as we often joke, a warm brick.) Well a couple of years ago one Friday afternoon a bunch of us were exchanging horror stories on this subject, when Bryan asked "why don't we fix rm?" So I did.
The code changes were, no surprise, trivial. The hardest part of the
whole thing was that one reviewer wanted /usr/xpg4/bin/rm
to be
changed as well, and that required a visit to our standards guru. He
thought the change made sense, but might technically violate the
spec, which only allowed rm
to treat "." and ".." as special cases
for which it could immediately exit with an error. So I submitted a
defect report to the appropriate standards committee, thinking it
would be a slam dunk.
Well, some of these standards committee members either like making
convoluted arguments or just don't see the world the same way I do,
as more than one person suggested that the spec was just fine and
that "/" was not worthy of special consideration. We tried all sorts
of common sense arguments, to no avail. In the end, we had to beat
them at their own game, by pointing out that if one attempts to
remove "/" recursively, one will ultimately attempt to remove ".."
and ".", and that all we are doing is allowing rm
to pre-determine
this heuristically. Amazingly, they bought that!
Anyway, in the end, we got the spec modified, and Solaris 10 has
(since build 36) a version of /usr/bin/rm
(/bin
is a sym-link to
/usr/bin on Solaris
) and /usr/xpg4/bin/rm
which behaves thus:
/bin/rm -rf /
rm of / is not allowed
Slash is Safe / Hacker's Wisdom | October 1, 2004 | Last Modified: Mon Oct 14 12:49:43 2024