[Risolto] Creazione script per invio informazioni al forum

Bash, Perl, Python, Ruby, ...
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Dovrebbe essere stato tutto risolto con la versione 1.0.66.
Ho aggiunto anche la creazione del log per problemi di avvio del sistema (boot).
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

s3v ha scritto:
Lioce ha scritto: In journalctl -x -b --no-pager ho trovato queste due stringhe, la seconda rivela l'indirizzo MAC reale della
mia macchina (qui ovviamente omesso)...
L'indirizzo MAC non sarebbe un grosso vulnus della privacy a meno di condividere la stessa rete (e anche qui sarebbe facilmente individuabile), ma potrebbe "aiutare" in attacchi sul wireless purché si sappia dove guardare e verso chi guardare.
Li nascondo.
@Lioce
Con la versione 1.0.68 viene nascosto l'indirizzo MAC delle interfacce wireless, potresti gentilmente testarla?
Io purtroppo non ho al momento la possibilità di farlo e, in mancanza del file "/proc/net/wireless" ho dovuto utilizzare un altro file.
Scusa infine per il lunghissimo ritardo.

Un cambiamento inserito è l'istruzione:

Codice: Seleziona tutto

shopt -s extdebug
all'interno dello script che serve per permettere l'espansione di ARGC (array utilizzato per controllare l'esattezza degli argomenti passati dalla riga di comando).
A partire dalla versione 5 di Bash viene scritto:
https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html ha scritto: BASH_ARGC
An array variable whose values are the number of parameters in each frame of the current bash execution call stack. The number of parameters to the current subroutine (shell function or script executed with . or source) is at the top of the stack. When a subroutine is executed, the number of parameters passed is pushed onto BASH_ARGC. The shell sets BASH_ARGC only when in extended debugging mode (see The Shopt Builtin for a description of the extdebug option to the shopt builtin). Setting extdebug after the shell has started to execute a script, or referencing this variable when extdebug is not set, may result in inconsistent values.
Il controllo degli argomenti passati allo script funziona sia con l'opzione "extdebug" impostata sia con "extdebug" a OFF ma l'ho inserita per sicurezza.
Comunque non riesco a capire se l'istruzione ha l'effetto voluto perché effettivamente viene impostata dopo l'avvio dello script ("Setting extdebug after the shell has started to execute a script..."), inoltre se cambio lo shebang in "#! /bin/bash -O extdebug" mi dà errore e "#! /bin/bash --debugger" non ha effetto (shopt continua a mostrare "extdebug off").
Lioce
Full Member
Full Member
Messaggi: 164
Iscritto il: 30/03/2014, 21:17

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da Lioce »

@s3v
Grazie, ma purtroppo non funziona, il log continua a mostrare sia il MAC address che il domain name, come puoi vedere dall'output delle linee (che ho modificato):

Codice: Seleziona tutto

mag 23 19:37:12 nomehost NetworkManager[677]: <info>  [1590255432.1182] device (wlp3s0): set-hw-addr: set MAC address to Cx:x8:xx:xx:xx:xx (scanning)

mag 23 19:37:17 nomehost NetworkManager[677]: <info>  [1590255437.8480] device (wlp3s0): set-hw-addr: reset MAC address to xx:xx:xx:xx:xx:xx (preserve)
e

Codice: Seleziona tutto

mag 23 19:37:22 nomehost NetworkManager[677]: <info>  [1590255442.9587] dhcp4 (wlp3s0):   domain name '**.**'
Il file /proc/net/wireless si presenta così, sia da utente normale che da root:

Codice: Seleziona tutto

Inter-| sta-|   Quality             |   Discarded packets                 | Missed | WE
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
wlp3s0: 0000   70.  -39.  -256        0      0      0      0     33        0
Non vedo riferimenti al MAC address.
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Lioce ha scritto:@s3v
Grazie, ma purtroppo non funziona, il log continua a mostrare sia il MAC address che il domain name
:'(
Per il nome di dominio le modifiche le le ho già fatte ma sono sorti diversi problemi che sto provando a risolvere.
Lioce ha scritto: Il file /proc/net/wireless si presenta così, sia da utente normale che da root
Poiché mi interessano gli spazi e i campi del file, potresti allegarlo?
La formattazione del forum elimina gli spazi iniziali delle stringhe.
Lioce ha scritto:Non vedo riferimenti al MAC address.
L'indirizzo MAC viene ricavato con il comando:

Codice: Seleziona tutto

$ ip -br link show nomeinterfaccia
Puoi essere così paziente da dirmi anche l'output di questo comando?
Lioce
Full Member
Full Member
Messaggi: 164
Iscritto il: 30/03/2014, 21:17

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da Lioce »

Questi sono gli output dei comandi "cat /proc/net/wireless" e "ip -br link show wlp3s0", entrambi rediretti su file, il secondo l'ho modificato con sed che non mi sembra ne abbia toccato la formattazione.
Allegati
proc-net-wireless.xz
(220 Byte) Scaricato 91 volte
ip-link.xz
(116 Byte) Scaricato 92 volte
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Grazie mille.

Avevo lavorato su un file con qualche spazio di troppo.
Puoi controllare se modificando da:

Codice: Seleziona tutto

   mapfile -s 2 interfaces < <(awk -F'[: ]+' '{ print $2 }' /proc/net/wireless)
a:

Codice: Seleziona tutto

   mapfile -s 2 interfaces < <(awk -F'[: ]+' '{ print $1 }' /proc/net/wireless)
il problema si risolve?
Lioce
Full Member
Full Member
Messaggi: 164
Iscritto il: 30/03/2014, 21:17

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da Lioce »

No, purtroppo non si risolve, mi dispiace.

Codice: Seleziona tutto

mag 25 19:47:48 nomehost NetworkManager[690]: <info>  [1590428868.8872] device (wlp3s0): set-hw-addr: set MAC address to 16:xx:xx:xx:xx:xx (scanning)

mag 25 19:47:54 nomehost NetworkManager[690]: <info>  [1590428874.6043] device (wlp3s0): set-hw-addr: reset MAC address to xx:xx:xx:xx:xx:xx (preserve)
Ho inserito la modifica qui, ho sbagliato qualcosa io?

Codice: Seleziona tutto

# Nasconde l'indirizzo MAC delle interfacce wireless
 local interfaces macaddress line
 if [ -f /proc/net/wireless ]; then
   # array che contiene i nomi delle interfacce wireless
   mapfile -s 2 interfaces < <(awk -F'[: ]+' '{ print $1 }' /proc/net/wireless)

   for i in "${interfaces[@]}"; do
     # indirizzo MAC dell'interfaccia solo se l'interfaccia
     # ne ha uno. Non viene considerata l'interfaccia di loopback
     line="$(ip -br link show $i)"
     if [ "$(echo $line | wc -w)" -gt 3 ] && [ $i != "lo" ]; then
       macaddress="$(awk '{ print $3 }' <<< $line)"
       # l'indirizzo MAC viene nascosto nel file
       sed -i "s/$macaddress/\*script-removed\*/g" "$log"
     fi
   done
 fi
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Lioce ha scritto:No, purtroppo non si risolve, mi dispiace.
Certo che è proprio un mistero.
Lioce ha scritto: Ho inserito la modifica qui, ho sbagliato qualcosa io?
Assolutamente no, tutto corretto.

Puoi avviare lo script in modalità debug:

Codice: Seleziona tutto

./scriptlog-debianizzati --debug
e confrontare le righe corrispondenti a:
+ local interfaces macaddress line
+ '[' -f proc-net-wireless ']' <<< Ho modificato '/proc/net/wireless' con il nome del file che hai fornito
+ mapfile -s 2 interfaces
++ awk '-F[: ]+' '{ print $1 }' proc-net-wireless <<< idem
+ for i in "${interfaces[@]}"
++ cat ip-link <<< Ho modificato "ip -br link show ..." con 'cat' + il nome del file che hai fornito
+++ file -bL ip-link
++ '[' 'ASCII text' = 'ASCII text' ']'
++ /bin/cat ip-link
+ line='wlp3s0 UP xx:xx:xx:xx:xx:xx <BROADCAST,MULTICAST,UP,LOWER_UP> '
++ echo wlp3s0 UP xx:xx:xx:xx:xx:xx '<BROADCAST,MULTICAST,UP,LOWER_UP>'
++ '[' 4 -gt 1 ']'
++ wc -w
++ '[' wlp3s0 = -n ']'
++ printf '%s\n' 'wlp3s0 UP xx:xx:xx:xx:xx:xx <BROADCAST,MULTICAST,UP,LOWER_UP>'
+ '[' 4 -gt 3 ']'
++ awk '{ print $3 }'
+ macaddress=xx:xx:xx:xx:xx:xx
+ sed -i 's/xx:xx:xx:xx:xx:xx/\*script-removed\*/g' aaaa <<< 'aaaa' è un file di prova che contiene "xx:xx:xx:xx:xx:xx"
+ _upload
e il file 'aaaa' contiene ora '*script removed*'.

O sono completamente partito di testa oppure mi sfugge qualcosa di molto ovvio (la qual cosa non esclude ovviamente la prima ipotesi :) ).
Lioce
Full Member
Full Member
Messaggi: 164
Iscritto il: 30/03/2014, 21:17

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da Lioce »

