Domanda

Ho un'app Android, destinata all'uso da circa 10 persone, cioè non sarà pubblicata ed è "in casa". L'app collega l'utente a un server SSH, utilizzando JSCH. Ho raggiunto un problema quando decido come l'utente accede. Anche se l'app limita gravemente la funzionalità dell'utente quando si è effettuato l'accesso al server (fondamentalmente consentendo il caricamento di determinati file), deve comunque accedere, con la password dell'utente (tutti utilizzano lo stesso account utente). Non penso che sia una buona idea regalare la password come questa, quindi sto pensando a modi per consentire all'utente di utilizzare l'app senza conoscere la password di accesso. Le mie idee finora.

(1) Genera un tasto SSH e mettila su ciascun dispositivo Android. (Non sono ancora sicuro di come farlo o se è possibile).

(2) Crittografare la password e archiviarla sul telefono e quindi creare una "password dell'app" per l'utente per accedere all'app.

Vorrei consigli su quale sia il miglior modo di agire.

È stato utile?

Soluzione

Innanzitutto, è possibile limitare il lato server cosa può fare un account utente - farlo. (Vedi sotto per alcuni suggerimenti.)

In secondo luogo, userei il metodo di autenticazione a chiave pubblica. Genera (diverse) chiavi private per ciascuno degli utenti e memorizzalo sui loro telefoni (i telefoni Android hanno una sorta di file system, no?), Forse crittografato da una password (quindi i ladri telefonici malvagi non possono usare la chiave ).

(Potrebbe esserci un dispositivo di detenzione di chiave crittografici costruita - in tal caso, puoi sicuramente usarlo. Ma non so abbastanza su Android per aiutarti qui.)

Supponendo che il server utilizza OpenSsh sshd, puoi mettere un ~/.ssh/authorized_keys File nella home directory di questo utente, che contiene le chiavi pubbliche delle chiavi private di ogni telefono. Queste linee chiave possono contenere opzioni, che potrebbero essere utilizzate per forzare un comando (per consentire solo SFTP/SCP) o disabilitare tutti i tipi di inoltro. Altre opzioni sono disponibili negli SSHD sshd_config - Potresti voler iniziare un SSHD separato in un ambiente incarcerato per quei caricamenti invece di usare il tuo principale.

Da JSCH, è possibile abilitare l'autenticazione a chiave pubblica utilizzando uno dei addIdentity Metodi del Jsch oggetto. (Disclaimer: la documentazione JSCH è stata scritta da me.)

Dovresti anche fornire la chiave pubblica del tuo server con l'applicazione (e non disabilitare il controllo sulla connessione) per impedire gli attacchi man-in-the-middle. Puoi usare il setKnownHosts Metodo per fornire l'elenco delle chiavi host note di JSCH.

Altri suggerimenti

Dal momento che è un'app in casa con solo 10 utenti, perché non invii il valore IMEI del telefono nel processo di accesso. Potresti quindi avere una piccola tabella/file sul server con numeri IMEI consentiti. Ciò renderebbe un po 'come il filtro dell'indirizzo MAC per i router wireless.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top