SMatt
Posts: 6
Joined: Wed May 30, 2018 8:26 am

Disabilitare credenziali di accesso

Wed May 30, 2018 8:52 am

Buongiorno ragazzi, sono nuovo nel forum quindi spero di non replicare una questione già discussa ma non ho trovato nulla che facesse al caso mio quindi eccomi qua :)
Ho sviluppato su raspberry Pi3 un sistema di controllo accessi che utilizza oltre ai GPIO per gestire I/O anche un lettore di codice a barre connesso via USB.
Su Raspberry ho deciso di usare Raspbian Stretch Lite perché mi consente di avere un uso delle risorse molto basso.
Al boot ho deciso di disabilitare il login automatico quindi automaticamente mi viene richiesto username e psw per poter accedere al sistema. Quello che vorrei fare è disabilitare la richiesta delle credenziali di accesso e presentarle invece dopo la sequenza ctrl+alt+canc o qualsiasi altra.
Il mio programma viene caricato automaticamente a ogni avvio del sistema e nel momento in cui il barcode legge qualcosa va a scrivere automaticamente sullo stdin che in questo momento è l'username, alla prossima lettura scriverà la psw e così via...nonostante ciò il mio programma legge i dati correttamente e procede per la sua strada.
Come è evidente questa cosa andrà avanti all'infinito in quanto il barcode non leggerà mai delle credenziali di accesso valide per consentire l'accesso.
Vorrei per questo motivo evitare di richiedere le credenziali di accesso e non finire in questo loop infinito che secondo me non è carino.

Grazie :)

nicolap8
Posts: 203
Joined: Mon Mar 13, 2017 9:45 pm

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 10:22 am

SMatt wrote:
Wed May 30, 2018 8:52 am
Buongiorno ragazzi, sono nuovo nel forum quindi spero di non replicare una questione già discussa ma non ho trovato nulla che facesse al caso mio quindi eccomi qua :)
Ho sviluppato su raspberry Pi3 un sistema di controllo accessi che utilizza oltre ai GPIO per gestire I/O anche un lettore di codice a barre connesso via USB.
Su Raspberry ho deciso di usare Raspbian Stretch Lite perché mi consente di avere un uso delle risorse molto basso.
Al boot ho deciso di disabilitare il login automatico quindi automaticamente mi viene richiesto username e psw per poter accedere al sistema. Quello che vorrei fare è disabilitare la richiesta delle credenziali di accesso e presentarle invece dopo la sequenza ctrl+alt+canc o qualsiasi altra.
Il mio programma viene caricato automaticamente a ogni avvio del sistema e nel momento in cui il barcode legge qualcosa va a scrivere automaticamente sullo stdin che in questo momento è l'username, alla prossima lettura scriverà la psw e così via...nonostante ciò il mio programma legge i dati correttamente e procede per la sua strada.
Come è evidente questa cosa andrà avanti all'infinito in quanto il barcode non leggerà mai delle credenziali di accesso valide per consentire l'accesso.
Vorrei per questo motivo evitare di richiedere le credenziali di accesso e non finire in questo loop infinito che secondo me non è carino.

Grazie :)
Non sono sicuro che sia possibile fare quello che chiedi.
Però mi pare strano che il lettore di code a barre scriva sullo stdin! Cambiare questo mi pare più ragionevole.
N

SMatt
Posts: 6
Joined: Wed May 30, 2018 8:26 am

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 11:05 am

Ciao Nicola, grazie per la risposta.
Il lettore mi va a scrivere sullo stdin perché viene riconosciuto come un HID e quindi a tutti gli effetti come una tastiera.

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 12:04 pm

esatto, viene riconosciuto come Human Input Device, quindi a tutti gli effetti per il SO risulta una tastiera.

non ho capito perchè hai disabilitato il login all'avvio, tanto fino a che non fai login non ntrerai mai nel programma quindi anche le funzioni di rilevamento sono interdette... se metti il tuo programma di rilevamento in autostart, (con cron o aggiungendogli la chiamata in init.d) puoi fare n modo che il Raspi parta, carichi subito il tuo programma e quindi sia subito pronto al rilevamento...