Il debug mi ha dato questo:

Codice: Seleziona tutto

+ local interfaces macaddress line
+ '[' -f /proc/net/wireless ']'
+ mapfile -s 2 interfaces
++ awk '-F[: ]+' '{ print $1 }' /proc/net/wireless
+ for i in "${interfaces[@]}"
++ ip -br link show wlp3s0
+ line='wlp3s0           UP             xx:xx:xx:xx:xx:xx <BROADCAST,MULTICAST,UP,LOWER_UP> '
++ echo wlp3s0 UP xx:xx:xx:xx:xx:xx '<BROADCAST,MULTICAST,UP,LOWER_UP>'
++ wc -w
++ '[' 4 -gt 1 ']'
++ '[' wlp3s0 = -n ']'
++ printf '%s\n' 'wlp3s0 UP xx:xx:xx:xx:xx:xx <BROADCAST,MULTICAST,UP,LOWER_UP>'
+ '[' 4 -gt 3 ']'
+ '[' wlp3s0 '!=' lo ']'
++ awk '{ print $3 }'
+ macaddress=xx:xx:xx:xx:xx:xx
+ sed -i 's/xx:xx:xx:xx:xx:xx/\*script-removed\*/g' log_25mag_234111
+ _upload
Non corrisponde al tuo, mi sembra.
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Il problema è il carattere "." (punto) all'interno della stringa che deve essere sostituita, da riga di comando con echo e la pipe non c'è bisogno di fare l'escape mentre nello script è necessario.
La tua indicazione sulla cancellazione del MAC address solleva un problema molto grande: se le stringhe che devono essere nascoste contengono caratteri speciali utilizzati da sed, allora l'operazione di offuscamento fallisce.
Caratteri speciali
$.*[\^
Altri da testare
(){}+?|
Per ogni voce nascosta, bisogna testare tutti i caratteri: è un casino.
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Sto controllando su Buster gli eseguibili utilizzati dallo script per raccogliere le varie informazioni (esclusi i comandi built-in di Bash) e di seguito c'è la lista ordinata per priorità.
La prima colonna mostra il nome dell'eseguibile, la seconda il nome del pacchetto a cui appartiene, la terza indica la priorità.
La quarta colonna ("Gestito") mostra se lo script gestisce l'assenza del comando senza andare in errore; ho solo dato una rapida occhiata per cui questa informazione va presa "cum grano salis" :)
Per i "required" gli "important" non c'è la quarta colonna poiché dò per scontato che siano presenti su ogni sistema, anche se mi rimane qualche dubbio (es. systemd).

Required/Important
Sono (dovrebbero) installati di default su ogni sistema Debian.

Codice: Seleziona tutto

Comando              Pacchetto            Priorità
-------              ---------            --------
apt-cache            apt                  important
apt-config           apt                  important
apt-get              apt                  important
base64               coreutils            required
blkid                util-linux           required
cat                  coreutils            required
clear                ncurses-bin          required
cp                   coreutils            required
cut                  coreutils            required
date                 coreutils            required
df                   coreutils            required
dmesg                dmesg                required
dpkg                 dpkg                 required
du                   coreutils            required
fdisk                fdisk                important
find                 findutils            required
findmnt              util-linux           required
getent               libc-bin             required
grep                 grep                 required
groups               coreutils            required
gzip                 gzip                 required
ifconfig             net-tools            important
invoke-rc.d          init-system-helpers  important
ip                   iproute2             important
journalctl           systemd              important
ls                   coreutils            required
lsblk                util-linux           required
lsmod                kmod                 important
mktemp               coreutils            required
pidof                sysvinit-utils       required
ps                   procps               important
readlink             coreutils            required
rename               util-linux           required
rm                   coreutils            required
route                net-tools            important
sed                  sed                  required
sort                 coreutils            required
split                coreutils            required
systemctl            systemd              important
systemd-cgls         systemd              important
systemd-cgtop        systemd              important
systemd-delta        systemd              important
tar                  tar                  required
tput                 ncurses-bin          required
uname                coreutils            required
update-alternatives  dpkg                 required
wc                   coreutils            required
which                debianutils          required
zcat                 gzip                 required
Standard/Optional
Non sono installati di default e potrebbe capitare che qualche sistema Debian non li abbia.
Lo script deve gestire correttamente la loro assenza senza andare in errore o visualizzare output strani.

Codice: Seleziona tutto

Comando           Pacchetto                     Priorità     Gestito
-------           ---------                     --------     -------
aptitude          aptitude                      optional     no
bzip2             bzip2                         standard     sì
dkms              dkms                          optional     sì
gnome-shell       gnome-shell                   optional     sì
grub-mkdevicemap  grub-common                   optional     sì
iwconfig          wireless-tools                optional     sì
iwlist            wireless-tools                optional     sì
kde4-config       kdelibs-bin                   optional     sì
kf5-config        libkf5kdelibs4support5-bin    optional     sì
lspci             pciutils                      standard     sì
lsusb             usbutils                      optional     sì
NetworkManager    network-manager               optional     sì
nmcli             network-manager               optional     sì
openbox           openbox                       optional     sì
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Codice: Seleziona tutto

Comando           Pacchetto                     Priorità     Gestito
-------           ---------                     --------     -------
rfkill            rfkill                        optional     sì
synclient         xserver-xorg-input-synaptics  optional     sì
udisksctl         udisks2                       optional     sì
wget              wget                          standard     sì
wicd              wicd-daemon                   optional     sì
xfce4-about       libxfce4ui-utils              optional     sì
xz                xz-utils                      standard     sì
Altri

Codice: Seleziona tutto

awk
ping
udisks    
aptitude
------------
Questo pacchetto ha priorità "optional" e non ricordo se in passato ne avesse una più alta. Fatto sta che la sua assenza non viene gestita.
Inoltre fornisce anche una alternative:

Codice: Seleziona tutto

$ update-alternatives --config aptitude
Si dovrebbe cambiare in "aptitude-curses"?

awk
------
C'è una alternative:

Codice: Seleziona tutto

$ update-alternatives --config awk
attraverso cui si può scegliere l'eseguibile voluto (gawk, mawk..).
mawk è "required". S dovrebbe cambiare da "awk" a "mawk"?

ping
------
Questo è strano.
L'eseguibile "/bin/ping" appartiene al pacchetto "iputils-ping" ma anche al pacchetto "inetutils-ping". Non riesco a capire se è un bug o no, comunque sul mio sistema è installato "iputils-ping" ed ha priorità "important".

udisks
---------
Questo è imbarazzante.
Non esiste nessun eseguibile con questo nome...

Comandi utili

Codice: Seleziona tutto

$ whereis nomecomando
per sapere dove si trova un determinato comando all'interno del filesystem.

Codice: Seleziona tutto

$ dpkg -S path-eseguibile
"path-eseguibile" è ciò che si ricava dal precedente comando. Serve per sapere a quale pacchetto appartiene un file.

Codice: Seleziona tutto

$ apt-cache show nomepacchetto | grep Priority
"nomepacchetto" è ciò che si ricava dal precedente comando.Serve per conoscere la priorità di un pacchetto.
Non saprei se questa informazione è affidabile a causa degli overrides lato FTP.

Commenti/Suggerimenti/Osservazioni/Consigli sono più che benvenuti ;)

