我对本地用户和虚拟用户配置之间的区别有点困惑vsftpd
。从 vsftpd 的角度来看,它不知道用户是本地用户还是虚拟用户,不是吗?vsftpd
只需连接到 中设置的 PAM 模块pam_service_name
,如果凭据根据 PAM 正确,则接受登录。
那么,为什么vsftpd
文档会对它们产生影响呢?
例如,我有一个个性化的 PAM 模块,它从不使用系统本地(/etc/passwd
)用户的数据库获取登录凭据,因此,我无法使用任何系统帐户登录,即使在我的文档中local_enable
设置为YES
。
这种困惑让我无法完全理解 的目的virtual_user_local_privs
。在什么情况下 会将vsftpd
登录用户视为本地用户或虚拟用户?PAM 是否会vsftpd
以某种方式通知它?我是不是完全误解了什么?
这些配置选项是否由于遗留原因仍然存在?
所有这些混乱都源于vsftp
没有提供实际的文档,而只是提供参考。
答案1
一切都与权限有关。Linux 中的所有文件和目录都有一组标准的访问权限。这些访问权限控制谁可以访问哪些文件,并为系统中的文件和目录提供基本的安全级别。虚拟用户和本地用户之间的主要区别在于本地用户拥有自己的主目录,而虚拟用户默认拥有与匿名用户相同的权限。
答案2
我所寻找的差异是从以下vsftpd
配置示例中提取出来的:这分叉的 GitHub 仓库:
客人启用=是
guest_username=虚拟
guest_enable 非常重要 - 它激活虚拟用户!而 guest_username 表示所有虚拟用户都映射到我们上面设置的真实用户“virtual”。
因此,本地用户就是任何可以根据配置的 PAM 服务登录的用户,而虚拟用户是本地(PAM)用户,其行为(在登录后)与实际本地(/etc/passwd
)用户相同。我想您可以更改您的guest_username
根据每个用户更改您的设置以识别“虚拟 ftp 用户组”。
当您个性化 PAM 服务以创建非系统用户(不存在的自定义用户名和密码列表/etc/passwd
)时,vsftpd
无法正常工作,因为这些用户实际上并不存在于系统中,因此在上传或读取目录或文件时无法检查权限。
因此您需要一个系统用户代表他们行事。这就是guest_enable
发挥作用的地方:每个登录用户都将充当guest_username
,该用户必须作为/etc/passwd
用户存在。