使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录

article/2025/10/30 14:59:05

使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录

  • Linux 统一身份登录和查询
    • POSIX 属性 (POSIX Attributes)
    • 安装组件程序
    • 加入 AD 域
    • 测试 LDAP 查询
    • 配置 NSS 和 PAM
    • 配置 SSSD
    • 验证 SSSD 配置
    • 针对 AFS 进一步配置 PAM
    • 登录验证

Linux 统一身份登录和查询

在前面的章节里我们解释了保持 Linux UID 统一的重要性。在这一节里我们介绍统一 Linux 主机的用户 UID, 并使得用户可以用统一的域账号和密码登录 Linux 主机的方法。

我们首先指出一个事实,在具有多台 Linux 主机的环境中,无论用户采用了何种网络文件系统为用户提供个人目录,都需要解决统一用户 UID 的问题。所以统一身份登录不仅仅是部署 OpenAFS 的需要,而是所有 Linux 集群的需要。

如果用户采用了 NFS 或者 SMB 协议部署网络文件系统,用户的个人目录可能位于 /server1 或者 /filer2 这样的目录下,这样的情况也同样面临统一账户管理的问题。

我们在这里介绍的基于 SSSD 的统一身份登录方案不仅适用于 AFS,稍作调整以后也适用于其他网络文件系统。

统一身份管理长期以来是企业用户关心的问题。面向 Linux 的解决方案也经历了多代演变。

Unix最初的用户账号都是本地,其信息存储于

/etc/passwd
/etc/shadow 
/etc/groups 

等本地文件下。创建一个Unix 用户的过程本质上就是向上述文件增添相应的记录。

20 世纪 90 年代时,人们开始使用 Network Information Service (NIS) 系统提供网络黄页(Yellow Page)服务,在 Sun 公司的推动下,Unix 主机可以通过 NIS 协议向中心数据库获取用户账户信息,以登录/etc/passwd下没有登记的非本地用户.

在 DNS 协议没有推广前, NIS 还提供了早期的域名解析服务。

进入21世纪以后,DNS 取代 NIS 成为网络域名解析的标准协议,而 LDAP (Lightweight Directory Access Protocol) 则取代了 NIS 协议里身份目录服务的部分。Linux 世界开始使用 OpenLDAP 系统提供非本地用户的身份数据,而基于 LDAP 协议的微软 Active Directory 系统在 Windows 世界得以广泛应用。

为了支持 Linux 主机向 Active Directory 的集成,Samba 在21世纪初变得流行。Linux 主机在安装了 Samba 以后可以像 Windows 主机一样加入 Active Directory 的域,访问域里的存储和打印资源。

进入00 年代末尾, Samba 增加了 winbind 组件。Winbind 可以使用 LDAP 协议向 Active Directory 获取用户身份信息,并转换成 Linux 主机可以理解的用户格式。比如 Winbind 可以按照用户的要求实现从 Active Directory 的 SID 向 Linux UID 的映射,使得用户可以在部署了 winbind 的所有主机上获得统一的 UID。Winbind 还可以用类似 /home/%U 的格式统一用户的个人目录路径。许多 Linux 管理员对 Samba 和 Winbind 都“情有独钟”。

进入 10 年代末期,即本文成文的时候,Linux 世界的统一身份管理迈入了 SSSD (System Security Service Daemon)的年代。SSSD 作为最主要的身份管理组件进入 Red Hat Enterprise Linux 7 和 8.

使用 SSSD, Linux 系统管理员可以允许非本地用户以统一的 UID 登录 Linux,并且像本地用户一样使用 Linux 客户端。而 Linux 系统管理员不需要负担管理非本地用户账户的责任。非本地用户的账户名、密码、UID和个人目录路径由组织统一部署的中心数据库负责维护。

关于 SSSD 的原理和与 Winbind 的比较有很多公开的资料,比如

https://jhrozek.wordpress.com/2015/03/11/anatomy-of-sssd-user-lookup/

https://www.redhat.com/en/blog/sssd-vs-winbind

我们此处不对 SSSD 的工作原理和实现方式进行详细讨论,而只介绍其和部署相关的部分。

SSSD 作为一个服务运行于 Linux 操作系统环境中,其守护进程分为前端后端。前端负责接收来自操作系统的名称解析请求,而后端则负责和相应的身份数据库通信获取解析请求的答复。

SSSD 既可以和 Active Directory 通信以支持 Linux 向 AD 的集成,也可以和 Linux 世界的 FreeIPA/IdM 通信,支持纯 Linux 实现的统一身份管理。