EDIT
Ho corretto "wget" che ha priorità "standard" e non "important".
Aki
Global Moderator
Global Moderator
Messaggi: 9712
Iscritto il: 27/12/2007, 16:59

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da Aki »

Ciao s3v,

Grazie per la approfondita analisi, che mi sembra molto utile anche alla luce della "stratificazione" negli anni delle funzionalità dello script e dei comandi che di volta in volta sono stati aggiunti e delle possibili ottimizzazioni che ne potrebbero conseguire.

Per quanto riguarda aptitude, fino a "Debian Stretch" era lo strumento consigliato dalla distribuzione per la gestione dei pacchetti (successivamente lo è stato apt-get e poi, più recentemente, apt) e la sua priority era "important" [0], mentre con "Debian Buster" è diventata "optional" [1]. Inoltre, per aptitude non trovo alternative:

Codice: Seleziona tutto

# update-alternatives --config aptitude
update-alternatives: errore: nessuna alternativa per aptitude
Per quanto riguarda gawk e mawk sono due diverse implementazioni dell'originale awk, laddove, se ho ben letto, mawk è una versione "più leggera" e non sarebbe del tutto posix compatibile:
Limitations:
-----------

mawk 1.3.3 was developed to correspond with a POSIX draft. POSIX
continued, and incorporated some of mawk's extensions as features.
The 1.3.4 release fills in the major areas in which POSIX grew past
the mawk 1.3.3 implementation.
Sulla mia Debian Buster è installato di default mawk, il che fa ipotizzare che debba essere utilizzato per lo script:

