我目前正在制作FTP服务器,我想实施真实身份验证。我的意思是我的系统上有用户,我希望他们能够使用保存在系统中的用户名密码登录我的FTP服务器(例如Filezilla)。
但我不知道要实现这一步的步骤以及提供良好的权利(无法删除用户不是所有者的文件等等)。
我知道我必须在/etc/passwd
文件中找到login / home目录,我知道我可以在/etc/shadow
文件中找到哈希密码,但这些密码是如何加密的?
登录后,我是否必须检查用户是否有权自行删除/访问/写入文件,还是有办法让系统知道?
感谢。
答案 0 :(得分:4)
您不应期望密码存储在特定文件中,也不要假设密码将以特定方式加密(实际哈希)。
密码可能由NIS等集中式数据库提供,甚至可能以您运行的Unix系统无法处理的方式存储,例如将身份验证委派给LDAP或活动目录时。
正确的方法是使用精确设计的pam框架,以提供隐藏底层复杂/灵活设置的单一界面。
查看Unix实现的getpwuid,pam_start和pam_authenticate手册页。
答案 1 :(得分:1)
这取决于您使用的操作系统。对于FreeBSD,它是Crypt算法,具有更改底层哈希值(默认为SHA-512),请参阅http://www.freebsd.org/doc/en/books/handbook/crypt.html。其他操作系统可以使用Bcrypt或其他操作系统。
答案 2 :(得分:0)
这看起来很相似:
命名强>
pam_unix - 传统密码身份验证模块
<强>概要强>
pam_unix.so [...]
<强>描述强>
这是标准的Unix身份验证模块。它使用标准 从系统库调用以检索和设置帐户 信息以及身份验证。通常这是从 如果启用了阴影,则/ etc / passwd和/ etc / shadow文件也是如此。
对主机的unix帐户进行身份验证的操作听起来像许多程序可能想要做的事情,因此使用库来完成任务而不是自己编辑是有意义的。