我目前正在制作一个 FTP 服务器,我想实现真实身份验证。我的意思是我的系统上有用户,我希望他们能够使用保存在系统中的用户名密码通过客户端(例如 Filezilla)登录我的 FTP 服务器。
但我不知道要执行此操作并授予良好权利(无法删除用户不是所有者的文件等...)的步骤。
我知道我必须在 /etc/passwd
文件中找到 login/home 目录,我知道我可以在 /etc/shadow
中找到哈希密码文件,但这些密码是如何加密的?
登录后,我是否必须检查用户是否有权自行删除/访问/写入文件,或者是否有办法让系统知道?
谢谢。
您不应期望密码存储在特定文件中,也不应假定它会以特定方式加密(实际上是散列)。
密码可能由 NIS 等集中式数据库提供,甚至可能以您运行的 Unix 系统无法处理的方式存储,例如将身份验证委托(delegate)给 LDAP 或事件目录。
一个正确的方法是使用 pam 框架,它被精确地设计为提供一个隐藏底层复杂/灵活设置的单一接口(interface)。
查看您的 Unix 实现的 getpwuid、pam_start 和 pam_authenticate 手册页。
我是一名优秀的程序员,十分优秀!