comunque secondo me la strada più semplice non è software, ma "manuale".

crea un utente con permessi limitati che possa solo far girare il tuo programma di rilevamento e poi stampati in codice a barre username e password di questo utente, metti il tuo programma in autostart e appiccica al raspberry o a qualche cosa di facilmente raggiungibile dal lettore di codice a barre i codici a barre stessi, in modo che appena acceso leggi il barcode di username, quello della password e poi lavori felice e sicuro :)

SMatt
Posts: 6
Joined: Wed May 30, 2018 8:26 am

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 12:17 pm

Eh no perchè il raspberry dovrà essere poi distribuito a terzi e io non voglio che questi accedano al suo contenuto per alcun motivo.
Deve rimanere puramente standalone in cui al boot avvia il programma e non fare null'altro.
L'utente finale non può e non deve avere accesso al sistema.
Vorrei che fosse puramente in background ed ignorare qualsiasi cosa sullo stdin. Per questo chiedevo se ci fosse un modo per avviare la schermata di login solo con una sequenza specifica.
Potrei pensare di lasciarlo così ma non mi piace come idea, non so nello specifico se dopo un determinato numero di tentativi il sistema reagisce in qualche modo.

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 12:43 pm

scusa ma non mi pare che una linux machine possa fare nulla senza immettere un username ed una password, per questo ti dicevo di creare un utente apposito che possa solo eseguire la rilevazione ed a cui sia inibito qualunque altro accesso, in questo modo potresti anche riabilitare l'auto login indicando appunto questo utente come utente di default e potendo fare solo la rilevazione, chiudi la porta a tutto il resto.

in teoria tutti i sistemi operativi che rispettino le fondamentali norme di sicurezza previste anche dalle normative europee e mondiali, DEVE avere un login attivo prima di poter fare qualunque cosa, che poi questa cosa sia hackerabile o meno è un discorso diverso, ma di default o fai login o non fai nulla

SMatt
Posts: 6
Joined: Wed May 30, 2018 8:26 am

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 2:16 pm

E invece no, in /etc/rc.local ho impostato l'esecuzione automatica del mio programma con un deejay di 5 secondi, e anche se non viene effettuato il login dall'utente questo viene eseguito in background correttamente e riesco a gestire tutte le periferiche correttamente, compreso il lettore di codici a barre.

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 3:09 pm

ok, quindi quello che chiedi tu è una via per uscire dal tuo programma ed ottenere l'accesso al prompt utente per inserire username e password, corretto?
ma messo in questi termini, il tuo programma corre sopra alla richiesta di login, quindi lo scavalca, quindi magari quello che ti serve è solo un modo per uscire o per far perdere al tuo programma il controllo dallo standard input, di cui ha il controllo... allora non è una modalità di linux che ti serve, ma una funzione da inserire nel tuo programma...

il mio ragionamento è questo:
linux esegue init.d ed avvia il sistema con tutte le dipendenze ->
quando esegue rc.local lancia il tuo programma che prende il controllo dello standard input passando sopra alla richiesta di login del sistema ->
il tuo programma prende il controllo dello standard input bypassando la richiesta di login ed inizia il suo lavoro.

quindi dal mio punto di vista tu hai 2 o 3 strade:
esci dal tuo programma per permettere al demone di accesso di riprendere il controllo dello standard input
riavvii il programma lasciando però una finestra di tempo in cui il controllo torna al demone di login per inserire username e password
riavvi il sistema ed in quei 5 secondi di delay (a meno che tu non aumenti questo timeout a tipo 30 sec) inserisci username e password

oppure accedi al raspberry da remoto, tramite ssh.

non mi è chiaro se la tua applicazione ha anche un'interfaccia grafica o se il RPi è connesso ad uno schermo o no, comunque visto che è la tua applicazione ad avere il controllo dello standard input è lei che lo deve lasciare, magari usando una specie di password da fargli inserire tramite la scansione di un particolare barcode o una combinazione di tasti o ancora una specie di serratura digitale con un lettore rfid collegato al pare del lettore di barcode all'usb come hid, che venga riconosciuta dall'applicazione stessa.

