我不想向我的应用程序的用户提供类似SSH/RSYNC的功能。我希望他们能够将SSH密钥粘贴/保存到我的应用程序类似于GitHub的做法中:

因此,我的问题是,一旦我让用户保存他们的密钥(最好是在数据库中):
是否有一种方法可以提供/模仿SSH/RSYNC特性,而无需实际创建Linux用户帐户?我希望能够根据他们的数据库存储的公钥进行授权,并允许他们在特定文件夹中进行RSYNC (例如,根据应用程序中的用户名)。
(如果重要的话,它将是部署到Ubuntu服务器上的Rails应用程序)
发布于 2017-01-26 22:18:43
OP特别指出,他希望将密钥分配给多个用户,并且希望将用户存储在数据库中,而不是作为实际的linux用户存储。在上面提到的Github样式设置中,只有一个git用户。
为了使答案完整,OP还需要使用AuthorizedKeyCommand指令,这里很好地解释了这个指令- 带有数据库公钥的OpenSSH。
所以,你使用两者的组合。对服务器的身份验证(存储在数据库中的x个用户数)由以下人员完成。基于自定义身份验证脚本(您从web应用程序中调用的bash脚本)
当您的自定义脚本将一个公钥返回给OpenSSH进行身份验证时(而不是authorized_keys文件),您将以Michael的答案中描述的格式提供它。这样,您就可以对动态用户可以访问的特定功能提供授权。
发布于 2021-01-15 20:23:30
Linux用户可能不仅来自/etc/passwd和影子,还可能来自其他NSS模块。比如说,除了其他模块之外,还有MySQL NSS模块和LDAP模块。但是,将它们的主目录配置为从与/home不同的位置下降,原因很快就会变得显而易见。
您可以使用手写的FUSE模块合成它们的主目录,这样的模块很容易编写;例如,我建议查看MySQL FUSE文件系统源(您要做的事情必须更容易)。为了使基于密钥的身份验证生效,您应该从数据库密钥记录中合成一个~/..ssh/ should _ key文件,其中还限制了用户在连接该密钥时所能做的事情。您的FUSE模块可能会将一些请求代理到实际的文件系统,以避免将文件存储在数据库中;对于示例实现,请参阅encfs源代码,您将同样做同样的操作,但不需要加密。
因此,您可以在某个地方安装这样的文件系统,这将使您的所有综合用户家园。
瞧,所有的东西都使用数据库中的数据,细节被合成。注意,您在这里创建的仍然是实际的用户帐户,但是它们的所有细节都存储在数据库中,这些用户被任意限制。
https://serverfault.com/questions/518821
复制相似问题