Archivi autore: Valerio Guaglianone

Disconnettere gli utenti da una Linux Box

 

Un messaggio per avvisare tutti gli utenti collegati di disconnettersi dal sistema:
# wall prego disconnettersi urgentemente dal sistema!!

Se gli utenti non si disconnettono da soli si può fare così:

1. si vedono i pid degli utenti ancora collegati alla macchina con:
# who -a | grep pts

2. quindi si procede con il comando:
# kill <pid utente>

Fuori tutti!

Come rendere più sicuro il PHP

Il PHP è comunemente considerato un linguaggio di scripting sicuro. Questa convinzione deriva dalle innumerevoli funzioni messe a disposizione degli sviluppatori ed attivabili dal file di configurazione globale php.ini o direttamente dal codice con l’apposita funzione ini_set().
A dispetto dalla sua robustezza sotto questo profilo, il PHP rimane però uno dei linguaggi maggiormente sfruttati oggi da hacker, virus e malware writer per attaccare i server che lo supportano.
Quello che segue è un elenco delle funzioni più comuni del linguaggio, seguite da una breve descrizione e dal tipo di parametro che è consigliato specificare (on per attivare la funzionalità ed off per disattivarla):
- register_globals: consente agli utenti di indicare variabili e valori iniettandoli nel contesto del programma con il rischio di alterarne la logica (ad esempio far credere ad un’applicazione di essere un utente autenticato quando invece non lo è). E’ consigliato impostare questa opzione ad OFF.
- magic_quotes: è un processo che automaticamente effettua l’escaping (ovvero la messa in sicurezza) dei dati acquisiti in ingresso dagli script PHP. Pur l’apparente utilità di questa feature è consigliato effettuare un controllo dei dati a runtime impostandola quindi ad OFF.
- allow_url_fopen: questa opzione consente di accedere a file remoti attraverso i protocolli ftp o http. Per ragioni di sicurezza (vulnerabilità di tipo File Inclusion) è consigliato impostare quest’opzione ad OFF.
- safe_mode: abilita la modalità sicura del PHP. E’ consigliato impostare questa opzione ad ON. Essa fornisce accesso ad una serie di sotto opzioni. Con safe_mode_include_dir è ad esempio possibile specificare una o più directory in cui risiedono file di tipo include, mentre con safe_mode_exec_dir è possibile indicare dove sono localizzati gli eventuali file eseguibili richiamati dall’applicazione PHP. Tutti i file all’esterno di queste directory non potranno essere acceduti.
- safe_mode_gid: effettua una comparazione sul group id (GID) prima di accedere ad un file. E’ consigliato attivare questa opzione impostandola ad ON.
- open_basedir: limita i file che possono essere acceduti dagli script PHP ad una o più directory specifiche. E’ consigliato utilizzare questa opzione.
- session.auto_start: specifica se le sessioni sono avviate automaticamente o richiedono una fase di startup. Per motivi di sicurezza e praticità è consigliato disattivare questa opzione impostandola ad OFF.
- session.entropy_file: indica il percorso di una risorsa che può essere utilizzata come ulteriore fonte di entropia per il processo di generazione degli identificativi di sessione. E’ consigliato impostare questa opzione al file speciale “/dev/urandom”.
- session.cookie_secure: specifica se i cookie di sessione devono essere inviati solamente attraverso canali di comunicazione sicuri. E’ consigliato attivare questa opzione impostandola ad ON.
- session.cookie_httponly: preclude l’accesso al cookie di sessione da parte di javascript o altri linguaggi client-side. Per ragione di sicurezza è consigliato impostare questa opzione ad ON.
- display_errors: determina se gli eventuali errori generati dagli script PHP devono essere riportati all’utente nella pagina web richiesta. Per questioni di sicurezza (Information Leak) è consigliato disattivare questa opzione (OFF).
- expose_php: è consigliato disattivare questa opzione impostandola ad OFF. In questo modo si riduce le possibilità che il sistema possa essere individuato come web server vulnerabile da scansioni automatizzate degli header HTTP.

Alcuni consigli per sviluppare applicazioni sicure nel linguaggio PHP