Codice: Seleziona tutto

$ dpkg-query -l "*awk*"
Voluto=U (non noto)/I (installato)/R (rimosso)/P (rimosso totale)/H (in attesa)
| Stato=Non/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(nessuno)/R (reinstallazione richiesta) (Stato,Err: maiuscolo=grave)
||/ Nome           Versione     Architettura Descrizione
+++-==============-============-============-===================================
un  awk            <nessuna>    <nessuna>    (nessuna descrizione disponibile)
un  gawk           <nessuna>    <nessuna>    (nessuna descrizione disponibile)
ii  mawk           1.3.3-17+b3  amd64        a pattern scanning and text process
Per quanto riguarda "ping", ci sono effettivamente due implementazioni. Quella del pacchetto inetutils-ping, è collegata al daemon inetd [3] che è distribuita con il codice sorgente inetutils [4]; con l'implementazione di systemd, quest'ultimo ha sostituito inetd per l'attivazione dei servizi tramite socket, da cui la nuova versione di ping distribuita con il pacchetto sorgente iputils [5].

Infine, per udisks, il pacchetto è udisks2.

[0] https://sources.debian.org/src/aptitude ... n/control/
[1] https://sources.debian.org/src/aptitude ... n/control/
[2] https://www.gnu.org/software/gawk/manua ... sions.html
[3] https://debian-handbook.info/browse/it- ... inetd.html
[4] https://packages.debian.org/source/buster/inetutils
[5] https://packages.debian.org/source/buster/iputils
s3v
Global Moderator
Global Moderator
Messaggi: 5914
Iscritto il: 31/12/2008, 11:54

