![可以让 samba 使用 /etc/shadow](https://linux22.com/image/159095/%E5%8F%AF%E4%BB%A5%E8%AE%A9%20samba%20%E4%BD%BF%E7%94%A8%20%2Fetc%2Fshadow.png)
这适用于 RHEL/CentOS >= 7.6 中的任何 Samba 版本。
我认为 Samba >= 4.8。
为了让每个用户帐户都能够访问 samba,我这样做了smbpasswd -a <user>
。因此,用户的系统登录密码独立于 samba 密码。
有没有这样的方法
- 用户永远不必做
smbpasswd
- samba 可以解决密码问题
/etc/shadow
答案1
问题:密码哈希方法不兼容
早在 Windows NT4 / Windows 2000 时代,就可以通过满足您的要求的方式设置 Samba 身份验证,而且事实上相当常见。但即使在那时,Samba 文档也强烈建议不要这样做,因为它有一个明显的安全缺陷:它要求密码通过网络以未加密的方式发送。即使在当时,这也是一个坏主意;随着现代无线网络和自带设备解决方案的普及,通过网络发送未加密的密码是完全不可接受的。
Windows 和 Linux 都不以明文形式存储系统密码。相反,密码和盐值是单向散列,并存储盐值和生成的哈希值。因此,任何人(甚至系统管理员)都无法出于任何目的轻松地从存储的哈希值中恢复密码的明文版本。它总是需要暴力破解或巨大的彩虹表。
当需要检查密码时,存储的密码为不是解密,因为这基本上是不可能的。相反,该算法查找相关用户的盐值,并使用它对用户输入的密码进行哈希处理,然后将生成的哈希值与存储的哈希值进行比较:如果它们完全匹配,则密码是正确的。
通过网络执行此操作还需要更多保护。如果服务器只是将盐值提供给客户端并等待客户端提供哈希密码,则通过网络传递的数据将是密码等效项监听的攻击者可以简单地通过修改后的邪恶客户端按原样重用哈希值。这被称为“重放攻击”或“传递哈希攻击”。
因此,当 Windows 或 Samba 客户端生成要通过网络进行 passwd 的加密身份验证数据包时,它需要使用与重放攻击保护兼容的哈希方案。但这也使得服务器无法将 Windows 风格的密码哈希值返回为明文形式,它需要开始根据/etc/shadow
.
解决方案
唯一可以解决这个问题的地方是密码更改过程:此时,服务器必须知道密码的明文版本,以便可以对其进行散列和存储。事实上可以修改这个流程来更新两个都同时输入系统登录密码和Samba密码。
如果您的 Samba 服务器不是域控制器,您可以启用文件unix password sync
中的参数smb.conf
,并指定passwd program
允许 Samba 在 Samba 密码更新时自动更新相应的系统登录密码。如果您这样做,您需要指示您的用户始终使用smbpasswd
,从不passwd
。
或者,您可以将 PAM 模块添加pam_smbpass.so
到系统的 PAM 配置中。它可作为 RHEL/CentOS 6.x 和 7.x 的 RPM 软件包使用。
有两种使用方法pam_smbpass.so
:使用 Samba 密码存储作为所有使用 PAM 的服务的主要系统密码存储(基本上所有服务都使用 PAM,除非您需要使用一些可怕的从古老源代码构建的遗留 Unix 程序) ),或者只是将其插入基于 PAM 的密码更改过程中,以便常规passwd
命令(或任何其他基于 PAM 的方法来更新系统登录密码)将/etc/shadow
同时更新 Samba 密码。那么你的用户就可以一直使用passwd
而不是使用smbpasswd
。
答案2
除非您计划使用 Samba 进行大规模用户推广,否则我强烈建议您按照自己的方式进行操作。 Samba 基本上有 (2) 个用户名/密码数据库后端选择:tdbsam(默认)或ldapsam。如果您想安装/配置 ldap,那么您可以设置 Samba 来使用它。查看man smb.conf
更多详细信息。
编辑:您还可以让 Samba 通过 Windows 域控制器进行身份验证。