当SSSD 的后端与 Active Directory 通信时,将采取 LDAP 协议获取用户的信息,除了 Kerberos 密码以外,这些用户信息并不敏感,所以不加密的 LDAP 通信就可以满足需要。这个过程可以图解如下(https://www.redhat.com/en/blog/overview-direct-integration-options):

SSSD_Diagram
对于我们的部署,简单来说,就是用户的账户属性,包括其 UID, GID, Home Directory 和 Shell 等信息存储于 Active Directory 数据库中,我们使用 SSSD 以 LDAP 协议查询和获取用户的这些属性,并且以 Kerberos 协议验证用户身份。

POSIX 属性 (POSIX Attributes)

我们前面提到的用户账号的信息:UID, GID, 个人目录的路径位置以及偏好的 Shell 在Active Directory 里被归于一类属性,称为用户的 POSIX 属性(POSIX Attributes)。对于 Linux 本地用户账号,以上信息都是存储在 /etc/passwd 文件中。而对非本地用户,它们将由遵循 LDAP 协议的身份数据库提供。

当我们在 Active Directory 里查询一个用户的属性时,就可以看到这些内容.

我们的部署将使用 SSSD 查询其中最基本的4个属性:

POSIX 属性名取值举例含义
uidNumber2002Linux UID,必须和 AFS ID 一致
gidNumber100Linux GID
unixHomeDirectory/afs/hq.company.com/user/t/testuser用户的个人 $HOME 目录
loginShell/bin/bash用户偏好的登录 $SHELL

下面的图片举例显示了一个用户在 Active Directory 里的 POSIX 属性
POSIX_attr1
POSIX_attr2POSIX_attr3
在创建 AFS 用户账号时,AFS 系统管理员除了需要在 Active Directory 里创建用户,还需要填入该用户的上述 4 个 POSIX 属性值,其中 uidNumber 的值必须和用户的 AFS ID 一致。后者在 AFS 系统管理员以 “pts createuser” 命令向 Protection Database 里增添用户时被唯一固定。

安装组件程序

在这一步和下一步里,我们的目标是使用 Samba 将 Linux 主机加入 AD 域以获得查询 AD 用户的权限,并使用 SSSD 来查询 AD 获取用户信息。

在进入操作步骤之前,请确定主机已经连入网络,可以和 AD 的域控制器通信。尤其需要注意相应的端口已经打开

在 CentOS 7 里,可以使用如下命令安装需要的程序包:
[xmsguan@client1 openafs]$ sudo yum install samba-common-tools sssd-ad sssd samba

加入 AD 域

为了将主机加入 Active Directory 域以获得查询用户 POSIX 属性的权限,我们对 Samba 做基本的配置,告知其 AD 域和 Kerberos Realm 的信息。
编辑

/etc/samba/smb.conf 

文件的 [global] 一节,其内容如下:

[global]workgroup = ADclient signing = yesclient use spnego = yeskerberos method = secrets and keytablog file = /var/log/samba/%m.logpassword server = AD.COMPANY.COMrealm = AD.COMPANY.COMsecurity = ads#passdb backend = tdbsam#printing = cups#printcap name = cups#load printers = yes#cups options = raw

其中 AD.COMPANY.COM 是域名的大写形式,即 Kerberos Realm 名称。

配置好以上信息以后,Samba 就有了足够的信息可以将我们的主机加入 AD 域。

我们首先需要以 kinit 命令、用一个具有加域权限的域账号登录(xguanafsadmin),然后执行 net ads join 命令将主机加入 AD 域,获得属于主机的 Kerberos 密钥。

[root@eda01 xmsguan]# kinit xguanafsadmin
Password for xguanafsadmin@AD.COMPANY.COM:
[root@eda01 xmsguan]# net ads join -k
Using short domain name -- AD
Joined 'EDA01' to dns domain 'ad.company.com'
No DNS domain configured for eda01. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
[root@eda01 xmsguan]#

此处我们只需要获得查询 AD 的权限,即获得 Kerberos 密钥,而我们忽略了 DNS 记录更新失败的信息。

我们可以确认主机已经获得了属于自己的 Kerberos 密钥:

[root@eda01 xmsguan]# ls /etc/krb5.keytab
/etc/krb5.keytab
[root@eda01 xmsguan]# klist -k
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------1 restrictedkrbhost/eda01.ad.company.com@AD.COMPANY.COM1 restrictedkrbhost/EDA01@AD.COMPANY.COM1 restrictedkrbhost/eda01.ad.company.com@AD.COMPANY.COM1 restrictedkrbhost/EDA01@AD.COMPANY.COM1 restrictedkrbhost/eda01.ad.company.com@AD.COMPANY.COM1 restrictedkrbhost/EDA01@AD.COMPANY.COM1 host/eda01.ad.company.com@AD.COMPANY.COM1 host/EDA01@AD.COMPANY.COM1 host/eda01.ad.company.com@AD.COMPANY.COM1 host/EDA01@AD.COMPANY.COM1 host/eda01.ad.company.com@AD.COMPANY.COM1 host/EDA01@AD.COMPANY.COM1 EDA01$@AD.COMPANY.COM1 EDA01$@AD.COMPANY.COM1 EDA01$@AD.COMPANY.COM

我们可以使用 net ads testjoin 命令在 Linux 主机端确认加域已经成功:

[root@eda01 xmsguan]# net ads testjoin
Join is OK
[root@eda01 xmsguan]#

同时我们也可以在域控制器上确认域里确实已经加入该主机的记录。
AD_join_confirm

测试 LDAP 查询

在进行 SSSD 配置之前,首先用底层的 LDAP 协议测试一下手动查询 AD 是否可以顺利通过, 这对于此后的配置和排错十分有益。这是因为当我们配置完成以后,SSSD 将使用同样的 LDAP 协议来查询用户信息,以登录非本地用户。事先将管道疏通好,有利于之后的部署和排查。

如果手动 LDAP 查询可以通过,说明 AD 的域控制器和 AFS 客户端主机之间可以顺利通信,那么如果之后的配置出错,则错误不在底层的通信。

相反,如果手动查询不能通过,则不应该进入 SSSD 配置步骤,而需要排除造成 LDAP 查询失败的底层原因,比如防火墙端口是否打开,路由是否顺利,域控制器的服务是否正常,DNS 配置是否正确等等。

手动 LDAP 查询需要使用的命令是 ldapsearch,这个命令可以通过安装 openldap-client 客户端获得。
安装openldap-clients, 以使用 ldapsearch:

[root@eda01 xmsguan]# yum install openldap-clients

接着我们使用 ldapsearch 命令向域控制器查询一个已经存在的用户的记录,比如 testuser.

需要特别注意的是,命令的 -H 参数后面应该使用域控制器的全程域名(FQDN),而非 IP 地址。-b 参数后面应该使用被查询用户对应的基础专有名称(base distinguished name, base DN)。如果域的名称是 ad.company.com,则这个参数值可以是 “dc=ad,dc=company,dc=com”。注意不能有空格

如果查询顺利,得到的结果一般如下,注意可以看到一些关键属性的值,比如 uidNumber, loginShell 等等。

[root@eda01 xmsguan]# ldapsearch -H ldap://dc1.ad.company.com -Y GSSAPI -N -b "dc=ad,dc=company,dc=com" "(&(objectClass=user)(sAMAccountName=testuser))"
SASL/GSSAPI authentication started
SASL username: testuser@AD.COMPANY.COM
SASL SSF: 256
SASL data security layer installed.
# extended LDIF# testuser, AFS, ad.company.com
dn: CN=testuser,OU=AFS,DC=ad,DC=company,DC=com
…
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: testuser
givenName: testuser
distinguishedName: CN=testuser,OU=AFS,DC=ad,DC=company,DC=com
instanceType: 4
…
sAMAccountName: testuser
…
userPrincipalName: testuser@ad.company.com
…
uidNumber: 2002
unixHomeDirectory: /afs/hq.company.com/u/t/testuser
loginShell: /bin/bash

上述查询如果成功,说明主机通过 LDAP 协议和存储了用户账户数据的 AD 域控制器之间的通信已经没有障碍。如果查询失败,则需要检查域服务是否运行正常,主机的网络是否正常,以及主机上相应的网络端口是否已经打开。

配置 NSS 和 PAM

在这一步里,我们的目标是告知 Linux 操作系统这样的信息:

除了使用本地文件 /etc/passwd,请另外使用 SSSD 和 Kerberos 服务解析非本地用户名并登录这些用户。

如何做到这一点呢?Unix/Linux 系统通过一个叫 Name Service Switch (NSS)的组件实现这一点。NSS 长期以来属于 Unix/Linux 系统的基本组件,由 C 语言的标准库 libc (glibc) 提供。其配置文件的位置固定为:

/etc/nsswitch.conf

这个文件的格式十分简单,除了注释和空行以外,每一行描述了某种类型的名称应该以何种顺序和方式解析。比如:

hosts:      files dns

其中 hosts 指明了这是一条针对主机地址的解析规则,冒号之后的部分规定了名称的解析顺序。在上面这个例子中,因为 files 文件当先,所以每当操作系统需要解析一个主机的地址时,首先会查询本地文件记录(这个文件一般是 /etc/hosts)如果查询失败,则接着使用 DNS 协议解析主机地址。而 DNS 服务的地址一般通过查询 /etc/resolv.conf 文件获得。

对我们而言,感兴趣的记录类型是 passwd, shadow 和 group. 我们希望将 SSSD 增加到这些记录中,这样当 Linux 遇到一个本地文件不存在的用户名时,就会使用 SSSD 查询用户的 POSIX 属性。

我们可以通过手动方式修改 /etc/nsswitch.conf 文件实现这一点,但更安全可靠的方式是通过自动配置命令,比如 authconfig 或者 authselect 实现。

类似的,我们需要告知 Linux 操作系统:

除了使用本地文件 /etc/shadow,请使用 Kerberos 协议验证非本地用户的身份。

这同样是通过配置一个 Unix/Linux 的基本组件实现,这个组件称为 PAM (Pluggable Authentication Modules). PAM 组件由位于

/etc/pam.d/

目录下的文件来配置。其规则比 NSS 复杂不少。

修改 PAM 配置文件需要**特别小心**,因为 PAM 文件的改动会即时生效

如果 PAM 修改错误,往往会立刻导致用户无法远程登录系统。因此对于新手而言,一般不建议手动修改这些文件,而是通过自动配置工具,比如 authconfig 或者 authselect 实现。如果不得不远程登录并手动修改文件,一般的做法是同时保持两个 root 登录终端进程,以其中一个进行修改和调试,如果出错,则另外一个已经登录的 root 终端还可以恢复修改之前的备份。

我们将使用自动配置命令 authconfig 对 NSS 和 PAM 进行修改,以支持 SSSD 和 Kerberos 协议。

以 CentOS 7 为例,需要执行的命令如下:

[xmsguan@client1 ~]$ sudo authconfig --update --enablesssd --enablesssdauth
[xmsguan@client1 ~]$

在 CentOS 8 或者 RHEL 8 里, authconfigauthselect 取代,需要执行的命令和其返回的结果则是:

[root@eda01 xmsguan]# authselect select sssd --force
Profile "sssd" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
- netgroup
- automount
- servicesMake sure that SSSD service is configured and enabled. See SSSD documentation for more information.[root@eda01 xmsguan]#

执行完上述命令,可以看到 /etc/nsswitch.conf 文件里增加了 SSSD 的解析模块 (sss):

passwd:     files sss
shadow:     files sss
group:      files sss
…
services:   files sss
…

另外,

/etc/pam.d/system-auth 

也得到了更新,增加了对 pam_sss 模块的调用:

auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_fprintd.so
auth        [default=1 ignore=ignore success=ok] pam_succeed_if.so uid >= 1000 quiet
auth        [default=1 ignore=ignore success=ok] pam_localuser.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.soaccount     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.sopassword    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.sosession     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

我们在后面还会进一步修改 PAM 配置,此处显示的不是最终结果。

配置 SSSD

在告知 Linux 操作系统需要使用 SSSD 来解析用户属性之后,显然我们需要配置 SSSD,使其可以顺利查询 Active Directory 获得用户的账户信息。

SSSD 的配置文件是

/etc/sssd/sssd.conf

初始情况下这个文件可能不存在。创建这个文件时需要注意其所有者 (root:root) 和访问权 (600) 的设定,如果设定错误则后面 SSSD 的服务将无法正常启动和运行。

创建 sssd.conf 并设定其所有者和访问权:

[root@eda01 xmsguan]# touch /etc/sssd/sssd.conf
[root@eda01 xmsguan]# ll /etc/sssd
total 8
drwx--x--x. 2 sssd sssd 4096 Apr 24 11:48 conf.d
drwx--x--x. 2 root root 4096 Apr 24 11:48 pki
-rw-r--r--. 1 root root    0 Jun 22 05:16 sssd.conf
[root@eda01 xmsguan]# chmod 600 /etc/sssd/sssd.conf
[root@eda01 xmsguan]# ll /etc/sssd
total 8
drwx--x--x. 2 sssd sssd 4096 Apr 24 11:48 conf.d
drwx--x--x. 2 root root 4096 Apr 24 11:48 pki
-rw-------. 1 root root    0 Jun 22 05:16 sssd.conf
[root@eda01 xmsguan]#

编辑 sssd.conf 文件的内容,使得 SSSD 可以正确地向 AD 发起用户信息查询并获得其 POSIX 属性。下面的例子显示了编辑完成以后的 sssd.conf 文件的全部内容:

[root@eda01 xmsguan]# cat /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
domains = ad.company.com
services = nss, pam
#default_domain_suffix = AD.COMPANY.COM[nss][domain/ad.company.com]
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
#enumerate = true
#debug_level=10# defines user/group schema type
ldap_schema = ad# using explicit POSIX attributes in the Windows entries
ldap_id_mapping = False# caching credentials
cache_credentials = true# access controls
ldap_access_order = expire
ldap_account_expire_policy = ad
ldap_force_upper_case_realm = true# performance
ldap_referrals = false[root@eda01 xmsguan]#

注意在上面的配置里,我们将 ldap_id_mapping 的值设为 False. SSSD 提供一种动态生成用户 UID 的方法。我们不希望使用动态生成的 UID, 而是要求使用写入用户 POSIX 属性 uidNumber 里的值作为用户的 Linux UID.

另外,我们通过将 cache_credentials 参数设置为 true, 打开了 SSSD 的缓冲功能,使得用户重复登录时主机可以减少重复执行 AD 查询的次数。

完成上述配置以后,就可以启动 sssd 服务了。注意我们说过 SSSD 是以服务守护进程的形式存在的,所以配置文件改动后需要重启服务才能生效。

[root@eda01 xmsguan]# systemctl restart sssd

验证 SSSD 配置

一旦 SSSD 正常运转,NSS 也配置正确,则通过命令 “id” 就可以看到一个非本地用户的信息,就像用同样的命令可以从 /etc/passwd 里抽取本地用户的信息一样。此时应该使用 id 命令确认SSSD 可以获取用户信息:

[root@eda01 sssd]# id testuser
uid=2002(testuser) gid=100(users) groups=100(users)

可以看到,我们在前文中显示的 testuser 的 POSIX 属性被顺利映射成了 Linux UID, 和 GID

注意,如果查询失败需要排查错误,除了 SSSD 可能配置出错以及之前的测试 LDAP 查询可能出错以外,另一个可能出错的地方是被查询用户的 POSIX 属性没有正确设置。

如果 id 命令能够正常返回非本地用户的信息,则说明 SSSD 配置正确,主机可以利用 AD 域控制器来登录组织内的用户。

针对 AFS 进一步配置 PAM

如果读者使用的不是 AFS 系统,而是 NFS 或者 SMB 等其他网络文件系统,则不需要再执行本步骤。

对于以 AFS 文件系统提供用户个人 $HOME目录的组织,完成上述主机配置以后,仍然需要执行本步骤以完成客户端主机的配置。

我们已经完成了 AFS 客户端的配置,允许本地用户手动登录和访问 AFS.

我们已经通过配置 SSSD 和 PAM 实现了 Linux 在登录非本地用户时对其身份的验证。这相当于在用户登录 Linux 时,系统自动为其执行前文 提到的 kinit 命令.

我们也已经通过配置 SSSD 和 NSS 实现了在 Linux 完成非本地用户的身份验证以后,自动从 AD 里抽取用户的 POSIX 属性的目标。特别的,Linux 会获得其在 /afs 下的个人目录(unixHomeDirectory) 的路径地址,并尝试在登录完成时将用户放置于该目录下。

然而如果我们止步于此,则会在用户登录时遇到一个错误,系统在尝试将用户放置于其个人目录下时,无法获得访问其个人 AFS 目录的权限,为什么呢?原来Linux 主机还没有为用户获得 AFS token.

在前文中我们已经介绍过 AFS token 的含义,以及手动登录获取 AFS token 的命令 aklog. 我们的配置虽然已经能够完成对用户身份的验证,却还缺少手动登录中的第二步,即在执行 kinit 命令以后,还需要使用 aklog 命令获取用户的 AFS token.

我们目前的情况相当于付了钱并出示了身份证(Kerberos),得到了车厢和座位号 (unixHomeDirectory),但还没有实际取得火车票 (AFS token)。我们只需要再去取个票。

如何做到这一点呢?只需要对 PAM 配置文件稍作改动,增加一个模块调用 aklog 命令。这个模块叫做 pam_afs_session, 最初由斯坦福大学的系统管理员 Russ Albery 开发。它的目的很简单,就是在 PAM 栈里增加一个动作 —— 在Kerberos (SSSD) 完成身份验证、获取了用户的 Kerberos Ticket (Ticket Granting Ticket) 以后,继续执行 aklog 命令,以已经获取的 Kerberos Ticket为凭据,为用户获取 AFS token。简单理解,这个模块就是一个取票代理。

为此,我们需要安装 pam_afs_session 模块。这个模块在 Red Hat/CentOS 标准源里已经存在多年。

[root@client1 pam.d]# yum install pam_afs_session

安装完成以后,需要修改 PAM 配置,调用该模块为我们获取 AFS token.

如前所述,配置 PAM 需要特别小心,除非管理员能轻易地访问主机的本地 Console,否则在大部分远程登录的情况下,为了防止出现错误后将所有用户包括管理员本人锁在登录环境以外,管理员应该预先做到如下两条:

  1. 对 /etc/pam.d 目录做一个整体备份,比如将其打包成一个 .tar 文件放在个人目录下。
  2. 额外增加一个 root 登录窗口放在旁边。如果配置测试失败,还可以通过这个登录窗口恢复上述备份。

做到上述两点以后,就可以修改 /etc/pam.d/ 下的文件内容了。

以 CentOS或者 RHEL 系统为例,我们需要修改的是如下两个文件的内容:

/etc/pam.d/system-auth
/etc/pam.d/password-auth

注意这两个文件可能是指向 SSSD 配置目录下的符号链接(symbolic link)。这种情况下我们修改的将是符号链接指向的源文件的内容。上述两个文件的修改方式完全相同,所以我们只描述第一个文件的修改步骤。

打开

/etc/pam.d/system-auth

文件,找到之前配置 SSSD 时增加的一行:

auth        sufficient    pam_sss.so forward_pass

将其修改为如下两行:

auth        [success=ok default=1]    pam_sss.so forward_pass
auth        [default=done] pam_afs_session.so program=/usr/bin/aklog

然后找到之前配置 SSSD 时增加的一行:

session     optional      pam_sss.so

保持其不变,并在其后增加一行,即变成

session     optional      pam_sss.so
session     required      pam_afs_session.so program=/usr/bin/aklog

对 /etc/pam.d/password-auth 做同样的修改

登录验证

完成上述所有配置步骤以后,我们用在预备条件中已经准备好的一个 AFS 账号(非本地用户)登录 Linux 主机。

下面这个例子以 testuser 为用户名登录一台叫 eda01 的服务器,并且在登录之后查看当前目录及环境变量的值,并确定 AFS token:

login as: testuser
testuser@172.16.1.21's password:
Last login: Mon Jun 29 08:35:06 2020 from 172.16.255.254
[testuser@eda01 ~]$ pwd
/afs/hq.company.com/user/t/testuser
[testuser@eda01 ~]$ echo $SHELL
/bin/bash
[testuser@eda01 ~]$ echo $HOME
/afs/hq.company.com/user/t/testuser
[testuser@eda01 ~]$ id testuser
uid=2002(testuser) gid=100(users) groups=100(users)
[testuser@eda01 ~]$ tokensTokens held by the Cache Manager:User's (AFS ID 2002) rxkad tokens for hq.company.com [Expires Jun 29 18:36]--End of list--
[testuser@eda01 ~]$ touch test
[testuser@eda01 ~]$ ls -l
total 0
-rw-r--r--. 1 testuser users 0 Jun 29 08:40 test
[testuser@eda01 ~]$

可以看到,非本地用户 testuser 可以顺利登录该 Linux 主机并获得 AFS token,其登录之后就被置于自己的 AFS Home 目录下,且登录后得到的 Shell 是自己偏好的 Bash. 当其查看自己目录下的文件时,系统可以正确地显示文件的所有者,而不是显示 AFS ID 整数。

至此我们就完成了一个 AFS 客户端的基本配置。可以看到,当组织内每一台应用服务器都按照这样的方式配置时,用户登录任何一台应用服务器都可以使用同样的密码和用户名,登录以后看到同样的环境和目录。账户的管理不是通过修改每一台服务器上的 /etc/passwd 文件实现,而是通过修改域账号和 AFS 账号统一进行,这样就实现了用户账户的统一管理。


http://chatgpt.dhexx.cn/article/ISVLEjhn.shtml

相关文章

linux 7 realm,系统运维|Samba 系列(十五):用 SSSD 和 Realm 集成 Ubuntu 到 Samba4 AD DC...

本教程将告诉你如何将 Ubuntu 桌面版机器加入到带有 SSSD 和 Realm 服务的 Samba4 活动目录域中,以在活动目录中认证用户。 要求: 第 1 步:初始配置 1、 在把 Ubuntu 加入活动目录前确保主机名被正确设置了。使用 hostnamectl 命令设置机器名字或者手动编辑 /etc/hostname 文…

linux的sssd服务,使用FreeIPA为SS信任用户在SSSD上设置默认登录Shell

本文介绍使用FreeIPA为SS信任用户在SSSD上设置默认登录Shell的方法。 前言 IPA身份管理服务器提供与Microsoft Active Directory的双向用户身份和密码同步&#xff0c;但是在配置IPA和Active Directory之后&#xff0c;用户的默认shell是/bin/sh&#xff0c;本文将讨论如何在Fr…

freeipa 客户端 Kerberos认证 SSSD关系

参考资料&#xff1a; Documentation - FreeIPA Kerberos - FreeIPA SSSD Architecture - sssd.io Password management — MIT Kerberos Documentation https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a freeIPA中kerberos跟LDAP是怎…

集成OpenLDAP与Kerberos实现统一认证(二):基于SSSD同步LDAP账号

文章目录 1. 写作背景2. 既定目标3. 工作原理4. 安装操作4.1 创建SSSD的Bind DN4.2 安装软件包4.3 使用authconfig配置SSSD4.4 其他必要配置项4.5 配置SSH4.6 重启服务4.7 登录验证 附录&#xff1a;常见错误 1. 写作背景 写作本系列文章的背景是我们要在大数据平台/企业数据湖…

从网易云、QQ音乐下载音乐

声明&#xff1a;对于热爱音乐的人&#xff0c;还是要支持作者&#xff0c;通过付费购买正版音乐&#xff0c;这样作者才有动力创造更好的音乐给大家。 这种方法下载音乐可能很多人都知道了&#xff0c;但可能还有一些小伙伴不知道&#xff0c;所以在这里分享一下。 1.打开火狐…

3分钟下载好网易云付费音乐

学习笔记 下载网易云付费音乐 无需编程&#xff0c;三分钟下载好你想听的付费音乐&#xff0c;比如下载李荣浩的《不将就》&#xff1a; 第一步&#xff1a; 打开网址&#xff1a;不将就 第二步&#xff1a; 按直接按F12快捷键&#xff0c;如下图 。点击控制台的Network&…

网易云音乐产品体验报告

一、体验环境 体验产品 网易云音乐 软件版本 V5.8.2 手机系统 iOS 14.1 体验时间 2021-2-6 体验人 普翩 二、产品定位 slogan&#xff1a;音乐的力量 产品定位&#xff1a;音乐社交 三、用户需求分析 3.1.用户画像 用户性别比例图3.1 用户城市分布图3.2 用户兴趣分…

付费率第一 亏损显著收窄 网易云音乐将实现盈利?

网易云音乐即将登陆港交所。 8 月 1 日&#xff0c;香港联交所网站显示&#xff0c;网易云音乐已正式通过港交所上市聆讯&#xff0c;并披露了聆讯后资料集。 招股文件显示&#xff0c; 2018 年— 2020 年网易云音乐营收分别为11. 48 亿元、23. 18 亿元、48. 96 亿元&#xff…

尚硅谷微信小程序开发 仿网易云音乐App 小程序 后端接口服务器搭建

目录 小程序学习 视频相关的教程文档与笔记分享 配套服务器 源码地址&#xff1a; 接口使用说明文档 接口列表 启动服务 测试服务启动OK网页 http://localhost:3000/test.html​编辑 Postman测试服务器接口 postman配置 服务ip地址全局变量 ​编辑选择全局变量 登录…

网易云解析接口PHP源码,网易云音乐直链解析API源代码^-^

前盐 网易云网页版自带 API,但是点击字后会自动跳转到 mp3 资源播放,这样很不屌.于是咱们就封装一个吧. API 网易云的 API 为 我这个主题会把网易云的音乐链接自动变成 MP3 所以弄个图片 歌曲 ID 是什么?呐,就是这个. 源码 新建个 PHP 文件. $id = @$_GET[id]; if (empty($id)…

JAVA代码实现下载解析网易云音乐到本地电脑的demo示例

1.PC浏览器打开网易云音乐官网&#xff0c;搜索你想要下载的歌曲名称或者歌手姓名 2.点开你要下载歌曲&#xff0c;进入播放页&#xff0c;从浏览器地址栏里获得歌曲的songID。 3.pom文件引入依赖 <!-- hutool工具类--><dependency><groupId>cn.hutool</…

python爬取付费音乐包_用Python代码来下载任意指定网易云歌曲(超详细版)

前两天教了大家如何在控制台上找到真实的mp3播放地址,但是不可以下载付费的,因为只能下载可播放的歌曲。至于怎样下载付费网易云音乐,还是开个会员吧,要知道免费是最贵的的这个道理。 有粉丝看了前两天文章想用代码来装逼,我就为了满足他,特意去折腾了两天,终于写出来了…

电脑网易云音乐,网易云音乐的橄榄枝来了?

作为舒缓压力、愉悦身心的方式之一&#xff0c;音乐在人们的生活中扮演着越来越重要的角色。据艾媒咨询数据显示&#xff0c;2020年中国的手机音乐客户端用户规模达到6.18亿人&#xff0c;数字音乐市场规模也呈快速增长态势&#xff0c;预计到2022年将会达到482.7亿元。 市场规…

网易云音乐转码_网易云音乐产品分析报告

【网易云音乐】产品分析报告 产品基本信息 产品名称 网易云音乐 产品版本 Android V6.4.5 体验环境 Android 6.0.1 体验时间 2019.11.3 体验者 suing 二.市场背景 1.行业背景&#xff1a; 根据《第44次中国互联网络发展状况统计报告》调查显示&#xff0c;截止2019年6月&#…

三步教你手动破解网易云音乐加密

文章目录 第一步 缓存歌曲第二步 找到文件第三步 解密文件 第一步 缓存歌曲 首先打开网易云音乐随便缓存一首需要付费下载的歌曲 比如这一首 如果你想要下载是需要付费的 第二步 找到文件 点开设置->下载设置 找到缓存目录 按照修改日期排序 找到符合修改时间的那一项 后缀…

网易云音乐android变臃肿,网易云音乐,你变成了我最讨厌的模样

原标题:网易云音乐,你变成了我最讨厌的模样 今天,我卸载了网易云音乐,这个我用了4年的音乐app。虽然我曾经很喜欢用网易云,但现在真的是“累觉不爱”了。 你问我为什么卸载? 是的,网易云音乐下架了我伦的所有歌曲,但这只是其中的一个原因,更重要的原因是,网易云在没有…

网易云音乐服务器code521,宝塔面板部署网易云音乐无版权服务器

项目的原理介绍 我们听歌的时候是从网络上获取资源的&#xff0c;大部分情况下&#xff0c;网络资源都是一个链接。 网易云大部分歌曲的链接是music.163.com或者interface.music.163.com&#xff0c;在获取资源的时候识别到是无版权或者是付费歌曲&#xff0c;就会从其他音乐平…

在 Mac 端获取【网易云音乐】付费音乐的播放地址(注意下载要坚决支持正版!)

在网易云音乐下载付费音乐&#xff0c;如果你是未付费人员会弹出如下的提示&#xff1a; 出于好奇&#xff0c;感觉音乐既然已经能够试听肯定是有有效的下载地址&#xff0c;只是在下载的时候做了权限判断&#xff0c;既然有地址那怎么去获取呢&#xff1f; 首先查看下 云音乐 …

java 爬虫 抓取 网易云音乐

大家好&#xff0c;我是烤鸭&#xff1a; 今天和大家交流一下爬虫&#xff0c;抓取网易云音乐。只讨论技术&#xff0c;不提倡其他的。 1. 找音乐源地址 谷歌浏览器 F12 &#xff0c;找请求类型是 Media的。 2. 找请求链接 切换请求类型到 All&#xff0c;看 Respons…

网易云音乐linux版_全线下架:网易云音乐难解的困境

文丨锌刻度记者 许伟 编辑|杨靖怡 1.体验也好、功能也罢,音乐资源始终才是平台留住用户的根本。 2.网易云音乐曾经尝试从直播和社交双向出发,探索从侧面再次突围的可能性。 3.对于网易云音乐来说,唯有加大版权购买力度才能保持竞争优势,但这意味着更高的成本。 6月29日,网…