更新升级 专属应用 系统故障 硬件故障 电脑汽车 鸿蒙刷机 鸿蒙开发Linux教程 鸿蒙开发Linux命令
当前位置:HMXT之家 > 鸿蒙开发Linux教程 > 在Ubuntu 22.04上配置LDAP、SSSD和Kerberos身份验证

在Ubuntu 22.04上配置LDAP、SSSD和Kerberos身份验证

更新时间:2023-04-14 09:47:39浏览次数:326+次

我们可以在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身份验证成功完成了。