Re: [Risolto] Creazione script per invio informazioni al for

Messaggio da s3v »

Ciao Aki, grazie della risposta :)
Aki ha scritto: Per quanto riguarda aptitude, fino a "Debian Stretch" era lo strumento consigliato dalla distribuzione per la gestione dei pacchetti (successivamente lo è stato apt-get e poi, più recentemente, apt) e la sua priority era "important" [0], mentre con "Debian Buster" è diventata "optional" [1].
Ecco spiegato il motivo del problema...
A questo punto bisogna ricontrollare tutte le priorità ad ogni rilascio :(
Aki ha scritto: Inoltre, per aptitude non trovo alternative:

Codice: Seleziona tutto

# update-alternatives --config aptitude
update-alternatives: errore: nessuna alternativa per aptitude
Forse sul tuo sistema non è installato "aptitude"? L'alternative c'è:
https://sources.debian.org/src/aptitude ... .postinst/

Codice: Seleziona tutto

[...]
  update-alternatives \
    --install /usr/bin/aptitude aptitude /usr/bin/aptitude-curses 30 $slaves
[...]
Il mio timore è che ne venga aggiunta qualche altra in qualche altro pacchetto ma, per il momento, credo che gestire l'assenza di aptitude sia sufficiente.
È un peccato perché, senza aptitude, non funzionerà la ricerca dei pacchetti esterni e il rilevamento del manager della sessione. A meno di non trovare qualcosa che sostituisca aptitude nelle stesse funzionalità usate.
Aki ha scritto: Per quanto riguarda gawk e mawk sono due diverse implementazioni dell'originale awk, laddove, se ho ben letto, mawk è una versione "più leggera" e non sarebbe del tutto posix compatibile:
Quindi la sostituzione è abbastanza inutile, anche alla luce del fatto che comunque, nel peggiore dei casi, ci sarà sempre mawk installato e i comandi presenti nello script non mi sembrano complicati al punto da portare a comportamenti indesiderati se cambia l'implementazione di awk utilizzata.
Aki ha scritto: Per quanto riguarda "ping", ci sono effettivamente due implementazioni. Quella del pacchetto inetutils-ping, è collegata al daemon inetd [3] che è distribuita con il codice sorgente inetutils [4]; con l'implementazione di systemd, quest'ultimo ha sostituito inetd per l'attivazione dei servizi tramite socket, da cui la nuova versione di ping distribuita con il pacchetto sorgente iputils [5].
Sì, questo non era un vero e proprio problema dello script (che gestisce correttamente il comando "ping") ma piuttosto un problema a monte dell'utente che installa inetutils-ping e si vede sovrascritto l'eseguibile "ping".
Immagino che sia così, ma non farò la prova :)
Aki ha scritto: Infine, per udisks, il pacchetto è udisks2.
Sì ma manca proprio l'eseguibile :D
Lo script usa:

Codice: Seleziona tutto

_comando "/usr/bin/udisks --dump"
fin dalla versione 1.0.22, ma non esiste almeno da Jessie in poi:
https://packages.debian.org/search?sear ... rds=udisks
Highlander!

Grazie ancora!
Rispondi