/etc/securetty e Perl

aprile 28, 2007

Un sabato sera di qualche mese fa, dopo aver finito di leggere “Security Quick-Start HOWTO for Linux” iniziai a modificare diversi file di configurazione e quindi iniziai in qualche modo il processo di Hardening del mio bianconiglio.
Da quel HOWTO ho imparato diverse cose, ma quella in cui parlerò in questo post è il file /etc/securetty.

Forse già dal nome si intuisce lo scopo del file, cioè proibire l’accesso di root a determinate shell. Ad esempio sulla mia Debian GNU/Linux box se premo CTRL+ALT+F1 per andare nella shell “tty1” e digito “root” mi appare:

bianconiglio login: root

Login incorrect

Tutto ciò è normale perché ho editato il file /etc/securetty ed ho proibito l’accesso all’utente root in qualsiasi shell, infatti è buona norma prima loggarsi da utente normale e poi con “su” da root.
Per avere questo effetto è quindi semplicissimo, basta editare (soltanto) 200 righe ed il gioco è fatto! ;-)
Purtroppo il problema sta nelle ben 200 righe, cioè questo processo è molto noioso ed io circa due mesi fa me lo feci a mano armatomi di vi(m).
Tutto ciò mi fece impazzire, infatti dopo averlo fatto mi sono pentito molto perché ho agito da scimmia, ho perso circa 10 minuti della mia vita in una maniera orrenda facendo un lavoro che poteva essere fatto da uno schiavetto o scimmia capace di digitare circa 200 volte un “#” e la freccetta “giù”.
Subito dopo aver fatto questa quindi mi sono sentito uno stupido ma mi sono detto “Leo, è ora di imparare un linguaggio di scripting *serio* e iniziare a giocare con la mente, non con le dita”. Da quel giorno iniziai ad imparare il Perl, ed è stato amore a prima vista! ;-)
Ho iniziato quindi ad imparare il Perl grazie al file /etc/securetty.
Vediamo ora come risolvere quel problema in maniera astuta, giocando cioè con la mente, non con le dita:

#!/usr/bin/perl

# sth, securetty helper commenta tutte le linee del file /etc/securetty
# leot -> leonardo1990[at]gmail[dot]com - 22/04/2007

# Per usare questo script basta aggiungere come parametro all'esecuzione il
# file da modificare e modificherà quel file, ad esempio:
# ./sth.pl /home/topolino/conf/securetty

# apro il file passato dalla riga di comando ed un file temporaneo
open(STTY, "$ARGV[0]") or die "Non riesco ad aprire $ARGV[0]: $!";
open(TMPSTTY, ">$ARGV[0].tmp") or die "Non riesco a scrivere $ARGV[0].tmp: $!";

# commento tutte le righe da commentare e le stampo sul file temporaneo
while (<STTY>)
{
s/^(\w{2,3}.?\d{1,2})$/#$1/i;
print TMPSTTY;
}

# chiudo tutti i file aperti
close STTY;
close TMPSTTY;

# rimuovo il file originale e lo sostituisco con quello temporaneo
unlink $ARGV[0] or warn "Non riesco ad eliminare $ARGV[0]: $!";
rename "$ARGV[0].tmp", $ARGV[0] or warn "Non riesco a rinominare $ARGV[0]: $!";

Con questo script ho risolto il problema! Un po’ di RegExp ed il gioco è fatto! Ho anche capito che Perl è la “Motosega svizzera”.

Links utili:
http://tldp.org/HOWTO/Security-Quickstart-HOWTO/index.html
http://www.perl.it//documenti/corsoperl.html

Annunci

Una Risposta to “/etc/securetty e Perl”

  1. Claudio M. Says:

    In realtà avresti semplicemente potuto usare le regexp del tuo editor vi-like in questo modo:

    :%s/^[^#]/#&/g

    ..commentando tutte le righe non ancora commentate.

    HTH
    Claudio


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: