===== System Security Services Daemon (SSSD) =====
How to setup sssd authentication on %%FreeBSD%% guide.
The System Security Services Daemon (SSSD) is that provides a set of daemons to manage access to remote directories and authentication mechanisms such as [[/LDAP]], [[/Kerberos|Kerberos]] or %%FreeIPA%%.
* [[https://sssd.io|SSSD Homepage (sssd.io)]]
* [[https://github.com/SSSD/sssd|SSSD GitHub Repository]]
===== Install sssd =====
**Install sssd using Packages**
# pkg install sssd
**or [[/Ports]]**
# cd /usr/ports/security/sssd
# make install clean
===== Configure sssd and enable at startup =====
**Copy the default sssd sample configuration and secure it**
# cp /usr/local/etc/sssd/sssd.conf.sample /usr/local/etc/sssd/sssd.conf
# chown root:wheel
# chmod 600 /usr/local/etc/sssd/sssd.conf
**Enable sssd at startup**, using [[https://man.freebsd.org/sysrc(8)|sysrc]]
# sysrc sssd_enable=yes
or manually:
# echo sssd_enable="YES" >> /etc/rc.conf
If you'd like to start the sssd service without rebooting
# service sssd start
===== Enable sssd with LDAP / other backend support =====
The sudo port doesn't enable SSSD support by default (''%%SSSD=off: Enable SSSD backend support%%''), so building sudo via the port is necessary, either manually:
# cd /usr/ports/security/sudo
# make config
* Ensure the SSSD option is enabled ''%%[x] SSSD - Enable SSSD backend support%%'', press ''%%OK%%'', then
# make install clean
or using [[/portmaster|portmaster]]
# portmaster --force-config security/portmaster
* Ensure the SSSD option is enabled ''%%[x] SSSD - Enable SSSD backend support%%'', and press OK
===== Integrate sssd authentication into PAM, sshd and sudo =====
Update ''%%/etc/pam.d/system%%'' to allow users to auth using sssd:
...
# auth
auth sufficient /usr/local/lib/pam_sss.so
...
Update ''%%/etc/pam.d/sshd%%'' to include the same addition to enable sssd authentication for sshd
# PAM configuration for the "sshd" service
#
# auth
auth sufficient /usr/local/lib/pam_sss.so
...
**Add PAM sudo rules for sssd**
Create ''%%/etc/pam.d/sudo%%'' if it doesn't already exist, then add the following entry:
"auth sufficient /usr/local/lib/pam_sss.so"
**Enable sssd UID and GID mapping**, adding ''%%sudoers: files sss%%'' to ''%%/etc/nsswitch.conf%%''
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD$
#
group: files sss
group_compat: nis
...
rpc: files
sudoers: files sss
===== Testing sssd integration =====
After completing all of these steps, assuming sssd has started correctly (run ''%%service sssd status%%''), it should be possible to check if an LDAP user exists, for example:
# getent passwd jonathan
jonathan:*:1000:1000:Jonathan:/home/jonathan:/bin/bash
===== Enabling SSH keys via SSSD =====
If you store SSH public keys in your LDAP server, there is a utility included with SSSD to grab them: ''%%sss_ssh_authorizedkeys%%''.
Note: For the next step, if you're using sshd from ports or packages (instead of sshd from %%FreeBSD%% [[/Glossary#Base|base]]), the default file path location is ''%%/usr/local/etc/ssh/sshd_config%%''
Add the following lines to ''%%/etc/ssh/sshd_config%%''
AuthorizedKeysCommand /usr/local/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody
===== Using default shell from SSSD LDAP backend =====
If you store a user's shell in your LDAP schema, which most do, then bash being installed at ''%%/usr/local/bin/bash%%'' can be slightly problematic. One way of dealing with this, albeit a bit hacky ((It would be nice to make this not shell specific and how to make it work with default shell installation locations)), is to create a symlink for bash at ''%%/bin/bash%%'' and additionally add a line to ''%%/etc/shells%%''.
**Note**: If you do this, be sure not to ever use this "modified" shell for the root user.
# pkg install bash # in case you haven't already installed it
# ln -s /usr/local/bin/bash /bin/bash
# echo "/bin/bash" >> /etc/shells
Another option for handling this is to override the shell and force a known good shell for all users. Modify your ''%%sssd.conf%%'' to contain the following:
[domain/yourdomain]
...
override_shell = /usr/local/bin/bash
===== Creating LDAP users' home directories by default =====
**Non-default LDAP user home directories**
The default location for home directories in %%FreeBSD%% is ''%%/usr/home%%''. In existing LDAP setups, its possible user home directories are ''%%/home/%%''. To fix this, you can set the following directive in your ''%%sssd.conf%%'' to override the default:
[domain/yourdomain]
...
override_homedir = /usr/home/%u
**Automatic home directory creation**.
LDAP users also likely won't have a home directory. To setup automatic home directory creation, install ''%%pam_mkhomedir%%'' using packages
# pkg install pam_mkhomedir
Or Ports
# cd /usr/ports/security/pam_mkhomedir
# make install clean
Then modify ''%%/etc/pam.d/system%%'', adding
# session
#session optional pam_ssh.so want_agent
session required /usr/local/lib/pam_mkhomedir.so
And modify in ''%%/etc/pam.d/ssh%%''
# session
#session optional pam_ssh.so want_agent
session required /usr/local/lib/pam_mkhomedir.so
===== Credits =====
* Article originally written by jrdemasi((https://twitter.com/jrdemasi/status/1581485632878440448)) ((https://wiki.jthan.io/en/systems_administration/freebsd))
----
{{tag>HowTo}}
{{tag>Security}}