Corporate needs are simple – one ring to rule them all place to get users from. On the open source path there are several ways to achieve that. Alongside ‘plain’ OpenLDAP there is also FreeIPA – which is open source and free version of the Red Hat Identity Management (IDM).
This guide will show you how to make basic FreeIPA install and connect a FreeBSD 13.1-RELEASE system to it.
The Table of Contents for this article looks as follows.
- Connect FreeBSD to FreeIPA/Red Hat Identity Management
- FreeIPA
- FreeIPA Requirements
- FreeIPA Setup
- FreeBSD Client
- FreeBSD Packages
- FreeBSD Setup
- FreeIPA/IDM Setup Part
- Finish Setup with Web Browser in FreeIPA/IDM Page
- FreeBSD FreeIPA Login Test
- FreeBSD Jail as FreeIPA/IDM Client
- Basic FreeBSD Jail Preparations
- Configure FreeBSD Jail to Connect to FreeIPA/IDM Server
- Linux FreeIPA/IDM Client
- FreeIPA/IDM Setup Part
- Linux FreeIPA/IDM Client Setup
FreeIPA
As typical CentOS is dead (yes there is CentOS Stream available but its not a RHEL clone) I have two options here. Rocky Linux and Alma Linux. I will use the latter as it seems more popular and more up to date. In this guide the FreeIPA/IDM server will hosted on the Alma Linux 8.6 system.
To make things easier I installed that Alma Linux 8.6 with single 20GB / root on the /dev/sda1 partition. No separate /boot. No LVM. Just good old plain fucking simple single raw partition for everything. Seems no one does it these days π
[root@idm ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
ββsda1 8:1 0 20G 0 part /
FreeIPA Requirements
The minimum hardware requirements for installing FreeIPA server are as follows.
RAM: 4GB CPU: 2 HDD: 10GB DNS: fully qualified domain name for FreeIPA must be resolvable from DNS server configured in system
For this installation I have used the 10.0.0.0/24 network.
The FreeIPA/IDM server will get the 10.0.0.40 IP.
The FreeIPA/IDM Linux client rhlike.vercorp.org will get the 10.0.0.41 IP.
The FreeIPA/IDM FreeBSD client fbsd.vercorp.org will get the 10.0.0.42 IP.
The FreeIPA/IDM FreeBSD client fbsdjail.vercorp.org will get the 10.0.0.43 IP.
For lack of better ideas I have used vercorp.org/VERCORP.ORG as domain/realm names and idm.vercorp.org as the FreeIPA/IDM hostname.
Details of FreeIPA/IDM idm.vercorp.org system below.
IP: 10.0.0.40/24 GW: 10.0.0.1 DNS: 1.1.1.1 hostname: idm.vercorp.org domain: vercorp.org realm: VERCORP.ORG
FreeBSD fbsd.vercorp.org system.
IP: 10.0.0.42/24 GW: 10.0.0.1 hostname: fbsd.vercorp.org
FreeBSD Jail fbsdjail.vercorp.org system.
IP: 10.0.0.43/24 GW: 10.0.0.1 hostname: fbsdjail.vercorp.org
If you are curious what is hidden in the 10.0.0.42 IP – then its a typical Alma Linux that I first used to try if the FreeIPA/IDM works at all π
FreeIPA Setup
Because Anaconda is far from being a usable installer – this is how the only enp0s3 interface config looks like after manual intervention.
[root@idm ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
NAME=enp0s3
DEVICE=enp0s3
TYPE=Ethernet
BOOTPROTO=none
UUID=b49cd1ab-d3eb-421d-b408-c052acc077da
ONBOOT=yes
IPADDR=10.0.0.40
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
IPV6INIT=no
DNS1=1.1.1.1
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
Before we will go into setup procedures – we will update that Alma Linux system.
[root@idm ~]# yum update -y [root@idm ~]# reboot
After the reboot we will disable the IPv6 stack for main interface (enp0s3) as FreeIPA installer has some problem with it. We do not need IPv6 here anyway so …
[root@idm ~]# cat << EOF >> /etc/sysctl.conf
# DISABLE IPv6 FOR MAIN enp0s3 INTERFACE
net.ipv6.conf.enp0s3.disable_ipv6=1
EOF
Lets set our FreeIPA/IDM hostname if we missed that at the Anaconda installer part. We will also setup the system time zone.
[root@idm ~]# hostnamectl set-hostname idm.vercorp.org [root@idm ~]# hostnamectl Static hostname: idm.vercorp.org Icon name: computer-vm Chassis: vm Machine ID: b8bfb8bcc23147eb9cc7b62c72a09c32 Boot ID: 06158ef430d9467d959076ab4396314e Virtualization: oracle Operating System: AlmaLinux 8.6 (Sky Tiger) CPE OS Name: cpe:/o:almalinux:almalinux:8::baseos Kernel: Linux 4.18.0-372.26.1.el8_6.x86_64 Architecture: x86-64 [root@idm ~]# timedatectl set-timezone Europe/Warsaw [root@idm ~]# timedatectl set-local-rtc 0 [root@idm ~]#Β timedatectl Local time: Mon 2022-10-17 15:08:28 CEST Universal time: Mon 2022-10-17 13:08:28 UTC RTC time: Sat 2022-10-15 00:28:10 Time zone: Europe/Warsaw (CEST, +0200) System clock synchronized: yes NTP service: inactive RTC in local TZ: no
Lets add the system IP and name to the /etc/hosts file now.
[root@idm ~]# echo "$( hostname -i | awk '{print $NF}' ) $( hostname ) $( hostname -s )" >> /etc/hosts [root@idm ~]# grep idm /etc/hosts 10.0.0.40 idm.vercorp.org idm [root@idm ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.40 idm.vercorp.org idm
We need to enable the FreeIPA/IDM module in yum(8).
[root@idm ~]# yum module list idm Last metadata expiration check: 0:00:31 ago on Tue 18 Oct 2022 01:02:51 PM CEST. AlmaLinux 8 - AppStream Name Stream Profiles Summary idm DL1 adtrust, client, common [d], dns, server The Red Hat Enterprise Linux Identity Management system module idm client [d] common [d] RHEL IdM long term support client module Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled [root@idm ~]# yum module enable idm:DL1 -y Last metadata expiration check: 0:01:06 ago on Tue 18 Oct 2022 01:02:51 PM CEST. Dependencies resolved. ===================================================================================================== Package Architecture Version Repository Size ===================================================================================================== Enabling module streams: 389-ds 1.4 httpd 2.4 idm DL1 pki-core 10.6 pki-deps 10.6 Transaction Summary ===================================================================================================== Complete!
Some additional step needed.
[root@idm ~]# yum distro-sync
Last metadata expiration check: 0:10:07 ago on Mon 17 Oct 2022 03:14:32 PM CEST.
Dependencies resolved.
Nothing to do.
Complete!
We will now install FreeIPA/IDM with DNS as this setup is the most simplistic one. We focus on FreeBSD part here in that article.
[root@idm ~]# yum install -y bind-utils chrony nc [root@idm ~]# yum module install idm:DL1/dns -y
One can use the ‘interactive’ installer and answer ‘by hand’ for all the asked questions – but to be honest I prefer to type my command once and make it ‘happen’ altogether without my time wasted.
As you probably guessed – we will use the unattended mode for the FreeIPA/IDM installer.
[root@idm ~]# ipa-server-install \ --domain vercorp.org \ --realm VERCORP.ORG \ --reverse-zone=0.0.10.in-addr.arpa. \ --no-forwarders \ --no-ntp \ --setup-dns \ --ds-password [password] \ --admin-password [password] \ --unattended Checking DNS domain 0.0.10.in-addr.arpa., please wait ... The log file for this installation can be found in /var/log/ipaserver-install.log ============================================================================== This program will set up the IPA Server. Version 4.9.8 This includes: * Configure a stand-alone CA (dogtag) for certificate management * Create and configure an instance of Directory Server * Create and configure a Kerberos Key Distribution Center (KDC) * Configure Apache (httpd) * Configure DNS (bind) * Configure SID generation * Configure the KDC to enable PKINIT Excluded by options: * Configure the NTP client (chronyd) Warning: skipping DNS resolution of host idm.vercorp.org Checking DNS domain vercorp.org., please wait ... Checking DNS domain 0.0.10.in-addr.arpa., please wait ... Checking DNS domain 0.0.10.in-addr.arpa., please wait ... Using reverse zone(s) 0.0.10.in-addr.arpa. Trust is configured but no NetBIOS domain name found, setting it now. The IPA Master Server will be configured with: Hostname: idm.vercorp.org IP address(es): 10.0.0.40 Domain name: vercorp.org Realm name: VERCORP.ORG The CA will be configured with: Subject DN: CN=Certificate Authority,O=VERCORP.ORG Subject base: O=VERCORP.ORG Chaining: self-signed BIND DNS server will be configured to serve IPA domain with: Forwarders: No forwarders Forward policy: only Reverse zone(s): 0.0.10.in-addr.arpa. Disabled p11-kit-proxy Configuring directory server (dirsrv). Estimated time: 30 seconds [1/41]: creating directory server instance Validate installation settings ... Create file system structures ... Perform SELinux labeling ... Create database backend: dc=vercorp,dc=org ... Perform post-installation tasks ... [2/41]: tune ldbm plugin [3/41]: adding default schema [4/41]: enabling memberof plugin [5/41]: enabling winsync plugin [6/41]: configure password logging [7/41]: configuring replication version plugin [8/41]: enabling IPA enrollment plugin [9/41]: configuring uniqueness plugin [10/41]: configuring uuid plugin [11/41]: configuring modrdn plugin [12/41]: configuring DNS plugin [13/41]: enabling entryUSN plugin [14/41]: configuring lockout plugin [15/41]: configuring topology plugin [16/41]: creating indices [17/41]: enabling referential integrity plugin [18/41]: configuring certmap.conf [19/41]: configure new location for managed entries [20/41]: configure dirsrv ccache and keytab [21/41]: enabling SASL mapping fallback [22/41]: restarting directory server [23/41]: adding sasl mappings to the directory [24/41]: adding default layout [25/41]: adding delegation layout [26/41]: creating container for managed entries [27/41]: configuring user private groups [28/41]: configuring netgroups from hostgroups [29/41]: creating default Sudo bind user [30/41]: creating default Auto Member layout [31/41]: adding range check plugin [32/41]: creating default HBAC rule allow_all [33/41]: adding entries for topology management [34/41]: initializing group membership [35/41]: adding master entry [36/41]: initializing domain level [37/41]: configuring Posix uid/gid generation [38/41]: adding replication acis [39/41]: activating sidgen plugin [40/41]: activating extdom plugin [41/41]: configuring directory to start on boot Done configuring directory server (dirsrv). Configuring Kerberos KDC (krb5kdc) [1/10]: adding kerberos container to the directory [2/10]: configuring KDC [3/10]: initialize kerberos container [4/10]: adding default ACIs [5/10]: creating a keytab for the directory [6/10]: creating a keytab for the machine [7/10]: adding the password extension to the directory [8/10]: creating anonymous principal [9/10]: starting the KDC [10/10]: configuring KDC to start on boot Done configuring Kerberos KDC (krb5kdc). Configuring kadmin [1/2]: starting kadmin [2/2]: configuring kadmin to start on boot Done configuring kadmin. Configuring ipa-custodia [1/5]: Making sure custodia container exists [2/5]: Generating ipa-custodia config file [3/5]: Generating ipa-custodia keys [4/5]: starting ipa-custodia [5/5]: configuring ipa-custodia to start on boot Done configuring ipa-custodia. Configuring certificate server (pki-tomcatd). Estimated time: 3 minutes [1/29]: configuring certificate server instance [2/29]: stopping certificate server instance to update CS.cfg [3/29]: backing up CS.cfg [4/29]: Add ipa-pki-wait-running [5/29]: secure AJP connector [6/29]: reindex attributes [7/29]: exporting Dogtag certificate store pin [8/29]: disabling nonces [9/29]: set up CRL publishing [10/29]: enable PKIX certificate path discovery and validation [11/29]: authorizing RA to modify profiles [12/29]: authorizing RA to manage lightweight CAs [13/29]: Ensure lightweight CAs container exists [14/29]: Ensuring backward compatibility [15/29]: starting certificate server instance [16/29]: configure certmonger for renewals [17/29]: requesting RA certificate from CA [18/29]: publishing the CA certificate [19/29]: adding RA agent as a trusted user [20/29]: configure certificate renewals [21/29]: Configure HTTP to proxy connections [22/29]: updating IPA configuration [23/29]: enabling CA instance [24/29]: importing IPA certificate profiles [25/29]: migrating certificate profiles to LDAP [26/29]: adding default CA ACL [27/29]: adding 'ipa' CA entry [28/29]: configuring certmonger renewal for lightweight CAs [29/29]: deploying ACME service Done configuring certificate server (pki-tomcatd). Configuring directory server (dirsrv) [1/3]: configuring TLS for DS instance [2/3]: adding CA certificate entry [3/3]: restarting directory server Done configuring directory server (dirsrv). Configuring ipa-otpd [1/2]: starting ipa-otpd [2/2]: configuring ipa-otpd to start on boot Done configuring ipa-otpd. Configuring the web interface (httpd) [1/22]: stopping httpd [2/22]: backing up ssl.conf [3/22]: disabling nss.conf [4/22]: configuring mod_ssl certificate paths [5/22]: setting mod_ssl protocol list [6/22]: configuring mod_ssl log directory [7/22]: disabling mod_ssl OCSP [8/22]: adding URL rewriting rules [9/22]: configuring httpd Nothing to do for configure_httpd_wsgi_conf [10/22]: setting up httpd keytab [11/22]: configuring Gssproxy [12/22]: setting up ssl [13/22]: configure certmonger for renewals [14/22]: publish CA cert [15/22]: clean up any existing httpd ccaches [16/22]: enable ccache sweep [17/22]: configuring SELinux for httpd [18/22]: create KDC proxy config [19/22]: enable KDC proxy [20/22]: starting httpd [21/22]: configuring httpd to start on boot [22/22]: enabling oddjobd Done configuring the web interface (httpd). Configuring Kerberos KDC (krb5kdc) [1/1]: installing X509 Certificate for PKINIT Done configuring Kerberos KDC (krb5kdc). Applying LDAP updates Upgrading IPA:. Estimated time: 1 minute 30 seconds [1/10]: stopping directory server [2/10]: saving configuration [3/10]: disabling listeners [4/10]: enabling DS global lock [5/10]: disabling Schema Compat [6/10]: starting directory server [7/10]: upgrading server [8/10]: stopping directory server [9/10]: restoring configuration [10/10]: starting directory server Done. Restarting the KDC dnssec-validation yes Configuring DNS (named) [1/12]: generating rndc key file [2/12]: adding DNS container [3/12]: setting up our zone [4/12]: setting up reverse zone [5/12]: setting up our own record [6/12]: setting up records for other masters [7/12]: adding NS record to the zones [8/12]: setting up kerberos principal [9/12]: setting up named.conf created new /etc/named.conf created named user config '/etc/named/ipa-ext.conf' created named user config '/etc/named/ipa-options-ext.conf' created named user config '/etc/named/ipa-logging-ext.conf' [10/12]: setting up server configuration [11/12]: configuring named to start on boot [12/12]: changing resolv.conf to point to ourselves Done configuring DNS (named). Restarting the web server to pick up resolv.conf changes Configuring DNS key synchronization service (ipa-dnskeysyncd) [1/7]: checking status [2/7]: setting up bind-dyndb-ldap working directory [3/7]: setting up kerberos principal [4/7]: setting up SoftHSM [5/7]: adding DNSSEC containers [6/7]: creating replica keys [7/7]: configuring ipa-dnskeysyncd to start on boot Done configuring DNS key synchronization service (ipa-dnskeysyncd). Restarting ipa-dnskeysyncd Restarting named Updating DNS system records Configuring SID generation [1/8]: creating samba domain object [2/8]: adding admin(group) SIDs [3/8]: adding RID bases [4/8]: updating Kerberos config 'dns_lookup_kdc' already set to 'true', nothing to do. [5/8]: activating sidgen task [6/8]: restarting Directory Server to take MS PAC and LDAP plugins changes into account [7/8]: adding fallback group [8/8]: adding SIDs to existing users and groups This step may take considerable amount of time, please wait.. Done. Configuring client side components This program will set up IPA client. Version 4.9.8 Using existing certificate '/etc/ipa/ca.crt'. Client hostname: idm.vercorp.org Realm: VERCORP.ORG DNS Domain: vercorp.org IPA Server: idm.vercorp.org BaseDN: dc=vercorp,dc=org Configured /etc/sssd/sssd.conf Systemwide CA database updated. Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub SSSD enabled Configured /etc/openldap/ldap.conf Configured /etc/ssh/ssh_config Configured /etc/ssh/sshd_config Configuring vercorp.org as NIS domain. Client configuration complete. The ipa-client-install command was successful ============================================================================== Setup complete Next steps: 1. You must make sure these network ports are open: TCP Ports: * 80, 443: HTTP/HTTPS * 389, 636: LDAP/LDAPS * 88, 464: kerberos * 53: bind UDP Ports: * 88, 464: kerberos * 53: bind 2. You can now obtain a kerberos ticket using the command: 'kinit admin' This ticket will allow you to use the IPA tools (e.g., ipa user-add) and the web user interface. 3. Kerberos requires time synchronization between clients and servers for correct operation. You should consider enabling chronyd. Be sure to back up the CA certificates stored in /root/cacert.p12 These files are required to create replicas. The password for these files is the Directory Manager password The ipa-server-install command was successful [root@idm ~]#
Seems that all went well and now we have our FreeIPA/IDM installed.
Lets check several things.
[root@idm ~]# ipactl status Directory Service: RUNNING krb5kdc Service: RUNNING kadmin Service: RUNNING named Service: RUNNING httpd Service: RUNNING ipa-custodia Service: RUNNING pki-tomcatd Service: RUNNING ipa-otpd Service: RUNNING ipa-dnskeysyncd Service: RUNNING ipa: INFO: The ipactl command was successful [root@idm ~]# systemctl list-unit-files | grep ipa | grep service ipa-ccache-sweep.service disabled ipa-custodia.service disabled ipa-dnskeysyncd.service disabled ipa-healthcheck.service disabled ipa-ods-exporter.service disabled ipa-otpd@.service static ipa.service enabled
Seems to be installed and working.
What about the /etc/sssd/sssd.conf config.
[root@idm ~]# cat /etc/sssd/sssd.conf [domain/vercorp.org] id_provider = ipa ipa_server_mode = True ipa_server = idm.vercorp.org ipa_domain = vercorp.org ipa_hostname = idm.vercorp.org auth_provider = ipa chpass_provider = ipa access_provider = ipa cache_credentials = True ldap_tls_cacert = /etc/ipa/ca.crt krb5_store_password_if_offline = True [sssd] services = nss, pam, ifp, ssh, sudo domains = vercorp.org [nss] homedir_substring = /home memcache_timeout = 600 [pam] [sudo] [autofs] [ssh] [pac] [ifp] allowed_uids = ipaapi, root [session_recording]
There is also /etc/ssh/ssh_config.d/04-ipa.conf file …
[root@idm ~]# cat /etc/ssh/ssh_config.d/04-ipa.conf
# IPA-related configuration changes to ssh_config
#
PubkeyAuthentication yes
GlobalKnownHostsFile /var/lib/sss/pubconf/known_hosts
#VerifyHostKeyDNS yes
# assumes that if a user does not have shell (/sbin/nologin),
# this will return nonzero exit code and proxy command will be ignored
Match exec true
ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h
For some reason we need to manually enable and start the Apache HTTP server.
[root@idm ~]# systemctl enable --now httpd
You can now access the FreeIPA/IDM at your browser on the http://idm.vercorp.org address. If you use the http://10.0.0.40 IP then you will be redirected to the http://idm.vercorp.org address so make sure you have added that host to your local /etc/hosts file.
On the second screen you will see that I have already created the vermaden user.
FreeBSD Client
UPDATE: Newer instructions for FreeBSD 13.2-RELEASE are available at the Connect FreeBSD 13.2 to FreeIPA/IDM article.
We will get straight into the point. After having FreeBSD 13.1-RELEASE installed in the most ‘default’ way in the bsdinstall(8) installer – the Auto ZFS road – we will now fetch the up to date FreeBSD Ports tree with portsnap(8) tool.
This is the main /etc/rc.conf config file.
# cat /etc/rc.conf
hostname="fbsd"
ifconfig_vtnet0="inet 10.0.0.42 netmask 255.255.255.0"
defaultrouter="10.0.0.1"
sshd_enable="YES"
moused_enable="YES"
dumpdev="AUTO"
zfs_enable="YES"
syslogd_flags="-ss"
sssd_enable="YES"
FreeBSD Packages
We need to have FreeBSD Ports tree.
# portsnap auto
Lets check what is the current default SAMBA version on FreeBSD.
# grep -i samba /usr/ports/Mk/*default*
PYTHON2 PYTHON3 RUBY RUST SAMBA SSL TCLTK VARNISH
SAMBA_DEFAULT?= 4.12
To omit a lot of pointless compilation I will first install all precompiled packages – that would also install needed dependencies. Then we will rebuild just the several needed packages.
# pkg install krb5 sudo cyrus-sasl cyrus-sasl-gssapi pam_mkhomedir openldap26-client samba412
Settings in the /etc/make.conf file.
# cat /etc/make.conf
# USE /usr/ports/obj PLACE
WRKDIRPREFIX=${PORTSDIR}/obj
OPTIONS_UNSET= DOCS EXAMPLES DEBUG X11
OPTIONS_UNSET+= DBUS GSSAPI_BASE GSSAPI_HEIMDAL
OPTIONS_SET+= GSSAPI_MIT
WITH_GSSAPI= yes
WANT_OPENLDAP_SASL= yes
Lets configure the needed ports.
# \ for I in /usr/ports/security/sudo \ /usr/ports/security/sssd \ /usr/ports/security/krb5 \ /usr/ports/security/cyrus-sasl2-gssapi \ /usr/ports/security/pam_mkhomedir \ /usr/ports/net/openldap26-client do make -C ${I} rmconfig done # \ for I in /usr/ports/security/sudo \ /usr/ports/security/sssd \ /usr/ports/security/krb5 \ /usr/ports/security/cyrus-sasl2-gssapi \ /usr/ports/security/pam_mkhomedir \ /usr/ports/net/openldap26-client do make -C ${I} config-recursive done
The curses(3X) selection will look more or less like these below.
=> security/sudo | OPTIONS___________________________________________________________________________ [x] AUDIT Enable BSM audit support [ ] DISABLE_AUTH Do not require authentication by default [ ] DISABLE_ROOT_SUDO Do not allow root to run sudo [ ] DOCS Build and/or install documentation [ ] EXAMPLES Build and/or install examples [ ] INSULTS Enable insults on failures [x] LDAP LDAP protocol support [ ] NLS Native Language Support [ ] NOARGS_SHELL Run a shell if no arguments are given [ ] OPIE Enable one-time passwords (no PAM support) [ ] PAM Pluggable authentication module support [ ] PYTHON Enable python plugin support [x] SSSD Enable SSSD backend support. => security/sudo | Kerberos 5 Authentication (no PAM support) ( ) GSSAPI_BASE GSSAPI support via base system (needs Kerberos) ( ) GSSAPI_HEIMDAL GSSAPI support via security/heimdal (*) GSSAPI_MIT GSSAPI support via security/krb5 => security/sssd | OPTIONS___________________________________________________________________________ [ ] DOCS Build and/or install documentation [x] SMB Install IPA and AD providers (requires Samba4) => security/cyrus-sasl2-gssapi | OPTIONS_____________________________________________________________ ( ) GSSAPI_BASE GSSAPI support via base system (needs Kerberos) ( ) GSSAPI_HEIMDAL GSSAPI support via security/heimdal (*) GSSAPI_MIT GSSAPI support via security/krb5 => net/openldap26-client | OPTIONS___________________________________________________________________ [ ] DEBUG Build with debugging support [ ] DOCS Build and/or install documentation [ ] FETCH Enable fetch(3) support [x] GSSAPI With GSSAPI support => security/krb5 | OPTIONS___________________________________________________________________________ [ ] DNS_FOR_REALM Enable DNS lookups for Kerberos realm names [ ] EXAMPLES Build and/or install examples [x] KRB5_HTML Install krb5 HTML documentation [x] KRB5_PDF Install krb5 PDF documentation [x] LDAP LDAP protocol support [ ] LMDB OpenLDAP Lightning Memory-Mapped Database support [ ] NLS Native Language Support => security/krb5 | Command Line Editing for kadmin and ktutil (*) READLINE Command line editing via libreadline ( ) LIBEDIT Command line editing via libedit
We can now check what options have been saved.
# cat /var/db/ports/security_sudo-sssd/options _OPTIONS_READ=sudo-sssd-1.9.11p3 _FILE_COMPLETE_OPTIONS_LIST=AUDIT DISABLE_AUTH DISABLE_ROOT_SUDO DOCS EXAMPLES INSULTS LDAP NLS NOARGS_SHELL OPIE PAM PYTHON SSSD GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT OPTIONS_FILE_SET+=AUDIT OPTIONS_FILE_SET+=GSSAPI_MIT OPTIONS_FILE_SET+=LDAP OPTIONS_FILE_SET+=NLS OPTIONS_FILE_SET+=SSSD OPTIONS_FILE_UNSET+=DISABLE_AUTH OPTIONS_FILE_UNSET+=DISABLE_ROOT_SUDO OPTIONS_FILE_UNSET+=DOCS OPTIONS_FILE_UNSET+=EXAMPLES OPTIONS_FILE_UNSET+=GSSAPI_BASE OPTIONS_FILE_UNSET+=GSSAPI_HEIMDAL OPTIONS_FILE_UNSET+=INSULTS OPTIONS_FILE_UNSET+=NOARGS_SHELL OPTIONS_FILE_UNSET+=OPIE OPTIONS_FILE_UNSET+=PAM OPTIONS_FILE_UNSET+=PYTHON # cat /var/db/ports/security_sssd/options _OPTIONS_READ=sssd-1.16.5_6 _FILE_COMPLETE_OPTIONS_LIST=DOCS SMB OPTIONS_FILE_UNSET+=DOCS OPTIONS_FILE_SET+=SMB # cat /var/db/ports/security_cyrus-sasl2/options _OPTIONS_READ=cyrus-sasl-2.1.28 _FILE_COMPLETE_OPTIONS_LIST=ALWAYSTRUE AUTHDAEMOND DOCS KEEP_DB_OPEN OBSOLETE_CRAM_ATTR OBSOLETE_DIGEST_ATTR SASLDB_IN_VAR BDB1 BDB GDBM LMDB ANONYMOUS CRAM DIGEST LOGIN NTLM OTP PLAIN SCRAM OPTIONS_FILE_SET+=ANONYMOUS OPTIONS_FILE_SET+=AUTHDAEMOND OPTIONS_FILE_SET+=BDB1 OPTIONS_FILE_SET+=CRAM OPTIONS_FILE_SET+=DIGEST OPTIONS_FILE_SET+=LOGIN OPTIONS_FILE_SET+=NTLM OPTIONS_FILE_SET+=OBSOLETE_CRAM_ATTR OPTIONS_FILE_SET+=OBSOLETE_DIGEST_ATTR OPTIONS_FILE_SET+=OTP OPTIONS_FILE_SET+=PLAIN OPTIONS_FILE_SET+=SCRAM OPTIONS_FILE_UNSET+=ALWAYSTRUE OPTIONS_FILE_UNSET+=BDB OPTIONS_FILE_UNSET+=DOCS OPTIONS_FILE_UNSET+=GDBM OPTIONS_FILE_UNSET+=KEEP_DB_OPEN OPTIONS_FILE_UNSET+=LMDB OPTIONS_FILE_UNSET+=SASLDB_IN_VAR # cat /var/db/ports/net_openldap26-client/options _OPTIONS_READ=openldap26-client-2.6.3 _FILE_COMPLETE_OPTIONS_LIST=DEBUG DOCS FETCH GSSAPI OPTIONS_FILE_SET+=GSSAPI OPTIONS_FILE_UNSET+=DEBUG OPTIONS_FILE_UNSET+=DOCS OPTIONS_FILE_UNSET+=FETCH # cat /var/db/ports/security_krb5/options # This file is auto-generated by 'make config'. # Options for krb5-1.20 _OPTIONS_READ=krb5-1.20 _FILE_COMPLETE_OPTIONS_LIST=DNS_FOR_REALM EXAMPLES KRB5_HTML KRB5_PDF LDAP LMDB NLS READLINE LIBEDIT OPTIONS_FILE_UNSET+=DNS_FOR_REALM OPTIONS_FILE_UNSET+=EXAMPLES OPTIONS_FILE_SET+=KRB5_HTML OPTIONS_FILE_SET+=KRB5_PDF OPTIONS_FILE_SET+=LDAP OPTIONS_FILE_UNSET+=LMDB OPTIONS_FILE_SET+=NLS OPTIONS_FILE_SET+=READLINE OPTIONS_FILE_UNSET+=LIBEDIT
… and build them.
# \
for I in /usr/ports/security/sudo \
/usr/ports/security/sssd \
/usr/ports/security/krb5
/usr/ports/security/cyrus-sasl2-gssapi \
/usr/ports/security/pam_mkhomedir \
/usr/ports/net/openldap26-client \
do
make -C ${I} build
done
… unsinstall them and create their packages.
# \
for I in /usr/ports/security/sudo \
/usr/ports/security/sssd \
/usr/ports/security/krb5
/usr/ports/security/cyrus-sasl2-gssapi \
/usr/ports/security/pam_mkhomedir \
/usr/ports/net/openldap26-client \
do
make -C ${I} deinstall package
done
After some time we have our built packages.
# find /usr/ports/obj/ -name \*.pkg
/usr/ports/obj/usr/ports/lang/perl5.32/work/perl-5.32.1/symbian/ext/Moped/Msg/Msg.pkg
/usr/ports/obj/usr/ports/security/pam_mkhomedir/work/pkg/pam_mkhomedir-0.2.pkg
/usr/ports/obj/usr/ports/security/cyrus-sasl2-gssapi/work/pkg/cyrus-sasl-gssapi-2.1.28.pkg
/usr/ports/obj/usr/ports/security/krb5/work/pkg/krb5-1.20.pkg
/usr/ports/obj/usr/ports/security/sudo/work/pkg/sudo-1.9.11p3.pkg
/usr/ports/obj/usr/ports/security/sssd/work-default/pkg/sssd-1.16.5_6.pkg
/usr/ports/obj/usr/ports/net/openldap26-client/work/pkg/openldap26-client-2.6.3.pkg
In the future I need to add some short guide to build them regularly with Synth or Poudriere π
Now we need to install these packages in quite nontypical way. One by one – in specified order. It will not be needed it we would have a separate additional pkg(8) repository with Poudriere build packages.
Our packages:
# ls -1 *.pkg
cyrus-sasl-gssapi-2.1.28.pkg
krb5-1.20.pkg
openldap26-client-2.6.3.pkg
pam_mkhomedir-0.2.pkg
sssd-smb4-1.16.5_6.pkg
sudo-sssd-1.9.11p3.pkg
… and their install process.
# pkg install -y c-ares # pkg add sssd-smb4-1.16.5_6.pkg # pkg install -y cyrus-sasl-gssapi-2.1.28.pkg (...) New packages to be INSTALLED: cyrus-sasl: 2.1.28 cyrus-sasl-gssapi: 2.1.28 krb5: 1.20 (...) # pkg delete -f -y krb5 (...) Installed packages to be REMOVED: krb5: 1.20 (...) # pkg add krb5-1.20.pkg # pkg install -y sssd # pkg add sudo-sssd-1.9.11p3.pkg # pkg delete -f -y sssd (...) Installed packages to be REMOVED: sssd: 1.16.5_6 (...) # pkg install ding-libs ldb21 nspr nss pcre samba412 # pkg add sssd-smb4-1.16.5_6.pkg
FreeBSD Setup
Create needed dirs.
# mkdir -p \
/usr/local/etc/ipa \
/var/log/sssd \
/var/run/sss/private \
/var/db/sss
Set system hostname.
# hostname fbsd.vercorp.org # hostname fbsd.vercorp.org
Fetch the FreeIPA/IDM certificate.
# fetch -o /usr/local/etc/ipa/ca.crt http://10.0.0.40/ipa/config/ca.crt
FreeIPA/IDM Setup Part
We need to execute several instructions on the FreeIPA/IDM to connect FreeBSD client to it.
Its adding the A and PTR records in DNS for the 10.0.0.42 address and adding the fbsd.vercorp.org host.
We also need to generate the key for our fbsd.vercorp.org system.
[root@idm ~]# kinit admin Password for admin@VERCORP.ORG: [root@idm ~]# ipa dnsrecord-add vercorp.org fbsd --a-rec=10.0.0.42 --a-create-reverse Record name: fbsd A record: 10.0.0.42 [root@idm ~]# ipa host-add fbsd.vercorp.org ----------------------------- Added host "fbsd.vercorp.org" ----------------------------- Host name: fbsd.vercorp.org Principal name: host/fbsd.vercorp.org@VERCORP.ORG Principal alias: host/fbsd.vercorp.org@VERCORP.ORG Password: False Keytab: False Managed by: fbsd.vercorp.org [root@idm ~]# ipa-getkeytab -s idm.vercorp.org -p host/fbsd.vercorp.org@VERCORP.ORG -k /root/fbsd.vercorp.org.keytab Keytab successfully retrieved and stored in: /root/fbsd.vercorp.org.keytab
Now we need to get ‘our’ key from FreeIPA/IDM server … along with proper /etc/hosts file.
# scp root@10.0.0.40:/root/fbsd.vercorp.org.keytab /usr/local/etc/ipa/krb5.keytab # cat << EOF > /etc/hosts ::1 localhost localhost.my.domain 127.0.0.1 localhost localhost.my.domain 10.0.0.40 idm.vercorp.org idm 10.0.0.42 fbsd.vercorp.org fbsd EOF
Now the /usr/local/etc/openldap/ldap.conf file.
# cat << EOF > /usr/local/etc/openldap/ldap.conf
BASE dc=org,dc=vercorp
URI ldap://idm.vercorp.org/
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
SASL_MECH GSSAPI
SASL_REALM VERCORP.ORG
ssl start_tls
TLS_CACERT /usr/local/etc/ipa/ca.crt
EOF
… and /etc/krb5.conf file.
# cat << EOF > /etc/krb5.conf
[libdefaults]
default_realm = VERCORP.ORG
default_keytab_name = FILE:/usr/local/etc/ipa/krb5.keytab
default_tkt_enctypes = aes256-cts des-cbc-crc aes128-cts arcfour-hmac
default_tgs_enctypes = aes256-cts des-cbc-crc aes128-cts arcfour-hmac
dns_lookup_realm = false
dns_lookup_kdc = false
rdns = false
ticket_lifetime = 24h
forwardable = yes
[realms]
VERCORP.ORG = {
kdc = idm.vercorp.org:88
master_kdc = idm.vercorp.org:88
admin_server = idm.vercorp.org:749
default_domain = vercorp.org
pkinit_anchors = FILE:/usr/local/etc/ipa/ca.crt
}
[domain_realm]
.vercorp.org = VERCORP.ORG
vercorp.org = VERCORP.ORG
[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmin.log
kadmin_local = FILE:/var/log/krb5/kadmin_local.log
default = FILE:/var/log/krb5/krb5lib.log
EOF
… and /usr/local/etc/sssd/sssd.conf file.
# cat << EOF > /usr/local/etc/sssd/sssd.conf [domain/vercorp.org] # debug_level = 9 cache_credentials = True krb5_store_password_if_offline = True krb5_realm = VERCORP.ORG ipa_domain = vercorp.org id_provider = ipa auth_provider = ipa access_provider = ipa ipa_hostname = fbsd.vercorp.org chpass_provider = ipa ipa_server = _srv_, idm.vercorp.org ldap_tls_cacert = /usr/local/etc/ipa/ca.crt krb5_keytab = /usr/local/etc/ipa/krb5.keytab [sssd] services = nss, pam, ssh, sudo config_file_version = 2 domains = vercorp.org [nss] filter_users = root,toor homedir_substring = /usr/home/%u [pam] [sudo] # debug_level = 0x3ff0 [ssh] EOF # chmod 600 /usr/local/etc/sssd/sssd.conf
FreeBSD have user account under /usr/home to make sure /home also points there.
# ln -s /usr/home /home
The automatic startup of sssd(8) daemon (not to confuse with sshd(8)) needs to be also configured.
# sysrc sssd_enable=YES # service sssd start
We also need to configure /etc/nsswitch.conf file.
# cp /etc/nsswitch.conf /etc/nsswitch.conf.BCK # diff -u /etc/nsswitch.conf.BCK /etc/nsswitch.conf --- /etc/nsswitch.conf.BCK 2022-10-24 20:10:09.163251000 +0200 +++ /etc/nsswitch.conf 2022-10-24 20:10:57.207406000 +0200 @@ -2,15 +2,17 @@ # nsswitch.conf(5) - name service switch configuration file # $FreeBSD$ # -group: compat +group: files sss group_compat: nis hosts: files dns -netgroup: compat +# netgroup: compat networks: files -passwd: compat +passwd: files sss passwd_compat: nis shells: files services: compat services_compat: nis protocols: files rpc: files +sudoers: sss files +netgroup: files
The final /etc/nsswitch.conf file looks as follows.
# cat /etc/nsswitch.conf
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD$
#
group: files sss
group_compat: nis
hosts: files dns
# netgroup: compat
networks: files
passwd: files sss
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
sudoers: sss files
netgroup: files
Now the /etc/pam.d/system file.
# cp /etc/pam.d/system /root/etc---pam.d---system.BCK # diff -u /root/etc---pam.d---system.BCK /etc/pam.d/system --- /root/etc---pam.d---system.BCK 2022-10-24 20:13:05.546657000 +0200 +++ /etc/pam.d/system 2022-10-24 20:16:36.722666000 +0200 @@ -7,19 +7,23 @@ # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local -#auth sufficient pam_krb5.so no_warn try_first_pass +auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass +auth sufficient /usr/local/lib/pam_sss.so use_first_pass auth required pam_unix.so no_warn try_first_pass nullok # account #account required pam_krb5.so account required pam_login_access.so account required pam_unix.so +account required /usr/local/lib/pam_sss.so ignore_unknown_user ignore_authinfo_unavail # session #session optional pam_ssh.so want_agent session required pam_lastlog.so no_fail +session required /usr/local/lib/pam_mkhomedir.so mode=0700 # password #password sufficient pam_krb5.so no_warn try_first_pass +password sufficient /usr/local/lib/pam_sss.so use_authtok password required pam_unix.so no_warn try_first_pass
The final /etc/pam.d/system file looks as follows.
# cat /etc/pam.d/system
#
# $FreeBSD$
#
# System-wide defaults
#
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient /usr/local/lib/pam_sss.so use_first_pass
auth required pam_unix.so no_warn try_first_pass nullok
# account
#account required pam_krb5.so
account required pam_login_access.so
account required pam_unix.so
account required /usr/local/lib/pam_sss.so ignore_unknown_user ignore_authinfo_unavail
# session
#session optional pam_ssh.so want_agent
session required pam_lastlog.so no_fail
session required /usr/local/lib/pam_mkhomedir.so mode=0700
# password
#password sufficient pam_krb5.so no_warn try_first_pass
password sufficient /usr/local/lib/pam_sss.so use_authtok
password required pam_unix.so no_warn try_first_pass
Now its time for /etc/pam.d/sshd file.
# cp /etc/pam.d/sshd /root/etc---pam.d---sshd.BCK # diff -u /root/etc---pam.d---sshd.BCK /etc/pam.d/sshd --- /root/etc---pam.d---sshd.BCK 2022-10-24 20:17:34.063630000 +0200 +++ /etc/pam.d/sshd 2022-10-24 20:19:16.165810000 +0200 @@ -7,8 +7,9 @@ # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local -#auth sufficient pam_krb5.so no_warn try_first_pass +auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass +auth sufficient /usr/local/lib/pam_sss.so use_first_pass auth required pam_unix.so no_warn try_first_pass # account @@ -16,11 +17,14 @@ #account required pam_krb5.so account required pam_login_access.so account required pam_unix.so +account required /usr/local/lib/pam_sss.so ignore_unknown_user ignore_authinfo_unavail # session #session optional pam_ssh.so want_agent session required pam_permit.so +session required /usr/local/lib/pam_mkhomedir.so mode=0700 # password #password sufficient pam_krb5.so no_warn try_first_pass +password sufficient /usr/local/lib/pam_sss.so use_authtok password required pam_unix.so no_warn try_first_pass
Final /etc/pam.d/sshd file below.
# cat /etc/pam.d/sshd
#
# $FreeBSD$
#
# PAM configuration for the "sshd" service
#
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient /usr/local/lib/pam_sss.so use_first_pass
auth required pam_unix.so no_warn try_first_pass
# account
account required pam_nologin.so
#account required pam_krb5.so
account required pam_login_access.so
account required pam_unix.so
account required /usr/local/lib/pam_sss.so ignore_unknown_user ignore_authinfo_unavail
# session
#session optional pam_ssh.so want_agent
session required pam_permit.so
session required /usr/local/lib/pam_mkhomedir.so mode=0700
# password
#password sufficient pam_krb5.so no_warn try_first_pass
password sufficient /usr/local/lib/pam_sss.so use_authtok
password required pam_unix.so no_warn try_first_pass
Small modification in the /etc/ssh/ssh_config and /etc/ssh/sshd_config files.
# cat << EOF >> /etc/ssh/ssh_config GSSAPIAuthentication yes EOF # cat << EOF >> /etc/ssh/sshd_config GSSAPIAuthentication yes UsePAM yes EOF
Finish Setup with Web Browser in FreeIPA/IDM Page
Visit the https://idm.vercorp.org/ipa/ui/#/e/hbacrule/details/freebsd page.
Next create the HBAC Rule named freebsd as showed below.
… and the Sudo Rule named freebsd name.
FreeBSD FreeIPA Login Test
After all these time consuming and pointless instructions we can now finally try to login to our FreeBSD client.
% ssh -l vermaden 10.0.0.42 (vermaden@10.0.0.42) Password: Last login: Mon Oct 24 21:06:36 2022 from 10.0.0.3 FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212 GENERIC Welcome to FreeBSD! Release Notes, Errata: https://www.FreeBSD.org/releases/ Security Advisories: https://www.FreeBSD.org/security/ FreeBSD Handbook: https://www.FreeBSD.org/handbook/ FreeBSD FAQ: https://www.FreeBSD.org/faq/ Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/ FreeBSD Forums: https://forums.FreeBSD.org/ Documents installed with the system are in the /usr/local/share/doc/freebsd/ directory, or can be installed later with: pkg install en-freebsd-doc For other languages, replace "en" with a language code like de or fr. Show the version of FreeBSD installed: freebsd-version ; uname -a Please include that output and any error messages when posting questions. Introduction to manual pages: man man FreeBSD directory layout: man hier To change this login announcement, see motd(5). You can upload the dmesg of your system to help developers get an overview of commonly used hardware and peripherals for FreeBSD. Use the curl package to upload it like this: curl -v -d "nickname=$USER" -d "description=FreeBSD/$(uname -m) on \ $(kenv smbios.system.maker) $(kenv smbios.system.product)" -d "do=addd" \ --data-urlencode 'dmesg@/var/run/dmesg.boot' http://dmesgd.nycbug.org/index.cgi vermaden@fbsd:~ $ :> ~/.hushlogin vermaden@fbsd:~ $ id uid=1408200003(vermaden) gid=1408200000(admins) groups=1408200000(admins) vermaden@fbsd:~ $ pwd /home/vermaden vermaden@fbsd:~ $ grep vermaden /etc/passwd /etc/group vermaden@fbsd:~ $ vermaden@fbsd:~ $ getent passwd vermaden vermaden:*:1408200003:1408200000:vermaden vermaden:/home/vermaden:/bin/sh vermaden@fbsd:~ $ sudo su - Password for vermaden@VERCORP.ORG: root@fbsd:~ # logout vermaden@fbsd:~ $ sudo -i root@fbsd:~ #
Strange … seems to work properly π
FreeBSD Jail as FreeIPA/IDM Client
As ‘full’ FreeBSD system is able to connect to the FreeIPA/IDM server we will not configure FreeBSD Jail to do the same.
The FreeIPA/IDM FreeBSD client fbsdjail.vercorp.orgwill get the 10.0.0.43 IP.
Basic FreeBSD Jail Preparations
Lets setup the Jail for a start.
# mkdir -p /jail/fbsdjail /jail/BASE # cd /jail/fbsdjail # fetch -o /jail/BASE/13.1-RELEASE-base.txz https://download.freebsd.org/ftp/releases/amd64/13.1-RELEASE/base.txz # tar --unlink -xvf ../BASE/13.1-RELEASE-base.txz # cat << EOF > /etc/jail.conf # GLOBAL exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown"; exec.clean; exec.consolelog = "/var/log/jail_${name}_console.log"; mount.devfs; host.hostname = ${name}; path = /jail/${name}; # JAILS fbsdjail { ip4.addr = 10.0.0.43; host.hostname = fbsdjail.vercorp.org; interface = wlan0; allow.raw_sockets; allow.sysvipc; } EOF # cat /etc/resolv.conf | tee /jail/fbsdjail/etc/resolv.conf nameserver 10.0.0.1 # echo 10.0.0.43 fbsdjail.vercorp.org fbsdjail | tee -a /etc/hosts | tee -a /jail/fbsdjail/etc/hosts # cat /etc/hosts /jail/fbsdjail/etc/hosts 10.0.0.43 fbsdjail.vercorp.org fbsdjail 10.0.0.43 fbsdjail.vercorp.org fbsdjail # cat << EOF > /jail/fbsdjail/etc/rc.conf # DAEMONS | yes syslogd_flags="-ss" sshd_enable=YES # OTHER clear_tmp_enable=YES clear_tmp_X=YES dumpdev=NO update_motd=NO EOF # sed -i '' s/quarterly/latest/g /jail/fbsdjail/etc/pkg/FreeBSD.conf # grep latest /jail/fbsdjail/etc/pkg/FreeBSD.conf url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
Now we can start our FreeBSD Jail.
# service jail onestart fbsdjail Starting jails: fbsdjail. # jls JID IP Address Hostname Path 1 10.0.0.43 fbsdjail.vercorp.org /jail/fbsdjail # jls -v JID Hostname Path Name State CPUSetID IP Address(es) 1 fbsdjail.vercorp.org /jail/fbsdjail fbsdjail ACTIVE 3 10.0.0.43 # jexec fbsdjail root@fbsdjail:/ #
Our FreeBSD Jail works. Lets move to next steps.
Configure FreeBSD Jail to Connect to FreeIPA/IDM Server
I could not repaste all of the instructions above – the ones that we used for a ‘full’ FreeBSD system – but the same applies to a FreeBSD Jail. π
This means that earlier Basic FreeBSD Jail Preparations section covers all that is needed in case of ‘full’ FreeBSD versus FreeBSD Jail when it comes to the FreeIPA/IDM connection.
Linux FreeIPA/IDM Client
This article is not about Linux client – which is pretty straight-forward to connect to the FreeIPA/IDM server – but for the completness of the topic – here are the instructions I used to attach Alma Linux to the FreeIPA/IDM server.
Linux rhlike.vercorp.org system.
IP: 10.0.0.41/24 GW: 10.0.0.1 hostname: rhlike.vercorp.org
First – install the @idm:client and sssd packages.
client # yum -y install @idm:client sssd
FreeIPA/IDM Setup Part
Now – as earlier with FreeBSD – the FreeIPA/IDM part comes to play.
[root@idm ~]# kinit admin Password for admin@VERCORP.ORG: [root@idm ~]# klist Ticket cache: KCM:0 Default principal: admin@VERCORP.ORG Valid starting Expires Service principal 10/19/2022 13:33:52 10/20/2022 13:11:28 krbtgt/VERCORP.ORG@VERCORP.ORG [root@idm ~]# ipa user-find --------------- 2 users matched --------------- User login: admin Last name: Administrator Home directory: /home/admin Login shell: /bin/bash Principal alias: admin@VERCORP.ORG, root@VERCORP.ORG UID: 1896600000 GID: 1896600000 Account disabled: False User login: vermaden First name: vermaden Last name: vermaden Home directory: /home/vermaden Login shell: /bin/sh Principal name: vermaden@VERCORP.ORG Principal alias: vermaden@VERCORP.ORG Email address: vermaden@vercorp.org UID: 1896600003 GID: 1000 Account disabled: False ---------------------------- Number of entries returned 2 ---------------------------- [root@idm ~]# id vermaden uid=1408200003(vermaden) gid=1408200000(admins) groups=1408200000(admins) [root@idm ~]# ipa dnsrecord-add vercorp.org rhlike --a-rec 10.0.0.41 Record name: rhlike A record: 10.0.0.41
We are done on the FreeIPA/IDM side.
Linux FreeIPA/IDM Client Setup
We will now continue our work on the Linux client.
client # echo "10.0.0.40 idm.vercorp.org" >> /etc/hosts client # echo "10.0.0.41 rhlike.vercorp.org" >> /etc/hosts client # hostnamectl set-hostname rhlike.vercorp.org client # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.40 idm.vercorp.org 10.0.0.41 rhlike.vercorp.org client # ipa-client-install --uninstall client # ipa-client-install \ --hostname=rhlike.vercorp.org \ --mkhomedir \ --server=idm.vercorp.org \ --domain vercorp.org \ --realm VERCORP.ORG This program will set up IPA client. Version 4.9.8 Autodiscovery of servers for failover cannot work with this configuration. If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure. Proceed with fixed values and no DNS discovery? [no]: yes Do you want to configure chrony with NTP server or pool address? [no]: no Client hostname: rhlike.vercorp.org Realm: VERCORP.ORG DNS Domain: vercorp.org IPA Server: idm.vercorp.org BaseDN: dc=vercorp,dc=org Continue to configure the system with these values? [no]: yes Synchronizing time No SRV records of NTP servers found and no NTP server or pool address was provided. Using default chrony configuration. Attempting to sync time with chronyc. Time synchronization was successful. User authorized to enroll computers: admin Password for admin@VERCORP.ORG: Successfully retrieved CA cert Subject: CN=Certificate Authority,O=VERCORP.ORG Issuer: CN=Certificate Authority,O=VERCORP.ORG Valid From: 2022-10-18 14:52:50 Valid Until: 2042-10-18 14:52:50 Enrolled in IPA realm VERCORP.ORG Created /etc/ipa/default.conf Configured /etc/sssd/sssd.conf Configured /etc/krb5.conf for IPA realm VERCORP.ORG Systemwide CA database updated. Hostname (rhlike.vercorp.org) does not have A/AAAA record. Failed to update DNS records. Missing A/AAAA record(s) for host rhlike.vercorp.org: 10.0.0.41. Missing reverse record(s) for address(es): 10.0.0.41. Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub Could not update DNS SSHFP records. SSSD enabled Configured /etc/openldap/ldap.conf Configured /etc/ssh/ssh_config Configured /etc/ssh/sshd_config Configuring vercorp.org as NIS domain. Client configuration complete. The ipa-client-install command was successful client # reboot
Now we will test how it goes with login against the FreeIPA/IDM server.
laptop % ssh -l vermaden 10.0.0.41 (vermaden@10.0.0.41) Password: (vermaden@10.0.0.41) Password expired. Change your password now. Current Password: (vermaden@10.0.0.41) New password: (vermaden@10.0.0.41) Retype new password: Last failed login: Wed Oct 19 00:47:57 CEST 2022 from 10.0.0.3 on ssh:notty There was 1 failed login attempt since the last successful login. /usr/bin/id: cannot find name for group ID 1000 [vermaden@rhlike ~]$ w 00:48:16 up 29 min, 2 users, load average: 0.22, 0.13, 0.16 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.0.3 00:40 58.00s 0.03s 0.03s -bash vermaden pts/1 10.0.0.3 00:48 0.00s 0.02s 0.01s w [vermaden@rhlike ~]$ sudo su - [root@rhlike ~]# getent passwd admin admin:*:1896600000:1896600000:Administrator:/home/admin:/bin/bash [root@rhlike ~]# getent passwd vermaden vermaden:*:1896600003:1000:vermaden vermaden:/home/vermaden:/bin/sh
Seems to work at least OK π
I do not have anything more to add to this guide.
If you have – then please let me know in comments π
Regards.
EOF
Pingback: Connect FreeBSD to FreeIPA/Red Hat Identity Management - makemoneyonlinecom.com
Pingback: Links 18/11/2022: GIMP 2.99.14 Released | Techrights
Pingback: Recent technical articles & videos. - CertDepot
Pingback: Valuable News – 2022/11/28 | ππππππππ
Pingback: Connect FreeBSD 13.2 to FreeIPA/IDM | ππππππππ