我有一个混合的 Linux/Windows 软件开发环境,其中 Linux 客户端正在迁移到能够根据 Active Directory 进行身份验证的系统。(这部分我已经弄清楚了)
我们的实验室目前正在使用 CVS 对源代码进行版本控制。在迁移过程中,我们需要用户能够通过 CVS 服务器的身份验证。我计划在迁移时,设置 CVS 服务器以根据 AD 对用户进行身份验证。
不幸的是,我对 CVS 并没有太多经验。这项任务真的可以完成吗?据我所知,它可以设置为根据系统上的本地用户对用户进行身份验证。但是,由于实际用户的凭据不会存储在服务器上本地(因为它是从 AD 中提取的),是否可以指定 CVS 来依赖pam
身份验证?
我读过有关使用用户凭据通过 SSH 访问 CVS 的信息。这是否是实现该操作的必要条件?如果是,如何进行设置?
我非常感谢您的帮助!
答案1
这会很长,但我们还是开始吧。首先,是的,这是可以做到的。我无法提供太多有关配置 CVS 的信息,但我可以提供使 Linux 服务器根据 Active Directory 验证用户身份所需的一切。
一切都从 /etc/nsswitch.conf 开始。以下是相关部分:
passwd: files ldap compat
shadow: files ldap compat
group: files ldap compat
现在,根据您使用的发行版,您需要安装一些 ldap 包。在 Redhat/Fedora/CentOS 下,这将是 nss_ldap,在 Debian/Ubuntu 等下,您将需要 libnss-ldap 和 libpam-ldap。我还推荐一些 ldap-utils 用于调试。
有了上述内容,您的名称服务将尝试使用 LDAP,因此现在您需要配置各种 LDAP 包以使用您的 AD 服务器。搜索基础应为base cn=Users,dc=aminocom,dc=com
,绑定 DN 应为binddn cn=LDAPsearch,cn=Users,dc=aminocom,dc=com
。您需要定义一个特定的用户以允许浏览 AD。我们创建了一个名为 LDAPSearch 的用户,并将其凭据放入名为 .secret 的单独文件中。阅读这些包的文档以了解更多详细信息。此外,我建议使用软绑定策略和以下属性映射:
# UNIX 3.5 映射服务 nss_base_passwd cn=用户,dc=aminocom,dc=com?sub nss_base_shadow cn=用户,dc=aminocom,dc=com?sub nss_base_group cn=用户,dc=aminocom,dc=com?sub nss_map_objectclass posixAccount 用户 nss_map_objectclass shadowAccount 用户 nss_map_attribute uid sAMAccountName nss_map_attribute uid编号 msSFU30Uid编号 nss_map_attribute gid编号 msSFU30Gid编号 nss_map_attribute 登录Shell msSFU30LoginShell nss_map_attribute gecos 名称 nss_map_attribute 用户密码 msSFU30密码 nss_map_attribute 主目录 msSFU30HomeDirectory nss_map_objectclass posixGroup 组 nss_map_attribute 唯一成员 msSFU30Posix成员 nss_map_attribute cn cn pam_login_attribute sAMAccountName pam_filter 对象类=用户 pam_member_attribute msSFU30Posix成员 pam_groupdn cn=nixUsers,cn=Users,dc=aminocom,dc=com pam_password 广告
所有这些都假设您在域控制器上安装了 Windows Services for Unix。在 AD 中,您需要配置一个主 Unix 组(在我们的例子中称为 nixUsers)并将每个 CVS 用户添加到该组中。
您可能应该能够直接使用 AD(即没有 Windows Services for Unix),但这将需要不同的属性映射。您可能需要在那里进行一些实验。
现在我们开始进行 PAM 配置。在 Debian 下,基本上有 4 个文件需要修改:
1.) 普通账户:
帐户需要 pam_unix.so broken_shadow 帐户足够的pam_localuser.so 帐户足够 pam_succeed_if.so uid2.)通用身份验证:
身份验证需要 pam_env.so 身份验证充分 pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >=500 quiet 身份验证充分 pam_ldap.so use_first_pass 身份验证需要 pam_deny.so3.) 普通会话:
会话可选 pam_keyinit.so 撤销 会话需要 pam_limits.so 会话 [成功 = 1 默认 = 忽略] pam_succeed_if.so 服务在 crond 中安静 use_uid 会话需要 pam_unix.so 会话可选 pam_ldap.so4.) 通用密码
密码足够 pam_unix.so md5 shadow nullok try_first_pass 密码足够 pam_ldap.so 需要密码 pam_deny.so
在 Redhat(及其衍生产品)下,所有必要的更改都应进入 /etc/pam.d/system-auth 和 /etc/pam.d/system-auth-ac 中的相关部分。
上述操作将允许用户使用 AD 凭据登录。但是,这不会自动为他们创建主目录(除非您为此编写更多脚本),并且不允许他们通过 Linux 更改密码。这也可以做到,但需要修改他们的工作站(如果他们使用 Linux)。如果对上述内容还有其他问题,请直接提问。
我们在许多服务器上使用它,效果非常好。
答案2
事实证明,CVS 只使用 PAM。因此,如果您的服务器已配置为对 AD 进行身份验证,CVS 也将收到身份验证信息。
wolfgangsz 的建议对于完成第一步(通过 LDAP 对 AD 进行服务器身份验证 [您也可以使用 Winbind])非常有帮助。