247 lines
12 KiB
HTML
247 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
<title>How to rickroll people that try to run "rm -rf" on your system</title>
|
|
<meta name="description" content="WARNING: The method showed here could not prevent the actual execution of "rm -rf" if the "UNIX vandal" is clever enough. Proceed at your own risk, and make ...">
|
|
|
|
<link rel="stylesheet" href="https://maggioni.xyz/css/main.css">
|
|
<link href='https://fonts.googleapis.com/css?family=Hammersmith+One' rel='stylesheet' type='text/css'>
|
|
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet">
|
|
<link rel="canonical" href="https://maggioni.xyz/linux/2016/07/28/how-to-rickroll-people-launching-rm-rf-on-your-system.html">
|
|
<link rel="alternate" type="application/rss+xml" title="maggioni.xyz" href="https://maggioni.xyz/feed.xml">
|
|
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
|
|
<script src="https://rawgit.com/snaptortoise/konami-js/master/konami.js"></script>
|
|
<!-- Favicon -->
|
|
<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
|
|
<link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
|
|
<link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
|
|
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
|
|
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
|
|
<link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
|
|
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
|
|
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
|
|
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
|
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
|
<link rel="manifest" href="/manifest.json">
|
|
<meta name="msapplication-TileColor" content="#ffffff">
|
|
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
|
|
</head>
|
|
|
|
<body>
|
|
<header class="header">
|
|
<section class="head container">
|
|
<h1 class="title">maggioni.xyz</h1>
|
|
<h4>Eat
|
|
<a href="https://en.wikipedia.org/wiki/Polenta">
|
|
polenta</a> and do not counter-aim!</h4>
|
|
</section>
|
|
<nav class="navbar">
|
|
<div class="container">
|
|
<ul class="navbar-list">
|
|
<li class="navbar-item">
|
|
<a href="https://maggioni.xyz/">home</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
<li class="navbar-item">
|
|
<a href="https://maggioni.xyz/blog/">
|
|
Blog</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="navbar-item">
|
|
<a href="https://maggioni.xyz/feed.xml">RSS</a>
|
|
</li>
|
|
|
|
</ul>
|
|
<ul class="navbar-list">
|
|
<li class="navbar-item">
|
|
<a href="https://git.maggioni.xyz">Git</a>
|
|
</li>
|
|
<li class="navbar-item">
|
|
<a href="https://ci.maggioni.xyz">Ci</a>
|
|
</li>
|
|
<li class="navbar-item">
|
|
<a href="https://cloud.maggioni.xyz">Cloud</a>
|
|
</li>
|
|
<li class="navbar-item">
|
|
<a href="https://download.maggioni.xyz">Downloads</a>
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
</header>
|
|
<main class="container">
|
|
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
|
|
|
|
<header class="post-header">
|
|
<h2 class="post-title" itemprop="name headline">How to rickroll people that try to run "rm -rf" on your system</h2>
|
|
<h4 class="post-meta"><time datetime="2016-07-28T16:00:00+02:00" itemprop="datePublished">Jul 28, 2016</time></h4>
|
|
</header>
|
|
|
|
<div class="post-content" itemprop="articleBody">
|
|
<strong>
|
|
WARNING: The method showed here could not prevent the actual execution of "rm -rf" if the "UNIX vandal" is clever enough. Proceed at your own risk, and make backups!
|
|
</strong>
|
|
|
|
<p>
|
|
I like Rick Astley late 80's songs, and you can see them here in my Spotify:
|
|
</p>
|
|
|
|
<p>
|
|
<img
|
|
src="/images/spotify_rickastley.png"
|
|
alt="My Spotify with a bunch of Rick Astley songs">
|
|
</p>
|
|
|
|
<p>
|
|
I like rickrolling people too, especially if they are trying to delete my entire
|
|
<code>/home</code> directory or, even worse, <code>/</code>. Since I learned
|
|
how to use the <code>alias</code> built-in, I wanted a way to prevent that
|
|
random people tinkering with my laptop (that I may forgot to lock) could
|
|
delete potentially important stuff, just for fun or boredom.
|
|
</p>
|
|
|
|
<p>
|
|
The method that I will show will lock any <code>rm</code> command runned in
|
|
both recursive and force mode, so <code>rm -rf</code>, <code>rm -f -r</code>
|
|
and <code>rm -r --force</code> are all blocked, even if they are runned with
|
|
<code>sudo</code>. I am going to alias the rm command in
|
|
<code>/etc/profile</code>, <code>/etc/bash.bashrc</code> and in
|
|
<code>/etc/zsh/zshrc</code> (I am a zsh user) so that the rickroll will be
|
|
possible from all users, even root and the ones with a brand new
|
|
<code>.bashrc</code> or <code>.zshrc</code>. Here is the code I appended to
|
|
those files:
|
|
</p>
|
|
|
|
<p>
|
|
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nb">alias rm</span><span class="o">=</span>/bin/rmAlias
|
|
<span class="nb">alias sudo</span><span class="o">=</span><span class="s1">'sudo '</span> <span class="c"># this enables aliases in sudo, see http://askubuntu.com/questions/22037/aliases-not-available-when-using-sudo</span></code></pre></figure>
|
|
</p>
|
|
|
|
<p>
|
|
Since <code>alias</code> is not able to control the flags of the aliases (see
|
|
<a href="http://apple.stackexchange.com/questions/50963/how-do-i-add-a-flag-to-an-alias">here</a>, we are going to redirect each call of <code>rm</code> to
|
|
<code>/bin/rmAlias</code>, that would run the command if it is safe. I did
|
|
not use a function because it is a bit tricky to make that work with
|
|
<code>sudo</code>. So, let's see the code I put in <code>rmAlias</code>:
|
|
</p>
|
|
|
|
<p>
|
|
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c">#! /bin/bash</span>
|
|
<span class="c"># Rickroll whoever tries to desert this system, even root.</span>
|
|
<span class="c"># To achieve this, set the appropriate aliases even in /etc/profile and similars.</span>
|
|
|
|
<span class="c"># Video played when rickrolling</span>
|
|
<span class="nv">ROLLVIDEO</span><span class="o">=</span>/opt/anti-rm/serious-video.mkv <span class="c"># it's just Never Gonna Give You Up on my system, but be free to customize this!</span>
|
|
|
|
rickroll<span class="o">(){</span>
|
|
<span class="nb">echo</span> <span class="s2">"Never gonna desert this system..."</span>
|
|
xdg-open <span class="nv">$ROLLVIDEO</span> 2>&1 &
|
|
<span class="nb">exit </span>0
|
|
<span class="o">}</span>
|
|
|
|
<span class="k">while </span><span class="nb">getopts</span> <span class="s2">":rf-"</span> opt<span class="p">;</span> <span class="k">do</span>
|
|
<span class="c"># Prevent '--force' to be detected as -r and -f</span>
|
|
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$opt</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"-"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
|
|
</span><span class="nv">OPTIND</span><span class="o">=</span><span class="nv">$OPTIND</span>+1
|
|
<span class="k">continue
|
|
fi
|
|
if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$opt</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"r"</span> <span class="o">]</span> <span class="o">||</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$opt</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"f"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
|
|
if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$tmp</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">""</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
|
|
</span><span class="nv">tmp</span><span class="o">=</span><span class="nv">$opt</span>
|
|
<span class="k">continue
|
|
elif</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$tmp</span><span class="s2">"</span> <span class="o">!=</span> <span class="s2">"</span><span class="nv">$opt</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
|
|
</span>rickroll
|
|
<span class="k">fi
|
|
fi
|
|
done
|
|
|
|
for </span>var <span class="k">in</span> <span class="s2">"</span><span class="nv">$@</span><span class="s2">"</span>
|
|
<span class="k">do
|
|
if</span> <span class="o">[[</span> <span class="s2">"</span><span class="nv">$var</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"--force"</span> <span class="o">&&</span> <span class="s2">"</span><span class="nv">$tmp</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"r"</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then
|
|
</span>rickroll
|
|
<span class="k">fi
|
|
done</span>
|
|
|
|
<span class="c"># If it's safe, just run rm</span>
|
|
/bin/rm <span class="s2">"</span><span class="nv">$@</span><span class="s2">"</span>
|
|
<span class="nb">exit</span> <span class="nv">$?</span></code></pre></figure>
|
|
</p>
|
|
|
|
<p>
|
|
It may look messy to a <em>UNIX</em> guy more experienced than me, but it
|
|
works. The <code>getopts</code> built-in sees if both the <code>-r</code> and
|
|
the <code>-f</code> flags are used and, if so, it starts
|
|
<code>rickroll()</code>, which opens with <code>xdg-open</code> that amazing
|
|
clip from <em>RickAstleyVEVO</em>. From line 30 and below, the script checks
|
|
if the <code>--force</code> flag is used instead of <code>-f</code>.
|
|
</p>
|
|
|
|
<p>
|
|
Let's give execution permissions to the script we have just created:
|
|
</p>
|
|
|
|
<p>
|
|
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># chmod +x /bin/rmAlias</span></code></pre></figure>
|
|
</p>
|
|
|
|
<p>
|
|
Restart your shell, and enjoy. If you want to test safely, I suggest trying
|
|
to run <code>rm -rf</code> with no folders or a nonexistant one, since this
|
|
script stops even these commands.
|
|
</p>
|
|
|
|
<p>
|
|
If you want even more security, you can rename this script to
|
|
<code>/bin/rm</code> and move the original one in some other place, getting rid of all the aliases. I prefer the solution above because it's tidier: you haven't to move anything. In fact, this could be just an AUR package...
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</article>
|
|
|
|
</main>
|
|
<footer class="site-footer">
|
|
<div class="icons">
|
|
<a class="icon" href="https://github.com/praticamentetilde">
|
|
<i class="fa fa-github"></i></a>
|
|
<a class="icon" href="https://www.reddit.com/user/praticamentetilde">
|
|
<i class="fa fa-reddit"></i></a>
|
|
</div>
|
|
<h6 class="author">
|
|
<i class="fa fa-cc" aria-hidden="true"></i>
|
|
Claudio Maggioni
|
|
<script>
|
|
document.write((new Date()).getFullYear());
|
|
</script><br>
|
|
Content under
|
|
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
|
|
CC BY-NC-SA 4.0</a>
|
|
</h6>
|
|
</footer>
|
|
|
|
<script>
|
|
var easter_egg = new Konami();
|
|
easter_egg.load("https://www.youtube.com/watch?v=URTcCh6QVwM");
|
|
</script>
|
|
</body>
|
|
</html>
|