如何在C中以“用户身份”登录?

时间:2013-04-11 09:57:49

标签: c unix authentication ftp system

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

但我不知道要实现这一步的步骤以及提供良好的权利(无法删除用户不是所有者的文件等等)。

我知道我必须在/etc/passwd文件中找到login / home目录,我知道我可以在/etc/shadow文件中找到哈希密码,但这些密码是如何加密的?

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

感谢。

3 个答案:

答案 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帐户进行身份验证的操作听起来像许多程序可能想要做的事情,因此使用库来完成任务而不是自己编辑是有意义的。