我正在编写一个跨平台的TCP / IP服务器,我需要在为用户提供服务之前对其进行身份验证。要求规定我使用平台的“本机”身份验证,而不是创建自己的身份验证机制。
对于Linux / Unix OS系列,我使用getpwnam对用户进行身份验证,并且我知道最可靠的方法,以确保其工作原理是以root身份启动我的服务。服务以root身份运行没有其他原因,我想知道我的选择是什么?我可以在没有root权限的情况下调用getpwnam而不会损害安全性吗?或者,如果有getpwnam的替代方案,那么它们的可移植性以及“管理员友好”的意义在于“它们需要什么样的配置工作?独立认证机制脱离桌面的原因正是它创造了太多”配置工作“。
答案 0 :(得分:1)
您是否看过PAM authentication?
答案 1 :(得分:1)
使用SASL,例如Cyrus SASL。不需要root权限,所有流行的Linux发行版都支持它。我正在使用它来验证Apache服务的Intranet站点的用户并用Python编写。其中Sendmail和Postfix使用它进行身份验证。
答案 2 :(得分:0)
使用getpwnam()
不需要root权限。
尝试从影子密码文件或使用PAM的AFAIK获取信息确实需要root权限,这会带来一些问题。但是,您可以以root用户身份启动进程,初始化对PAM的访问权限,然后删除权限。这是未经证实的猜测,但至少有些合理。
请注意,在大多数系统中,getpwnam()
不会向您返回加密(或哈希)密码。因此,您需要仔细考虑您打算如何对用户进行“身份验证”。