Table of Contents

Amministrazione GNU/Linux

Documentazione e rif. web

Comandi Unix

shell Bash: caratteri speciali, variabili

find

Criteri di selezione:

xargs

Parametri spciali:

grep, cut e awk

Espressioni regolari, vedere man page per grep(1) e regex(7)

sed

echo "tre civette sul como" | sed 's/civette/gufi/'
echo "23 civette sul como" | sed 's/\([0-9]\+\) civette/gufi \1/g'

tar

Copia di una directory su server remoto senza creazione di file intermedio:

tar jcf - directory | ssh niccolo@paros.rigacci.org 'tar jxvf -'

tcpdump e netstat

Ispezionare il traffico con due clausole:

tcpdump -i eth0 -n 'not port 22 and host 74.125.43.100'

Salva il dump in un file:

tcpdump -w tcpdump.log -s0 -i eth0 -n 'port 80 and dst host 74.125.43.104'

Per vedere il contenuto di un dump:

strings tcpdump.log
tcpdump -r tcpdump.log -n

Per vedere tutte le porte aperte:

netstat -n -a

ps, kill

ssh, scp

Per entrare su un host remoto senza digitare la passowrd: si crea una chiave RSA (coppia di chiavi pubblica e privata) con il comando ssh-keygen. La chiave pubblica .ssh/id_rsa.pub deve essere aggiunta al file .ssh/authorized_keys sull'host remoto.

Trasportare il protocollo X (display grafico) tramite un tunnel ssh e uso della variabile $DISPLAY.

Primo caso: applicativo che gira in remoto, display locale. Il traffico X passa nel tunnel ssh attivato dall'opzione -X:

ssh -X username@host.remoto
echo $DISPLAY
xclock

Secondo caso: applicativo che gira in locale (192.168.1.1), display remoto (192.168.1.2). Il traffico X transita in chiaro sulla rete locale.

Sul sistema remoto:

# Abilitare X all'uso del tcp configurando il login manager:
vi /etc/gdm/gdm.conf # DisallowTCP=false
xhost +192.168.1.1

Sul sitema locale:

export DISPLAY=192.168.1.2:0.0
xclock

Terzo caso: prendere possesso del display remoto. Si accede al display X tramite il protocollo VNC grazie al programma x11vnc. Il traffico transita blandamente criptato dal protocollo VNC.

Si entra sulla macchina remota come root e si esegue x11vnc con il parametro -auth.

ssh root@192.168.1.2
ps uax | grep auth
# Individuare il file -auth usato da X
x11vnc -auth /var/lib/gdm/:0.Xauth

In alternativa si chiede all'utente remoto di eseguire x11vnc, senza parametri.

Altra alternativa: si entra sulla macchina remota come utente che ha effettuato il login (che ha il possesso del display) e si esegue:

export DISPLAY=0:0
x11vnc

In tutti i casi il programma x11vnc avvia un server VNC collegato al display X. In locale si esegue:

vncviewer 192.168.1.2

Tunnel di una porta TCP

Tunnel di una porta locale verso un host remoto:

ssh -L 8888:192.168.2.22:80 user@remotehost

Tunnel di una porta remota verso un host locale:

ssh -R 8888:192.168.1.11:80 user@remotehost

vi

dump e restore

Il comando dump(8) fornito dall'omonimo pacchetto, lavora a livello di intero filesystem, è compatibile con fs ext2 ed ext3. È in grado di salvare tutti gli oggetti del filesystem, compresi link, file speciali block e character (/dev/…), mantiene il numero di inode. È possibile fare il restore su un filesystem di dimensione differente.

Dump su file (deve stare su partizione diversa da quella interessata al dump):

dump -0 -b 64 -f /mnt/hda1.dump /dev/hda1

Dump su file su host remoto:

dump -0 -b 64 -f - /dev/hda1 | ssh niccolo@192.168.182.10 'cat > firesmall_hda1.dump'

Dump con restore contestuale remoto:

Sulla macchina che riceve il restore preparo la partizione (deve essere appena formattata):

fdisk /dev/sdd
mkfs.ext3 -I 128 /dev/sdd1
mount /dev/sdd1 /mnt

Sulla macchina che contiene i dati eseguo:

dump -0 -b 64 -f - /dev/hda1 | ssh root@192.168.182.10 'cd /mnt && restore -r -b 64 -f -'

Al termine del restore il file restoresymtable può essere eliminato.

Come visualizzare interattivamente il contenuto di un dump ed effettuare il restore selettivo ad esempio di una directory:

restore -i -f /backup/argo/2007-01-26_md3.dump
restore > cd directory
restore > ls
restore > add pippodir
restore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] y
restore > quit

Gestione pacchetti Debian

Installazione da repository:

apt-get update
apt-get upgrade
apt-get install <pacchetto>

Installazione singolo file .deb:

dpkg -i <file.deb>

Rimozione di un pacchetto:

dpkg --remove <pacchetto>
dpkg --purge <pacchetto>

Creazione di un pacchetto Debian

Scaricare i sorgenti di un pacchetto (scarica i sorgenti, li scompatta e applica le patch Debian):

apt-get source <package>

oppure si scaricano i tre componenti dei sorgenti:

wget http://....package.orig.tar.gz
wget http://....package.diff
wget http://....package.dsc

e si scompattano con:

dpkg-source -x package.dsc

Sicurezza programmazione web

Virtualizzazione

Vedere anche: QEMU.

Creare l'immagine di un disco virtuale, creare l'immagine da un cdrom, avviare qemu facendo boot da cdrom:

qemu-img create -f raw rootfs_img.raw 2048M
dd bs=4096 if=/dev/cdrom of=winxp.img
qemu -hda rootfs_img.raw -cdrom cdrom_xp -boot d

Opzione utile -m megs per assegnare la memoria alla macchina virtuale (128 default).

Collegare una macchina virtuale direttamente alla LAN

Occorre creare uno switch virtuale e collegare ad esso sia la macchina fisica che la macchina virtuale.

Configurare sulla macchina fisica l'interfaccia bridge br0:

Questo il contenuto di /etc/network/interfaces

#interfaccia virtuale da attaccare all'interfaccia fisica, la eth non avrà l'indirizzo
auto br0
iface br0 inet dhcp
        bridge_ports eth0
        #Disable spanning tree protocol
        bridge_stp off
        #max wait for the bridge ports to get to the forwarding status
        bridge_maxwait 10

Facciamo partire qemu con:

sudo qemu -hda rootfs_img.raw -m 512 -net nic -net tap

Colleghiamo il cavetto virtuale allo switch virtuale con:

sudo brctl addif br0 tap0

Usare KVM invece di QEMU

Verificare che la CPU abbia il supporto vmx (Intel) oppure svm (AMD) guardando /prco/cpuinfo. Potrebbe essere necessario attivarla anche da BIOS (VT technology).

Caricare il modulo kernel kvm_intel oppure kvm_amd.

Installare il pacchetto kvm.

Si usa il programma kvm al posto di qemu, con la stessa sintassi.

lbvirt

Si tratta di una collezione di utility e script per la gestione di macchine virtuali Qemu, KVM e Xen. Consente la creazione, avvio, stop, ecc. di macchine virtuali con comandi e sintassi uniforme nonostante possa usare tecnologie di virtualizzazioni diverse. La configurazione è in /etc/libvirt/.

La shell di controllo (in modalità testo) è il programma virsh. Per una console grafica su può installare virt-manager.

PGP e GPG: crittografia e firma

Vedere anche: Utilizzare GnuPG.

Creazione della nostra coppia di chiavi, elenco delle chiavi pubbliche e private nel nostro portachiavi:

gpg --gen-key
gpg --list-keys
gpg --list-secret-keys

Esportare una chiave in formato ASCII

gpg --armor --export 186F2F56 > keyfile.txt

Per importare una chiave dal formato ASCII

gpg -i --import keyfile.txt

Per importare una chiave da un keyserver:

gpg --recv-keys 111FA57C

Cifrare/decifrare un file da riga di comando

gpg --encrypt <filename>
gpg --decrypt <filename>.gpg

Per produrre un file criptato, ma in formato ASCII:

gpg --armor --encrypt <filename>
gpg --decrypt <filename>.asc

Firmare una chiave

Come firmare la chiave di qualcuno: GnuPG Keysigning Party HOWTO

gpg --sign-key <Key_ID>
gpg --keyserver <keyserver> --send-key <Key_ID>