0

我有一个 Android 应用程序,供大约 10 人使用,即它不会发布并且是“内部”的。该应用程序使用 jsch 将用户连接到 SSH 服务器。我在决定用户如何登录时遇到了问题。即使应用程序在登录服务器时严重限制了用户的功能(基本上只允许上传某些文件),他们仍然必须使用用户密码登录(每个人都使用相同的用户帐户)。我认为这样泄露密码不是一个好主意,所以我正在想办法让用户在不知道登录密码的情况下使用该应用程序。到目前为止我的想法。

(1) 生成一个 ssh 密钥并放在每个 android 设备上。(我不确定如何执行此操作,或者是否可能)。

(2) 将密码加密并存储在手机上,然后创建一个“应用密码”供用户登录应用。

我想知道什么是最好的行动方案。

4

2 回答 2

0

首先,您可以在服务器端限制用户帐户可以执行的操作 - 执行此操作。(请参阅下面的一些提示。)

其次,我会使用公钥认证方法。为每个用户生成(不同的)私钥并将其存储在他们的手机上(Android 手机有某种文件系统,不是吗?),可能用密码加密(所以邪恶的手机窃贼无法使用密钥)。

(可能有一些内置的加密密钥保存设备 - 如果是这样,你当然可以使用它。但我对 Android 的了解不够,无法在这里提供帮助。)

假设服务器使用OpenSSH sshd,您可以~/.ssh/authorized_keys在该用户的主目录中放置一个文件,其中包含每部手机私钥的公钥。这些关键行可以包含选项,可用于强制执行命令(仅允许 sftp/scp)或禁用所有类型的转发。sshd 的sshd_config中提供了更多选项- 您可能希望在监禁环境中为这些上传文件启动一个单独的 sshd,而不是使用您的主要文件。

在 JSch 中,您可以使用JSch对象的addIdentity方法之一启用公钥身份验证。(免责声明:JSch 文档是我编写的。)

您还应该将服务器的公钥与应用程序一起提供(并且不要禁用检查连接)以防止中间人攻击。您可以使用该setKnownHosts方法向 JSch 提供已知主机密钥的列表。

于 2011-12-04T17:06:13.117 回答
0

既然它是一个只有 10 个用户的内部应用程序,为什么不在登录过程中发送手机的 IMEI 值。然后,您可以在服务器上有一个带有允许 IMEI 号码的小表/文件。这将使它有点像无线路由器的 MAC 地址过滤。

于 2011-12-03T15:21:44.930 回答