SMatt
Posts: 6
Joined: Wed May 30, 2018 8:26 am

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 3:54 pm

No scusa, cerco di essere più specifico.
La mia applicazione non ha una GUI (attualmente) e viene eseguita con i permessi di root in background all'avvio del sistema.
L'applicazione interamente scritta in C si occupa di gestire quindi a livello di segnali tutte le periferiche connesse ai GPIO e l'unico input device che è il lettore di codice a barre.

Come ho già detto in precedenza, il mio programma nonostante venga eseguito prima di effettuare il login, riesce a gestire tutte le periferiche così come ho previsto.

Il login dell'utente come ho specificato, non mi serve affatto sia per ragioni di sicurezza e sia perché ai fini dell'utilizzo non serve in quanto è tutto gestito dal mio programma in esecuzione.

Si considera il fatto che il raspberry sarà sempre acceso, l'operazione di avvio al boot quindi mi è necessaria solo in caso di cali di tensione o anomalie che richiedono il riavvio forzato del sistema.

Considerando il caso operativo reale di tutto il sistema si hanno i seguenti step:

1- boot del sistema;
2- il sistema attende 5 secondi e manda in esecuzione il mio programma;
3- il mio programma è in esecuzione ma di default linux richiede le credenziali di accesso.

A questo punto il login di fatto non avverrà mai perché al codice a barre non si presenteranno mai dei codici che corrispondono alle credenziali di accesso!!

Il mio programma legge l'input del codice a barre tramite un file che identifica la periferica di input.
Fondamentalmente quando il barcode legge qualcosa genera evento che risveglia un processo che andrà a leggere dal file.

Questa operazione di lettura da file però non impedisce al lettore di scrivere automaticamente dove è situato il puntatore, che sarà sempre quindi sull'inserimento delle credenziali in quanto il sistema non ha effettuato l'accesso e si aspetta che qualcuno inserisca qualcosa.

A questo punto si avrà inevitabilmente la situazione descritta prima, nel momento in cui il lettore legge qualcosa il suo input verrà considerato dal SO come un tentativo di inserimento username e password (Ovviamente in due letture separate).
Quindi il loop infinito in cui il lettore inserirà username e password ogni volta che viene effettuata una lettura.

Es.
1- Ricevo codice a barre
2- Il mio programma legge il codice dal file
2- Il lettore manda il codice letto sul puntatore e il SO riceve dal codice a barre la stringa letta e la considera come username
3-Ricevo un nuovo codice a barre
4-Il mio programma legge il codice dal file
4-Il lettore manda il codice letto sul puntatore e il SO riceve dal codice a barre la stringa letta e la considera come password

(Credenziali errate, il SO chiede nuovamente username e si ritorna al punto 1)

Per ovviare a questo problema vorrei inibire la richiesta delle credenziali di accesso e presentarle solo quando si specifica una sequenza di tasti.
In università per esempio, per poter effettuare il login al sistema (linux) si doveva prima premere la sequenza ctr+alt+canc e poi appariva la schermata di login con la richiesta delle credenziali. Ogni altra sequenza veniva completamente ignorata dal sistema.
Vorrei replicare questa situazione :)
Spero di essere stato sufficientemente specifico :)

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 4:47 pm

sei stato molto chiaro ora, ma forse mi son spiegato male io, perchè stai solo ripetendo quello che io ipotizzavo (ma forse non ho saputo spiegare) già nel mio secondo post.

il tuo programma lavora ma NON ha il controllo dello standard input, QUINDI tu DEVI effettuare un login, altrimenti qualunque input tu inserisca andrà sullo standard input che è sotto il totale ed imprescindibile controllo del demone di login.

quindi ti ripeto, tutto quello che devi fare è creare un utente limitato, che faccia girare il tuo programma solamente (che poi il tuo programma abbia i permessi di root per leggere e scrivere il gpio e le periferiche HID è una faccenda diversa, il tuo programma può essere lanciato con i permessi di root in background come un demone, ma se è scritto correttamente può essere semplicemente richiamato in funzione attiva anche da un utente qualunque che non sia root)
quindi riabiliti l'autologin e lo fai applicare a quell'utente con l'accesso limitato. ed il tuo programma girerà in background con i permessi di root ma richiamato da quell'utente che effettua il login, quindi in pratica se non si effettua un logout ed un successivo login con delle credenziali di livello più alto nessuno potrà fare nulla anche attaccando monitor, tastiera e mouse al raspberry.
in questo modo bypassi il problema iniziale, e se un fruitore del tuo rilevatore di presenze vuole fare cose non permesse nel raspberry non può perchè l'utente che ha avuto l'accesso non ha permesso di fare nulla, se non appunto di richiamare il tuo programma di rilevamento presenze.

tutto questo giro perchè appunto il demone di login non può essere bypassato, DEVE essere lui ad avere il controllo dello standard input per garantire la sicurezza del sistema fino a che un utente con un accesso di livello più alto non viene autorizzato con username e password adatti.

nicolap8
Posts: 203
Joined: Mon Mar 13, 2017 9:45 pm

Re: Disabilitare credenziali di accesso

Wed May 30, 2018 9:04 pm

Giusto per curiosità, se un utente modificasse "a mano" la SD? Potrebbe comunque fare danni o copiare dati.

macca
Posts: 99
Joined: Tue Oct 16, 2012 9:14 am

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 6:19 am

SMatt wrote:
Wed May 30, 2018 11:05 am
Il lettore mi va a scrivere sullo stdin perché viene riconosciuto come un HID e quindi a tutti gli effetti come una tastiera.
Il problema è che il tuo programma viene lanciato in background senza essere associato ad una console, quindi non può ricevere alcun input.

Ci possono essere un paio di soluzioni:

1. Aggiungere un filtro a udev in modo che ignori il lettore di barcode e usare le funzioni delle libreria USB per accedere direttamente ad esso e leggerne l'input dal tuo programma.

2. Disabilitare il programma di login che viene lanciato al boot su ogni console disponibile e lanciare il tuo programma al suo posto con getty. In questo modo il tuo programma diventerebbe il "login" e avrebbe la console associata, compresa tastiera, lettore barcode e monitor, potrebbe anche visualizzare dei messaggi mentre funziona.

Purtroppo in questo momento non so darti aiuti più specifici per entrambe le soluzioni ma qualche ricerca con google dovrebbe darti tutti gli indizi necessari.

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 8:10 am

a mano si può fare di tutto... estraendo la sd dal RPi e mettendola su un sistema in grado di leggere i filesystem di linux, i files sono comunque raggiungibili, a meno che non venga attivata a livello di sistema una criptazione di sicurezza, e per quanto riguarda i dati puri del caso specifico, il database delle rilevazioni non sia criptato.

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 8:16 am

macca wrote:
Thu May 31, 2018 6:19 am
2. Disabilitare il programma di login che viene lanciato al boot su ogni console disponibile e lanciare il tuo programma al suo posto con getty. In questo modo il tuo programma diventerebbe il "login" e avrebbe la console associata, compresa tastiera, lettore barcode e monitor, potrebbe anche visualizzare dei messaggi mentre funziona.
Ne sai sicuramente più di me, quindi la mia è solo una domanda, non un flame, ma facendo così non è rischioso? se il programma di rilevazione ha i permessi di root e viene lanciato al posto della login, in teoria killando o bypassando quel processo hai accesso alla macchina con gli stessi privilegi di root... o dico una cazzata?

macca
Posts: 99
Joined: Tue Oct 16, 2012 9:14 am

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 10:21 am

willy_pinguino wrote:
Thu May 31, 2018 8:16 am
Ne sai sicuramente più di me, quindi la mia è solo una domanda, non un flame, ma facendo così non è rischioso? se il programma di rilevazione ha i permessi di root e viene lanciato al posto della login, in teoria killando o bypassando quel processo hai accesso alla macchina con gli stessi privilegi di root... o dico una cazzata?
Killando no, perchè è come il normale processo di login, viene riattivato (respawned). Il processo può comunque essere lanciato come un utente non privilegiato (se non ho capito male dovrebbe già funzionare così), ma anche se fosse root il rischio dipende da cosa fa quel programma, se non ha porte in ascolto su internet il rischio è limitato alla macchina locale e se un malintenzionato ha accesso alla macchina non puoi farci molto in ogni caso.

