在Ubuntu 22.04上配置LDAP、SSSD和Kerberos身份验证
我们可以在Linux系统上同时使用LDAP、SSSD和Kerberos来提供与Active Directory类似的功能。在本指南中,我们将深入了解在Ubuntu 22.04/20.04/18.04上配置LDAP、SSSD和Kerberos身份验证。在这里,LDAP将用于用户和组,Kerberos将用于身份验证。
本指南要求您具备以下内容
针对用户和组的现有OpenLDAP服务器安装,具有RFC2307架构。建议使用SSL支持,但并非绝对必要,因为此设置中的身份验证是通过Kerberos而不是LDAP进行的。
Kerberos服务器,它不必使用OpenLDAP后端。
我们将在其中安装和配置SSSD以进行身份验证的客户端主机。
我的环境设置如下所示,以下是任务、服务器名称和IP地址:
LDAP Server——ldap.computingforgeeks.com——192.168.205.2
Kerberos Server——krb5.computingforgeeks.com ——192.168.205.22
Client(Ubuntu)——client1.computingforgeeks.com——192.168.205.11
请记住,LDAP和Kerberos不需要位于同一台服务器上,它们可以单独运行。配置好环境后,按如下所示进行操作。
在Ubuntu 22.04上配置LDAP、SSSD和Kerberos身份验证的步骤
步骤1、安装和配置LDAP服务器
LDAP服务器将用于提供用户和组。在服务器上设置主机名:
sudo hostnamectl set-hostname ldap.computingforgeeks.com
现在将域名添加到/etc/hosts文件中:
$ sudo vim /etc/hosts
192.168.205.11 ldap.computingforgeeks.com
现在,设置LDAP服务器,下面是可以用来设置LDAP服务器的指南:
在Rocky Linux 8/AlmaLinux 8上安装和配置OpenLDAP服务器:https://www.hmxthome.com/linux/4954.html
一旦安装了服务器,我们将创建一个简单的用户进行测试。LDIF文件将包含:
一个名为People的节点(用于存储用户)。
一个名为Groups的节点(用于存储组)。
一个名为Engineering的组织。
一个叫john的用户。
创建文件,如下所示:
vim adduser2.ldif
将以下行添加到文件中:
dn: uid=john,ou=People,dc=computingforgeeks,dc=com
uid: john
objectClass: inetOrgPerson
objectClass: posixAccount
cn: John Smith
sn: Smith
givenName: John
mail: john@computingforgeeks.com
uidNumber: 10001
gidNumber: 10001
loginShell: /bin/bash
homeDirectory: /home/john
dn: cn=john,ou=Group,dc=computingforgeeks,dc=com
cn: john
objectClass: posixGroup
gidNumber: 10001
memberUid: john
dn: cn=Engineering,ou=Group,dc=computingforgeeks,dc=com
cn: Engineering
objectClass: posixGroup
gidNumber: 10100
memberUid: john
现在使用命令添加内容:
$ sudo ldapadd -x -D cn=Manager,dc=computingforgeeks,dc=com -W -f adduser2.ldif
Enter LDAP Password:
adding new entry "uid=john,ou=People,dc=computingforgeeks,dc=com"
adding new entry "cn=john,ou=Group,dc=computingforgeeks,dc=com"
adding new entry "cn=Engineering,ou=Group,dc=computingforgeeks,dc=com"
验证是否已添加信息:
$ ldapsearch -x -LLL -b dc=computingforgeeks,dc=com '(uid=john)' cn gidNumber
dn: uid=john,ou=People,dc=computingforgeeks,dc=com
cn: John Smith
gidNumber: 10001
在创建用户时,我们设置并没有设置密码,我们希望Kerberos在这种情况下为用户提供登录密码。
步骤2、安装和配置Kerberos服务器
所需的服务器,在本例中是Ubuntu 22 server,我们将首先在系统上设置主机名:
sudo hostnamectl set-hostname krb5.computingforgeeks.com
将域名添加到/etc/hosts文件中:
$ sudo vim /etc/hosts
192.168.205.22 krb5.computingforgeeks.com krb5
现在安装KDC Kerberos服务器:
sudo apt install krb5-kdc krb5-admin-server krb5-config -y
然后简单配置一下就可以了,设置Kerberos服务器及设置管理服务器(krb5.computingforgeeks.com)。一旦安装完成,服务器将无法启动。别担心。只需继续并配置即可。以下是配置Kerberos服务器的内容。
创建一个新的Realm并设置一个用于加密本地数据库的强密码:
sudo krb5_newrealm
按以下进行填写,如下:
This script should be run on the master KDC/admin server to initialize a Kerberos realm. It will ask you to type in a master key password.
This password will be used to generate a key that is stored in /etc/krb5kdc/stash. You should try to remember this password, but it is much more important that it be a strong password than that it be remembered. However, if you lose the password and /etc/krb5kdc/stash,you cannot decrypt your Kerberos database.
Loading random data Initializing database '/var/lib/krb5kdc/principal' for realm 'COMPUTINGFORGEEKS.COM',master key name 'K/M@COMPUTINGFORGEEKS.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: Set master key here Re-enter KDC database master key to verify: Re-enter master key here
现在为Kerberos创建一个管理用户主体。使用以下命令登录:
$ sudo kadmin.local
Authenticating as principal root/admin@COMPUTINGFORGEEKS.COM with password.
kadmin.local:
创建一个名为ubuntu的主体:
kadmin.local: addprinc ubuntu/admin
WARNING: no policy specified for ubuntu/admin@COMPUTINGFORGEEKS.COM; defaulting to no policy
Enter password for principal "ubuntu/admin@COMPUTINGFORGEEKS.COM": Enter-Password-Here
Re-enter password for principal "ubuntu/admin@COMPUTINGFORGEEKS.COM": Re-enter-Password-Here
Principal "ubuntu/admin@COMPUTINGFORGEEKS.COM" created.
为用户设置密码,将服务器添加到数据库中,并为主机创建密钥选项卡文件:
kadmin.local: addprinc -randkey host/krb5.computingforgeeks.com
kadmin.local: ktadd host/krb5.computingforgeeks.com
退出实用工具:
quit
将主体添加到访问控制列表中。编辑以下文件:
sudo vim /etc/krb5kdc/kadm5.acl
在文件中,添加以下行:
ubuntu/admin *
保存更改并重新启动Kerberos服务:
sudo systemctl restart krb5-admin-server.service
现在该服务应该运行:
$ systemctl status krb5-admin-server.service
krb5-admin-server.service - Kerberos 5 Admin Server
Loaded: loaded (/lib/systemd/system/krb5-admin-server.service; enabled; vendor preset: enabled)
测试主要用户:
$ kinit ubuntu/admin
Password for ubuntu/admin@COMPUTINGFORGEEKS.COM:
列出有关Ticket Granting Ticket (TGT)的信息:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: ubuntu/admin@COMPUTINGFORGEEKS.COM
现在,Ubuntu 22.04/20.04/18.04上的Kerberos Realm已准备好对客户端进行身份验证。
步骤3、在Ubuntu上安装和配置SSSD
为了使客户端能够对用户和组使用LDAP,并对Kerberos进行身份验证,您需要配置SSD。但首先,在客户端计算机上设置域名:
sudo hostnamectl set-hostname client1.computingforgeeks.com
编辑/etc/hosts文件以适应Kerberos和LDAP服务器:
$ sudo vim /etc/hosts
192.168.205.2 ldap.computingforgeeks.com ldap
192.168.205.22 krb5.computingforgeeks.com krb5
192.168.205.11 client1.computingforgeeks.com
现在安装所有必需的软件包:
sudo apt update && sudo apt install sssd-ldap sssd-krb5 ldap-utils krb5-user libpam-sss libnss-sss sssd-krb5 -y
在安装过程中,您需要进行包括设置Kerberos服务器域名(computingforgeks.com)在内的设置。然后设置Kerberos服务器及管理服务器为(krb5.computingforgeks.com):
使用创建的管理员主体登录:
$ kinit ubuntu/admin
kinit admin@COMPUTINGFORGEEKS.COM
Password for ubuntu/admin@COMPUTINGFORGEEKS.COM:
使用以下命令获取tickets:
ubuntu@client1:~$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: ubuntu/admin@COMPUTINGFORGEEKS.COM
由于我们希望以具有Kerberos身份验证的LDAP用户身份登录到系统,因此我们将继续通过创建如下配置文件来配置SSSD:
sudo vim /etc/sssd/sssd.conf
按如下方式编辑文件:
[sssd]
config_file_version = 2
domains = computingforgeeks.com
[domain/computingforgeeks.com]
id_provider = ldap
ldap_uri = ldap://ldap.computingforgeeks.com
ldap_search_base = dc=computingforgeeks,dc=com
auth_provider = krb5
krb5_server = krb5.computingforgeeks.com
#krb5_kpasswd = krb5.computingforgeeks.com
krb5_realm = COMPUTINGFORGEEKS.COM
cache_credentials = True
设置文件的权限:
sudo chmod 600 /etc/sssd/sssd.conf
设置完成后,启动并启用SSSD服务:
sudo systemctl start sssd.service
sudo systemctl enable sssd.service
验证服务是否正在运行:
$ systemctl status sssd.service
sssd.service - System Security Services Daemon
Loaded: loaded (/lib/systemd/system/sssd.service; enabled; vendor preset: enabled)
使用以下命令启用自动主目录创建:
sudo pam-auth-update --enable mkhomedir
现在,我们将使用LDAP服务器上的用户进行测试。将客户端配置为与LDAP服务器通信:
$ sudo vim /etc/ldap/ldap.conf
# TLS certificates (needed for GnuTLS)
#TLS_CACERT /etc/ssl/certs/ca-certificates.crt
URI ldap://ldap.computingforgeeks.com
BASE dc=computingforgeeks,dc=com
现在,系统应该知道我们创建的LDAP用户。检查此项,如下所示:
$ getent passwd john
john:*:10001:10001:John Smith:/home/john:/bin/bash
ubuntu@client1:~$ id john
uid=10001(john) gid=10001(john) groups=10001(john),10100(Engineering)
在将主体添加到Kerberos服务器之前,我们将无法使用此用户登录。要执行此操作,请在Kerberos服务器上使用以下命令:
sudo kadmin.local
现在添加主体:
kadmin.local: addprinc john
Enter password for principal "john@COMPUTINGFORGEEKS.COM": Set-User-Password
Re-enter password for principal "john@COMPUTINGFORGEEKS.COM": Re-enter-the-password
Principal "john@COMPUTINGFORGEEKS.COM" created.
退出会话:
kadmin.local: quit
步骤4、测试LDAP、SSSD和Kerberos身份验证
现在,我们已经在Kerberos上为用户设置了登录密码,让我们测试这是否按要求工作:
sudo login
klist
向系统提供要进行身份验证的主体(john)的密码。
样本输出:
如图所示,我们通过LDAP登录系统,提供用户和组,而Kerberos提供身份验证。要验证用户详细信息,请使用以下命令:
john@client1:~$ id john
uid=10001(john) gid=10001(john) groups=10001(john),10100(Engineering)
john@client1:~$
到这里,标志着在Ubuntu 22.04系统上配置LDAP、SSSD和Kerberos身份验证成功完成了。