我正在编写一个跨平台的TCP/IP服务器,在为用户提供服务之前,我需要对用户进行身份验证。需求规定我使用平台的“本地”身份验证,而不是创建自己的身份验证机制。
对于Linux/Unix OS系列,我使用getpwnam对用户进行身份验证,我所知道的确保这一点的最可靠方法是以root用户身份启动我的服务。没有其他原因让服务以root身份运行,我想知道我的选择是什么?我可以在不影响安全性的情况下以root身份调用getpwnam吗?或者,如果有替代getpwnam的方法,它们的可移植性如何,以及从“它们需要什么配置工作?独立身份验证机制被排除在外”的意义上来说,它们的“管理员友好性”是因为它创建了“太多的配置工作”。
发布于 2009-06-08 20:34:35
你有没有看过PAM authentication?
发布于 2009-06-11 11:43:07
使用SASL,例如Cyrus SASL。不需要root权限,所有流行的Linux发行版都支持它。我使用它来验证由Apache提供服务并用Python编写的intranet站点的用户。其中,Sendmail和Postfix使用它进行身份验证。
发布于 2009-06-08 20:32:54
使用getpwnam()不需要根用户权限。
尝试从卷影密码文件或使用PAM的AFAIK获取信息时,确实需要root权限,这会带来一些问题。但是,您也许能够以root身份启动进程,初始化对PAM的访问,然后删除权限。这是未经证实的猜测,但至少在某种程度上是合理的。
请注意,在大多数系统中,getpwnam()不会返回加密(或散列)密码。因此,您需要仔细考虑计划如何对用户进行“身份验证”。
https://stackoverflow.com/questions/966827
复制相似问题