sssd

最後更新: 2021-10-26

介紹

System Security Services Dameon(SSSD)

system service to access remote directories and authentication mechanisms

---

SSSD does not create user accounts on the local system.

Instead, it uses the identities from the external data store and lets the users access the local system.

SSSD contacts the servers only if the information is not available in the cache.

目錄

  • Installation
  • authselect & authconfig
  • Settings
  • ...
  • Higher version of database is expected!

Installation

 

centos 7, 8 安裝

dnf install sssd -y            # C8

yum install sssd -y          # C7, C6

# 如 start 唔到, 就要 update 一次.

dnf update -y && reboot

centos 7, 8 啟用 sssd

systemctl start sssd

systemctl enable sssd

centos6 啟用 sssd

chkconfig sssd on

service sssd start

 


authselect & authconfig

 

This automatically configured the nsswitch.conf file to use SSSD as a provider.

Centos 8

dnf install authselect

authselect select sssd --force

Centos 7

yum install install authconfig

authconfig --enablesssd --enablesssdauth --update

Remark

--enablesssd option

Configuring Services: NSS
updates /etc/nsswitch.conf to support SSS.

--enablesssdauth option
Configuring Services: PAM
updates /etc/pam.d/system-auth to include the required pam_sss.so

 


Settings

 

Config File

/etc/sssd/sssd.conf

Permssion

# 必須是 600 否則 service 會 start 失敗

chmod 600 /etc/sssd/sssd.conf

Verify Config - sssd-tools

# check configuration or permissions

dnf install sssd-tools -y

sssctl config-check

Issues identified by validators: 0

Messages generated during configuration merging: 0

Used configuration snippet files: 0

 


sssd.conf

 

identity & authentication provider

  • An identity provider (for user information)
  • An authentication provider (for authentication requests)
  • An access control provider (for authorization requests)     # Default: “permit”

A combination of these providers

identity    authentication
LDAP        LDAP, Kerberos
proxy       proxy, LDAP, Kerberos
file        LDAP, Kerberos

Section

[sssd]

section contains configuration settings for SSSD monitor options

[domain/LDAP]

[nss]

configure how SSSD interacts with NSS

[pam]

[nss] Section

[nss]
filter_groups = root
filter_users = root
enum_cache_timeout = 300
entry_cache_nowait_percentage = 75

filter_users & filter_groups

useful for system accounts

entries prevent NSS retrieving information about the specified users and groups being retrieved from SSS

The filter_groups option doesn't affect inheritance of nested group members

Default: root

enum_cache_timeout

cache enumerations (requests for info about all users)

 

[sssd] Section

[sssd]
config_file_version = 2
domains = LDAP_domain_name
services = nss, pam, sudo

domains

specifies the name of the sections that define authentication domains

services

entry entry defines the supported services

[pam] Section

[pam]
reconnection_retries = 3
offline_credentials_expiration = 2
offline_failed_login_attempts = 3
offline_failed_login_delay = 5

offline_credentials_expiration

specifies the number of days for which to allow cached logins if the authentication provider is offline.

offline_failed_login_attempts

specifies how many failed login attempts are allowed if the authentication provider is offline.

offline_failed_login_delay & offline_failed_login_attempts

specifies how many minutes after offline_failed_login_attempts failed login attempts that a new login attempt is permitted.

[domain/X] Section

[domain/LDAP_domain_name]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com

ldap_id_use_start_tls = true
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt

cache_credentials = true

min_id = 1000
max_id = 2000

enumerate = false

id_provider          # identity provider

auth_provider      # authentication provider

enumerate          # specifies whether SSSD caches the complete list of users and groups that are available on the provider.

cache_credentials

Specifies if SSSD caches user credentials such as tickets, session keys,
  and other identifying information to support offline authentication and single sign-on.

 * SSSD does not cache user credentials by default.

When processing authentication requests, SSSD always contacts the identity provider.

If the provider is unavailable, user authentication fails.

Kerberos

[domain/Kerberos_domain_name]
...
auth_provider = krb5
krb5_server = kdc.datahunter.local
krb5_realm = datahunter.local

 


Automatic home directory creation

 

# To enable automatic home directory creation for user upon first login

dnf install oddjob-mkhomedir

systemctl enable --now oddjobd

echo "session optional pam_oddjob_mkhomedir.so skel=/etc/skel/ umask=0022" >> /etc/pam.d/system-auth

systemctl restart oddjobd

 


Configuring the Files Provider for SSSD

 

Help: sssd-files(5) man page

File: /etc/passwd and /etc/groups

# Optionally, set the sss database as the first source for user and group lookups

/etc/nsswitch.conf

passwd:     sss files
group:      sss files

/etc/sssd/sssd.conf

[domain/files]
id_provider = files

 * SSSD never handles resolution of user/group "root".
    Also resolution of UID/GID 0 is not handled by SSSD.
    Such requests are passed to next NSS module (usually files).

 


Checking & Debug

 

Checking 方法

  • id username
  • getent passwd username
  • sssctl

sssctl

sssctl domain-list

datahunter.local

sssctl domain-status datahunter.local

Online status: Online

Active servers:
KERBEROS: not connected

Discovered KERBEROS servers:
- kdc.datahunter.local

sssctl user-checks

  -a, --action=STRING       # PAM action [auth|acct|setc|chau|open|clos], default: acct
  -s, --service=STRING      # PAM service, default: system-auth

sssctl user-checks USERNAME

sssctl user-checks USERNAME -a auth

Change SSSD debug level

# Change in runtime

sssctl debug-level 0x????      

4, 0x0100: Configuration settings.
5, 0x0200: Function data.
6, 0x0400: Trace messages for operation functions.
7, 0x1000: Trace messages for internal control functions.
8, 0x2000: Contents of function-internal variables that may be interesting.

Default: 0x0070

sssctl debug-level 0x17f0

 

 


Access Provider

 

simple access provider

The simple access provider allows or denies access based on a list of user names or groups.

ie.

[domain/domain_name]
access_provider = simple
simple_allow_users = user1, user2
simple_allow_groups = group1

 * deny rules supersede allow rules

If an allowed list is provided, then all users are denied access unless they are in the list.

If only deny lists are provided, then all users are allowed access unless they are in the list.

* The LOCAL domain in SSSD does not support simple as an access provider.

 


Client-side Views

 

 

specify new values for POSIX user or group attributes.
The view takes effect only on the local machine where the overrides are configured.

 * restart SSSD for the changes to take effect

# Override the account's UID with 6666
sss_override user-add username -u 6666

# Display the overrides for the user
sss_override user-show username

# To expire in-memory cache
sss_cache --users

remark
-E,--everything           # Invalidate all cached entries.
-u,--user login

# Checking
id user

# List
sss_override user-find
sss_override group-find

# Removing
sss_override user-del user
sss_override group-del group

# Exporting and Importing

# export
sss_override user-export /var/lib/sss/backup/sssd_user_overrides.bak
sss_override group-export /var/lib/sss/backup/sssd_group_overrides.bak
# import
sss_override user-import /var/lib/sss/backup/sssd_user_overrides.bak
sss_override group-import /var/lib/sss/backup/sssd_group_overrides.bak

(2021-10-19 15:48:48): [be[datahunter.local]] [check_wait_queue] (0x1000): Wait queue for user [[email protected]] is empty.

Obtaining Information about an LDAP Group Takes Long

By default, LDAP group information lookups return all members for the group. For operations that involve large groups or nested groups, returning all members makes the process longer.

To fix the problem:
The membership lists returned in group lookups are not used when evaluating whether a user belongs to a group.

ignore_group_members = true
 


Direct sshd to use SSSD for authorized_keys

 

AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser root

 


Higher version of database is expected!

 

[sss_cache] [sysdb_domain_cache_connect] (0x0010):
 DB version too old [0.23], expected [0.24] for domain implicit_files!
Higher version of database is expected!

原因

After sssd upgrade, useradd and usermod fail to flush the sssd cache

rpm -q sssd

sssd-2.9.4-3.el8_10.x86_64

FIX

mv /var/lib/sss/db{,.bak}

dnf reinstall sssd-common

systemctl restart sssd

ls /var/lib/sss/db