SMatt
Posts: 6
Joined: Wed May 30, 2018 8:26 am

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 10:51 am

Ho capito, mi sorge però un ulteriore problema se così si può definire.
Ammesso che io crei un nuovo utente con privilegi limitati ecc.. nel momento in cui viene effettuato l'autologin in CLI avrò che comunque
il mio lettore di codice a barre scriverà sulla shell.
In questo caso non ci sarà il loop sulle credenziali ma una serie illimitata di command not found.

macca
Posts: 99
Joined: Tue Oct 16, 2012 9:14 am

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 11:54 am

SMatt wrote:
Thu May 31, 2018 10:51 am
Ho capito, mi sorge però un ulteriore problema se così si può definire.
Ammesso che io crei un nuovo utente con privilegi limitati ecc.. nel momento in cui viene effettuato l'autologin in CLI avrò che comunque
il mio lettore di codice a barre scriverà sulla shell.
In questo caso non ci sarà il loop sulle credenziali ma una serie illimitata di command not found.
No no, non mi sono spiegato bene.

Quando Linux fa il boot fa partire una serie di processi tra i quali il "login" che altri non è che un normalissimo programma che visualizza un prompt, attende nome utente e password, verifica la correttezza e lancia la shell (bash, sh, csh o che so io) che si occuperà poi di eseguire i comandi. A questo programma vengono associati i canali di I/O che possono essere una normale seriale (tty) oppure una delle console virtuali (pts se non sbaglio), nel caso delle console virtuali l'input è la tastiera e l'output è la scheda video. Tanto per dire, la shell potrebbe anche essere un tuo programma, non è obbligatorio usare bash o simili, secoli fa questo sistema veniva usato per lanciare il programma del BBS quando qualcuno si collegava via modem. Così come non è obbligatorio avere un processo di login, se vuoi un sistema completamente chiuso in locale basta cancellare lo script che lancia il processo di login.

Il tuo programma non fa nessun login, viene lanciato con i privilegi dell'utente, per esempio con start-stop-daemon puoi specificare l'utente con cui verrà fatto partire il processo (mi pare sia --chuid). Facendolo partire come processo di "login" avrai come risultato che stdin e stdout saranno automaticamente indirizzati al tuo programma il quale poi se li gestirà come vuole. In poche parole elimini completamente la possibilità di fare il login locale, potrai farlo solo tramite ssh se l'hai attivato.

Purtroppo l'ultima volta che ho fatto qualcosa del genere era appunto secoli fa per un BBS e Linux è cambiato un po' nel frattempo, quindi non posso essere più preciso, comunque dovresti cercare un po' di documentazione su come Linux effettua il boot, i processi che vengono lanciati, ecc.
https://en.wikipedia.org/wiki/Linux_startup_process
Last edited by macca on Thu May 31, 2018 1:25 pm, edited 1 time in total.

macca
Posts: 99
Joined: Tue Oct 16, 2012 9:14 am

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 11:55 am

Deleted
Last edited by macca on Thu May 31, 2018 1:25 pm, edited 1 time in total.

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 1:17 pm

lol Macca, grandi spiegazioni!

poi però ti sei autoquotato per sbaglio o volevi aggiungere altro??

macca
Posts: 99
Joined: Tue Oct 16, 2012 9:14 am

Re: Disabilitare credenziali di accesso

Thu May 31, 2018 1:27 pm

willy_pinguino wrote:
Thu May 31, 2018 1:17 pm
lol Macca, grandi spiegazioni!

poi però ti sei autoquotato per sbaglio o volevi aggiungere altro??
Ma che... volevo correggere un errore di ortografia, devo aver cliccato l'icona sbagliata e non me ne ero nemmeno accorto!

willy_pinguino
Posts: 527
Joined: Sun Jan 22, 2017 9:11 pm

Re: Disabilitare credenziali di accesso

Fri Jun 01, 2018 8:19 am

lol :-P capita :)

Return to “Italiano”

Who is online

Users browsing this forum: nicolap8 and 1 guest