0

我目前正在制作一个 FTP 服务器,我想实现真正的身份验证。我的意思是我的系统上有用户,我希望他们能够使用保存在系统中的用户名密码使用客户端(例如 Filezilla)登录我的 FTP 服务器。

但我不知道实现这一点并赋予良好权利的步骤(不可能删除用户不是所有者的文件,等等......)。

我知道我必须在文件中找到登录/主目录,/etc/passwd并且我知道我可以在文件中找到散列密码/etc/shadow,但是这些密码是如何加密的?

登录后,我是否必须检查用户是否有权自己删除/访问/写入文件,或者有没有办法让系统知道

谢谢。

4

3 回答 3

4

您不应该期望密码存储在特定文件中,也不应该假设它会以特定方式加密(实际上是散列)。

密码可能由像 NIS 这样的集中式数据库提供,甚至可能以您正在运行的 Unix 系统无法处理的方式存储,例如将身份验证委托给 LDAP 或活动目录时。

正确的方法是使用 pam 框架,该框架旨在提供一个隐藏底层复杂/灵活设置的单一界面。

查看 Unix 实现的 getpwuid、pam_start 和 pam_authenticate 手册页。

于 2013-04-11T11:23:08.767 回答
1

这取决于您使用的操作系统。对于 FreeBSD,它是具有更改底层哈希的 Crypt 算法(默认为 SHA-512),请参阅http://www.freebsd.org/doc/en/books/handbook/crypt.html。其他操作系统可以使用 Bcrypt 或其他。

于 2013-04-11T10:11:31.177 回答
0

这看起来很相关:

姓名

pam_unix - 传统密码认证模块

概要

pam_unix.so [...]

描述

这是标准的 Unix 身份验证模块。它使用来自系统库的标准调用来检索和设置帐户信息以及身份验证。通常这是从 /etc/passwd 和 /etc/shadow 文件中获得的,如果启用了 shadow 也是如此。

对主机的 unix 帐户进行身份验证的操作听起来像是很多程序可能想要做的事情,因此使用库来完成任务而不是自己滚动是有意义的。

于 2013-04-11T10:26:47.883 回答