Il PHP è un linguaggio interpretato ampiamente utilizzato per la creazione di script dinamici. Nato da un’idea di Rasmus Lerdorf nel 1994, è divenuto uno standard de facto per lo sviluppo di applicazioni web. Il PHP è considerato un linguaggio comunemente sicuro, ma nonostante questo è allo stesso tempo uno dei più sfruttato da hacker, virus e malware writer per diffondere software malevolo.
Gran parte delle vulnerabilità software è oggigiorno riconducibile allo scarso filtraggio dell’input utente.
Il presupposto comune è che i dati acquisiti in ingresso sono sempre consistenti e frutto di richieste provenienti da utenti autorizzati. Niente di più sbagliato! Nessuna variabile dovrebbe essere considerata costituita da dati la cui regolarità non può essere comprovata. Ciò si riduce a dire che tutto l’input utente deve sempre essere controllato/filtrato per accertare che sia conforme con il tipo, le logiche e le operazioni che su di esso l’applicazione deve svolgere. In particolare devono essere previste i seguenti accorgimenti:
• Tutti i caratteri che possono avere una qualche valenza per l’interprete dei comandi (! $ ^ & * ( ) ~ [ ] \ | { } ‘ ” ; < > ? – `) o l’helper SQL (# ? % ‘ “ — ;) devono essere filtrati. Poiché alcuni di questi caratteri sono anche utilizzati per rappresentare tag HTML validi è importante prescindere dal tipo di dato che si sta acquisendo in input prima di operare un adeguato filtraggio;
• Altri caratteri che potrebbero creare problemi, troncamenti o effetti indesiderati durante l’accesso a file o risorse DB sono il terminatore stringa (\0), il ritorno a carrello (\x10), la nuova riga (\x13) ed ASCII 26 (\x1a). Questi vanno opportunamente gestiti.
- La quantità di input che l’utente può inviare in una form deve essere sempre dimensionato in modo da non eccedere i limiti della direttiva memory_limit impostata nel file di configurazione del PHP (valore di default 8 MB);
- I nomi dei file hanno solitamente una dimensione limitata a 255 byte. Quando si progetta un’applicazione PHP che accede sul disco è sempre bene considerare questo elemento. Eventuali loro troncamenti dovuti ad un poco accorto dimensionamento dell’input utente potrebbe generare effetti disastrosi o inaspettati;
- Ogni script che invia e-mail verso l’esterno può essere potenzialmente abusato così come gli hidden field di una form. Bisogna sempre accertare i permessi assegnati all’utente prima di decidere se eseguire un’operazione;
- Tutte le variabili dichiarate nell’applicazione devono essere inizializzate;
- E’ consigliato offuscare tutte le pagine PHP dell’applicazione;
- I valori utilizzati con la funzione header() devono essere privati dei caratteri speciali “\r” (\x0a) ed “\n” (\x0c);
- I file inclusi nel codice PHP devono avere estensioni riconosciute dal web server come codice interpretabile e non come text/plain visualizzabile.

Nove comodi usi per il comando find

Ci sono 9 comodi usi per il comando find in Linux, che non tutti conoscono e che vengono spiegati in questo tutorial. Come path in ogni esempio verrà utilizzato /root ma e’ possibile utilizzare qualsiasi altro path.

1)Trovare directory vuote:
find /root -depth -type d -empty

2)Trovare file vuoti:
find /root -depth -type f -empty

3)Trovare file con nomi specifici:
find /root -name [name_of_file]

4)Trovare un file con una specifica estensione:
find /root -name “*.[given_extension]”

5)Trovare file con specifici permessi:
find /root -perm [permission bits]

6)Trovare file di determinate dimensioni:
find -size n[cwbkMG]
find /root -name ‘*.txt’ -size 4k -exec ls -l {} ;

7)Trovare un file con un certo nome ed una qualsiasi estensione:
find -name ‘[given_name].*’

8)Trovare un file modificato nelle ultime 24 ore:
find -mtime n
dove 0 sta per 24 ore, 1 per 48, 2 per 72 e cosi’ via.

9)Trovare file a cui si e’ acceduto nelle ultime 24 ore:
find -atime n
dove 0 sta per 24 ore, 1 per 48, 2 per 72 e cosi’ via.

Linux: come eseguire un programma in altre lingue

Avete la necessità di avviare, sotto Linux, un programma in una lingua diversa, senza uscire dall’ambiente desktop in uso? Avete un sito in inglese, e dovete fare degli screenshot ad un software, per preparare un articolo?

Aprite un terminale e digitate:

$ export LANG=lingua
$ programma

per avviare programma nella lingua scelta (en per l’inglese e it per l’italiano).

Mettere il turbo al comando make nei PC con CPU dual/quad-core

Da non molto ho preso un nuovo portatile e, a differenza dal precedente, è un dual core duo. Ho notato che quando andavo a compilare i programmi, utilizzavo solo il 50% della CPU(S), pertanto mi ci voleva un meccanismo per incrementare le prestazioni, ma non sapevo quale.

Ecco come ottimizzare la fase di compilazione di un programma che dispone di un Makefile.

Basta aggiungere solamente una riga al file ~/.bashrc:
alias make=’nice make -j2′

Il -j2 sta ad indicare che si hanno a disposizione 2 processori. Se avete un quadcore, mettete -j4. Successivamente, ricaricate il file di configurazione

con:
$ source ~/.bashrc

Forse avrò scoperto l’acqua calda, ma fino ad oggi onestamente lo ignoravo.

Cambiare il MAC address di una scheda ethernet sotto Linux

Per cambiare il nostro MAC address non bisogna fare altro che eseguire 3 semplici passaggi.

Per prima cosa bisogna ricordarsi che i numeri e le lettere ammessi sono: 1 2 3 4 5 6 7 8 9 0 a b c d e f

Dopodiche ci si costruisce a piacere un MAC address tipo questo 1a:2b:3c:4d:5e:6f

Quindi da root

ifconfig eth0 down
ifconfig eth0 hw ether 1a:2b:3c:4d:5e:6f
ifconfig etho up

Per controllare il nuovo MAC address

ifconfig

Swappiness Tuning, facciamo chiarezza!

Immagino che solo pochi di voi sappiano che cos’è lo swappiness. Rappresenta un cosiddetto “collo di bottiglia” ed è presente in qualunque sistema UNIX-LIKE (MacOSX compreso). Ma che cos’è lo swappiness? E’ un’area di memoria, presa dal disco rigido, che esegue la stessa funzione della ram. E’ facile capire come, la partizione di swap, è indubbiamente più lenta della RAM.

Molti, per velocizzare Linux, consigliano di “ritoccare” questo valore, ma bisogna stare attenti.

Di solito, in giro sul web, si legge:
Nel terminale digitate:
sudo gedit /etc/sysctl.conf
ed aggiungete alla fine del file
vm.swappiness=0
Questo numero può essere compreso tra 0 e 100.

Attenti però

Lo swappiness tuning non è esente da problemi, prima di tutto è consigliato modificare il valore SOLO e soltanto se si ha qualcosa come più di 512 MB di ram, soprattutto se lo si sposta a zero poiché è diverso dal comportamento descritto da molti pseudo-sistemisti. Uno swappiness alto (100) significa che il gestore della memoria sposta molto rapidamente i dati delle applicazioni, dalla ram per intenderci, allo swap; un valore basso (quindi 0) invece fà in modo di mantenere il più a lungo possibile i dati in ram e spostarli solo quando non si ha più ram disponibile. Un valore 0 PUO’ causare malfunzionamenti ai PC, soprattutto quelli con poca ram o processori non troppo recenti/potenti, ed è sconsigliato nei laptop. Un valore di sicurezza per lo swappiness è dai 10 ai 30, a seconda del PC, ma non garantisce nessun aumento velocità in quanto è strettamente dipendente dal kernel installato e dalla configurazione della macchina, alcune volte migliora, altre volte peggiora.

Convertire un file di testo DOS/Windows in UNIX e viceversa

I sistemi DOS/Windows utilizzano due caratteri per definire al fine di
una riga: il Line Feed (LF) ed il Carriage Return (CR), ed infatti il
fine riga si indica con LF/CR. Invece, Unix utilizza solo il LF per
definire il termine della riga. Questa disparita` genera spesso dei
problemi, come la presenza dei famosi “^M” dei file editati da
Windows e poi aperti su un sistema Linux, oppure l’ammassarsi di tutte
le linee su una sola quando un file creato sotto Unix viene aperto da
un editor poco evoluto sotto Windows

Per verificare che un file contenga effettivamente questi caratteri si
puo` utilizzare sia vi che cat:

# cat -vte $file_name

(che stampa a video anche la rappresentazione dei caratteri
non-printable) oppure

# vi -b $file_name

che edita il file in formato binario, che consente di vedere anche i
caratteri normalmente non visibili.

Per eliminare quei “^M” e` possibile usare il comando `tr’ che
elimina o traduce dei caratteri da una stringa o da un file; l’opzione
`-d’ consente di eliminare un carattere, ed il codice del Carriage
Return e` 015: dunque, per eliminare il CR dai file si deve eseguire

# tr -d ‘\015′ < file_dos.txt > file_unix.txt

oppure

# tr -d ‘\r’ < file_dos.txt > file_unix.txt (<<– meno sicuro)

Esistono inoltre i programmi `dos2unix’ e `tofromdos’, che eseguono lo
stesso compito; inoltre anche sed consente di eliminare i “^M”:

# sed ‘s/^M//’ $file_to_convert > $output_file

in realta` sarebbe piu` corretto utilizzare questa forma:

# sed ‘s/^M$//’ $file_to_convert > $output_file

in quanto identifica solo i “^M” a fine riga. Per ottenere il “^M”
a riga di comando si deve usare la sequenza di escape Ctrl+V Ctrl+M.

Anche vi/vim consentono di rimuovere il ritorno a capo di windows:

- editare il file con vi/vim
- in modalita` comando, inserire:
:%s/^M/ /g
dove il carattere ^M si ottiene con Ctrl+V + Ctrl+M

Per fare il passaggio inverso, si puo` aprire il file con `Word’ o con
`wordpad’, editor piu` evoluti di `notepad’, in grado di capire la
diversa codifica e di apportarvi “rimedio”.

Differenza tra dominio e gruppo di lavoro

In un gruppo di lavoro:

* Tutti i computer sono peer. Nessuno di essi ha il controllo su un altro.
* In ogni computer è configurato un insieme di account utente. Per utilizzare un computer in un gruppo di lavoro è necessario disporre di un account su tale computer.
* In genere sono presenti al massimo dieci-venti computer.
* Tutti i computer devono trovarsi nella stessa rete locale o subnet.

In un dominio:

* Uno o più computer sono server. Gli amministratori di rete utilizzano i server per controllare la protezione e le autorizzazioni per tutti i computer del dominio. Questo semplifica l’esecuzione di modifiche in quanto le modifiche vengono eseguite automaticamente in tutti i computer.
* Se si dispone di un account utente sul dominio, è possibile accedere a qualsiasi computer nel dominio senza un account specifico per tale computer.
* Possono essere presenti centinaia o migliaia di computer.
* I computer possono trovarsi in reti locali diverse.

Lo Stat (Unix)

stat() è una chiamata di sistema Unix che restituisce dati utili su un file di inode. La semantica della chiamata stat() varia fra i diversi sistemi operativi. Con il comando Unix ls, si può raccogliere informazioni sugli i node i particolare

* mtime: orario di ultima modifica ls -l
* ctime: orario di ultimo cambiamento di stato ls -lc e
* atime: orario dell’ultimo accesso ls -lu

Notate che ctime non è il momento della creazione del file. Infatti la scrittura di un file cambia mtime ctime e atime. Un cambiamento di permessi dei file o dei file cambia ctime e atime. La lettura di un file cambia atime. Un file system montato con l’opzione noatime non aggiorna atime se vengono effettuate chiamate di lettura. Un file system montato con l’opzione relatime prevede aggiornamenti solo se il il valore precedente di atime è piu vecchio rispetto a quello di mtime o ctime. A differenza di atime e mtime ctime non può essere impostato con la funzione utime() l’unico modo per impostare su un valore arbitrario è quindi cambiare l’orologio di sistema.