You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ublinux-init/ublinux/rc.pamsession.d/03-certmonger-cepces

115 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching
shopt -s extglob
ENABLED=yes
[[ ${ENABLED} == yes ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/logging; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/network; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
# https://github.com/openSUSE/cepces
# TODO:
# Не сделано
# Делаем настройку cepces и запрос сертификата машины после авторизации в домене с действительным ключом Kerberos
# Заполнение конфигурационного файла параметрами в файл: /etc/cepces/conf.d/ubconfig.conf
# При disable удаление файла /etc/cepces/conf.d/ubconfig.conf
# Проверить нужен ли запуск от root или достаточно под правами пользователя
# Выполнять после авторизации, т.к. клиент должен быть членом домена Windows с действительным ключом Kerberos
# Разобраться с созданием:
# /etc/pki/tls/private/machine.key
# /etc/pki/tls/certs/machine.crt
# Что-то похожее https://wiki.archlinux.org/title/Easy-RSA
# Скорее всего выполнять один раз добавлении CA в certmonger после ввода в домен:
# getcert add-ca -c CA-name -e '/usr/libexec/certmonger/cepces-submit --server=ca-dns-name.suse.de --keytab=/etc/krb5.keytab --principals=MY-HOST$@SUSE.DE'
# Настройки CA:
# getcert list-cas
# Выпуска и отслеживания нового сертификата:
# getcert request -c cepces -T Machine -I MachineCertificate -k /etc/pki/tls/private/machine.key -f /etc/pki/tls/certs/machine.crt
# Проверить ход выполнения:
# getcert list
## Регистрации сертификатов через CEP и CES c службами сертификатов Microsoft Active Directory
## Клиент должен быть членом домена Windows с действительным ключом Kerberos
## CERTMONGER_CEPCES=enable|disable
## CERTMONGER_CEPCES[<PARAM>]=<VALUE>
## <PARAM>
## global:server # Hostname of the issuing certification authority
## global:type
## global:auth=Anonymous|Kerberos|UsernamePassword|Certificate
## # Authentication mechanism used for connecting to the service, default=Kerberos
## global:endpoint # Default: https://%s/ADPolicyProvider_CEP_%s/service.svc/CEP
## global:cas
## global:poll_interval # Time in seconds before re-checking if the certificate has been issued
## global:openssl_seclevel # The openssl security level
## kerberos:keytab # Use the specified keytab
## kerberos:realm
## kerberos:ccache
## kerberos:principals # A list of principals to try when requesting a ticket
## kerberos:enctypes
## kerberos:delegate
## certificate:certfile
## certificate:keyfile
## CERTMONGER_CEPCES[global:server]=ca-dns-server.win.com
## CERTMONGER_CEPCES[kerberos:keytab]=/etc/krb5.keytab
## CERTMONGER_CEPCES[kerberos:principals]=MYHOST$@WIN.COM
## CERTMONGER_CEPCES=enable
exec_01_certmonger_cepces(){
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || local COMMAND="set="
[[ $(declare -p CERTMONGER_CEPCES 2>/dev/null) =~ ^"declare -A" ]] || declare -gA CERTMONGER_CEPCES
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
local CERTMONGER_CEPCES=
declare -A CERTMONGER_CEPCES=()
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#CERTMONGER_CEPCES[@]} -ne 0 ]]; then
true
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' && ${BASH_REMATCH[1]} == @("*"|"**"|"/"|"//") ]]; then
PARAM_VALUE="${PARAM#*=}"
CERTMONGER_CEPCES+="${PARAM_VALUE// /,}"
fi
true
fi
}
ubconfig_certmonger_cepces_live(){
true
}
################
##### MAIN #####
################
# Если файл подключен как ресурс с функциями, то выйти
return 0 2>/dev/null && return 0
if [[ -z $@ ]]; then
while read -r FUNCTION; do
$"${FUNCTION##* }"
done < <(declare -F | grep "declare -f exec_")
else
FUNCTION=
while [[ $# -gt 0 ]]; do
#[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
# Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] ||
declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"
shift
done
eval ${FUNCTION#*; }
fi
true