" itemprop="description"/>

FaciLinux

Guide Facili per Linux

L'NLA (Network Level Authentication) è un flag aggiuntivo e attivo di default nelle recenti installazioni di Windows per garantire maggiore sicurezza nelle connessioni RDP. Supponiamo di avere dei computer nel proprio dominio (MYDOMAIN.ADDS) con RDP attivo solo con autenticazione NLA , come nello screenshot qui riportato: rdp-NLA In tali casi, cercare di collegarsi via rdp da linux con i parametri standard porterebbe al fallimento della connessione, perché servono alcune configurazioni aggiuntive e preliminari.

Occorre innanzitutto installare il software necessario per lo scambio di ticket kerberos:

Per debian/ubuntu:

user@linbox~$ sudo apt install krb5-user

Per Fedora:

user@linbox~$  sudo dnf install krb5-workstation

Su sistemi debian like parte una configurazione guidata in fase di installazione del pacchetto krb5-user che chiede i dati relativi al dominio windows da configurare (nome del dominio e FQDN dei domain controller, che nell'esempio qui sotto sono dc01 e dc02); in ogni caso alla fine il file /etc/krb5.conf deve contenere le seguenti voci:

[..]
    [libdefaults]
            default_realm = MYDOMAIN.ADDS
    [..]
    [realms]
            ATENEO.UNIVR.IT = {
                    kdc = dc01.mydomain.adds
                    kdc = dc03.mydomain.adds
                    admin_server = dc01.mydomain.adds
    [..]

Da terminale, come utente non privilegiato, dare il seguente comando

    user@linbox~$ kinit mydomainuser
    Password for mydomainuser@MYDOMAIN.ADDS: 
    user@linbox~$

A questo punto usare normalmente il comando rdesktop. Se la macchina remota accetta connessioni sia con NLA sia senza, verrà privilegiata la connessione sicura NLA.

XfreeRDP

Su Fedora e su altri sistemi viene privilegiato il pacchetto xfreerdp al posto di rdesktop; anche questo software può collegarsi a sistemi rdp con NLA attivo, basta utilizzare i seguenti flag:

xfreerdp /v:remotewindows.mydomain.adds /u:mydomainuser /w:1280 /h:1024 +clipboard

Ticket kerberos

La durata del ticket kerberos creato con il comando kinit è limitata e comunque non sopravvive al riavvio; per conoscere i ticket presenti nella propria sessione usare il comando klist:

user@linbox~$ klist 
    Ticket cache: FILE:/tmp/krb5cc_1000
    Default principal: mydomainuser@MYDOMAIN.ADDS

Valid starting       Expires              Service principal
    20/03/2019 10:48:37  20/03/2019 20:48:37  krbtgt/MYDOMAIN.ADDS@MYDOMAIN.ADDS
        renew until 21/03/2019 10:48:32

Automatizzare il tutto

Volendo, è possibile eseguire uno script all'accesso al proprio desktop linux perché venga automaticamente scambiato un ticket kerberos che sarà poi utile per collegarsi via RDP. Prima di tutto è necessario un file di credenziali (da salvare nella propria Home directory, ad esempio con il nome .cred_mydomain), contenente i seguenti campi:

user=mydomainuser
pass=mypassword
dom=MYDOMAIN.ADDS

Ecco quindi lo script da inserire nel proprio avvio automatico:

#!/bin/bash
#Chiedo un ticket kerberos al dominio mydomain.adds per l'utente myuserdomain
    PASS=$(cat ~/.cred_mydomain |grep pass=|sed s/"pass="//)
    echo -n "$PASS"| kinit 01codiceGIA

Il Natting di default di VirtualBox imposta indirizzi della sottorete 10.0.15.XX. Può essere comodo o necessario a volte modificare il natting di default di una macchina già installata, ecco come fare.

Da macchina spenta aprire un terminale e digitare:

VBoxManage setextradata VM_NAME VBoxInternal/Devices/pcnet/0/LUN#0/Config/Network 172.23.24/24

(In questo esempio viene settato l'ip privato 172.23.24).

Lo stesso comando può venire dato anche su sistemi Windows, naturalmente, avendo l'accortezza, dopo aver aperto un propt dei comandi, di portarsi nella directory di installazione di VirtualBox.

Lavorando a riga di comando su una piattaforma Linux, prima o poi, abbiamo bisogno di un aiuto sui comandi della shell. Anche se sono disponibili i comandi di sistema man e whatis, a volte l'aiuto del primo è troppo descrittivo mentre il secondo lo è poco.

Ci sono poi applicazioni di terze parti come cheat, che mostra l'aiuto sul comando della shell anche quando il computer non è connesso a Internet, ma solo su comandi predefiniti.

E' possibile creare un nuovo comando attraverso uno script scritto da Jackson (https://www.mankier.com/explain), che è in grado di spiegare i comandi di shell all'interno della shell bash in modo molto efficace e indovinando quale parte della pagina di aiuto sia la migliore da visualizzare. Il comando si chiama explain.

L'unico requisito è il pacchetto curl. Se non è già installato sul sistema in uso, installarlo con i comandi:

apt-get install curl

Installazione del comando explain in Linux

Bisogna inserire il codice sottostante come nel file ~/.bashrc dell'utente.

# Add this to ~/.bash_profile or ~/.bashrc
explain () {
  if [ "$#" -eq 0 ]; then
    while read  -p "Command: " cmd; do
      curl -Gs "https://www.mankier.com/api/v2/explain/?cols="$(tput cols) --data-urlencode "q=$cmd"
    done
    echo "Bye!"
  elif [ "$#" -eq 1 ]; then
    curl -Gs "https://www.mankier.com/api/v2/explain/?cols="$(tput cols) --data-urlencode "q=$1"
  else
    echo "Usage"
    echo "explain                  interactive mode."
    echo "explain 'cmd -o | ...'   one quoted command to explain it."
  fi
}

# Update 26-03-2015. If using this command gives no output, see if running a simple fetch causes this error:
# $ curl https://www.mankier.com
# curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
# If so, try specifying a cipher in the curl commands: curl --ciphers ecdhe_ecdsa_aes_128_sha

https://www.mankier.com/blog/explaining-shell-commands-in-the-shell.html

Dopo aver inserito il codice e averlo salvato, è necessario disconnettersi dalla sessione corrente e accedere nuovamente per rendere effettive le modifiche.

Utilizzo del comando explain

Proviamo alcuni esempi:

  1. Cosa fa 'du -h': explain 'du -h'

  2. Cosa fa 'tar -zxvf': explain 'tar -zxvf'

  3. Confrontare due comandi
    E' possibile andare in modalità interattiva semplicemente digitando il comando explain e poi digitare i comandi uno dopo l'altro per vedere cosa fanno.
    Per uscire dalla modalità interattiva, è sufficiente fare Ctrl + c.

  4. E' possibile chiedere cosa fanno più comandi in pipeline: explain 'ls -l | grep -i Desktop'

Dokuwiki è un potente wiki opensource che permette di editare, far versioning di documenti e caricare file e immagini, anch'essi sottoposti a controllo di versione.

Il controllo di versione funziona in modo trasparente se si utilizza l'interfaccia web di dokuwiki, ma supponiamo di avere dei file che vengono generati sul server che ospita la vostra istanza dokuwiki, e supponiamo di volerli rendere disponibili come media all'interno di dokuwiki stesso, con il controllo di versione.

Dokuwiki non offre nessuno strumento nativo per questo tipo di esigenza ma, con un po' di reverse engineering di come funziona il sistema di versioning di dokuwiki è possibile realizzare tale istanza, ovvero copiare localmente un file all'interno della struttura media di dokuwiki, mantenendone il versioning (potendo quindi ripristinare versioni precedenti, qualora lo si rendesse necessario).

Prima di entrare nella modalità operativa occorre spiegare un attimo come funziona dokuwiki e il suo sistema di versioning. Dokuwiki è un sistema che funziona senza database, quindi tutta la logica di funzionamento è presente all'interno di directory e files nella struttura dell'istanza di dokuwiki.

Supponiamo di voler mantenere aggiornato, con controllo di versione, il file logs.zip creato da uno script sul server stesso che monta l'istanza di dokuwiki. Supponiamo di mantenere il file logs.zip all'interno del contenitore generale media.

Se si fa l'upload da interfaccia web del file logs.zip, quello che avviene a livello di filesystem è che il file viene salvato nella directory <path_dokuwiki>/data/media . Se il file viene sostituito da una versione più recente, il media manager compie queste azioni:

  1. Calcola la data di ultima modifica in timestamp unix del file logs.zip originale
  2. Sposta il file logs.zip originale nella directory <path_dokuwiki>/data/media_attic e lo rinomina come logs.<unix_timestamp_ultima_modifica>.zip
  3. Aggiunge al file <path_dokuwiki>/data/media_meta/logs.zip.changes una riga, la cui sintassi viene descritta più avanti, che mantiene le informazioni per il versioning
  4. Copia il nuovo file logs.zip in <path_dokuwiki>/data/media

Volendo fare "l'upload" del file logs.zip dall'interno del server stesso occorre quindi simulare le operazioni svolte dal media manager di dokuwiki.

La sintassi dei file con estensione .changes, che sono responsabili del mantenimento di versione, è la seguente; per ogni nuova versione del file caricata viene aggiunta una riga contenente le seguenti informazioni, separate da tabulazione:

  1. tempo di ultima modifica in unix timestamp del nuovo file
  2. ip di origine
  3. Flag di creazione/modifica
  4. path del file in notazione namespace
  5. utente che ha fatto la modifica
  6. riga "creata" se creazione
  7. dimensione del file in byte

Usando uno script bash è possibile eseguire tutte le operazioni e i calcoli necessari, in particolare:

  1. tempo di ultima modifica in unix timestamp del nuovo file stat -c %Y
  2. ip di origine 127.0.0.1
  3. Flag di creazione/modifica C oppure E
  4. path del file in notazione namespace logs.zip
  5. utente che ha fatto la modifica (il proprio utente dokuwiki va bene)
  6. riga "creata" se creazione
  7. dimensione del file in byte ls -l file| awk '{print $5}'

Un ipotetico script in bash, quindi, conterrebbe le seguenti righe:

fileupd="<path>/logs.zip"
lastmod=$(stat -c %Y $fileupd)
fileupdsize=$(ls -l $fileupd| awk '{print $5}'
echo "$lastmod    127.0.0.1    E    logs.zip    mydoku-user        $fileupdsize >> <path_dokuwiki>/data/media_meta/logs.zip

Nello stesso script dovrebbe comparire anche la linea relativa allo spostamento e alla rinomina della vecchia versione del file logs.zip all'interno della directory <path_dokuwiki>/data/media_attic:

mv <path_dokuwiki>/media/logs.zip <path_dokuwiki>/media_attic/logs.$(stat -c %Y <path_dokuwiki>/media/logs.zip).zip

Infine, resta da copiare il nuovo file logs.zip all'interno della directory media e sistemarne i permessi perché sia leggibile all'utente che esegue l'istanza web (per Debian/Ubuntu, ad esempio, è l'utente www-data

mv $fileupd <path_dokuwiki>/media/
chown www-data:www-data <path_dokuwiki>/media/logs.zip

Per rendere il tutto automatico è possibile sfruttare naturalmente cron/anacron, così da far eseguire lo script senza necessità di interazione.

Sfruttando il software illustrato nell'articolo "Scaricare un video di Youtube da linea di comando", è possibile anche ottenere un file audio da un video o una playlist di Youtube.

Il processo è composto da due passi principali:

  1. viene scaricato il media nel formato originario (.webm)
  2. il media viene convertito nel formato desiderato (.mp3)

Per il passo di conversione il software youtube-dl si appoggia a:

  • avconv
  • ffmpeg (consigliato)

Andiamo quindi ad installare il software ffmpeg con il comando

sudo apt-get update
sudo apt-get install ffmpeg
ffmpeg -version

Per convertire in un file mp3 un video di Youtube possiamo utilizzare il comando

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v=xymjDyGIvQ4

dove

-i - ignora gli errori
--extract-audio - estrae la traccia audio
--audio-format mp3 - converte l'audio in formato mp3
--audio-quality 0 - imposta la qualità audio migliore

Se vogliamo aggiungere i tag ID3 partendo dai metadati del video di Youtube basta aggiungere lo switch --add-metadata

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 --add-metadata https://www.youtube.com/watch?v=xymjDyGIvQ4
Gli articoli presenti in questo sito sono di proprietà degli autori di FaciLinux
Idee, consigli? Scrivici su
info-at-facilinux.it
Powered by HTMLy