From e9490837a153e4ab3f4b8b60af4c0df1e2215603 Mon Sep 17 00:00:00 2001 From: asmeron Date: Wed, 11 Dec 2024 17:39:31 +0600 Subject: [PATCH] Add fix kesl.service --- ublinux/rc.d/rc.preinit | 11 ++- ublinux/rc.pamsession.d/01-placeondesktop | 19 ++-- ublinux/rc.post.d/90-kesl | 14 --- ublinux/rc.preinit.d/65-kesl | 100 ++++++++++++++++++++++ ublinux/templates/ublinux-data.ini | 6 +- 5 files changed, 119 insertions(+), 31 deletions(-) delete mode 100755 ublinux/rc.post.d/90-kesl create mode 100755 ublinux/rc.preinit.d/65-kesl diff --git a/ublinux/rc.d/rc.preinit b/ublinux/rc.d/rc.preinit index 18fd9fe..337f994 100755 --- a/ublinux/rc.d/rc.preinit +++ b/ublinux/rc.d/rc.preinit @@ -13,16 +13,15 @@ debug_log "starting rc.preinit" debug_shell # install systemd services -[ ! -h usr/lib/systemd/system/ublinux-postinit.service ] && bash usr/lib/ublinux/rootfs-patches/ublinux/ublinux-00-install.sh +[[ ! -h usr/lib/systemd/system/ublinux-postinit.service ]] && bash usr/lib/ublinux/rootfs-patches/ublinux/ublinux-00-install.sh # We have to launch some rc scripts -for a in usr/lib/ublinux/rc.preinit/* ;do - [ -x $a ] && $a 2>/dev/null +for SELECT_SCRIPT in usr/lib/ublinux/rc.preinit/* ;do + [[ -x ${SELECT_SCRIPT} ]] && ${SELECT_SCRIPT} 2>/dev/null done -for a in usr/lib/ublinux/rc.preinit.d/* ;do - [ -x $a ] && $a 2>/dev/null & +for SELECT_SCRIPT in usr/lib/ublinux/rc.preinit.d/* ;do + [[ -x ${SELECT_SCRIPT} ]] && ${SELECT_SCRIPT} 2>/dev/null & done wait - true diff --git a/ublinux/rc.pamsession.d/01-placeondesktop b/ublinux/rc.pamsession.d/01-placeondesktop index 068b8b6..477adac 100755 --- a/ublinux/rc.pamsession.d/01-placeondesktop +++ b/ublinux/rc.pamsession.d/01-placeondesktop @@ -275,17 +275,18 @@ copy_desktop(){ FILE_DESKTOP=${FIND_SELECT_DESKTOP} fi if [[ ${FIND_SELECT_DESKTOP} == "@lock" ]]; then - # Если система загружена в режимах песочницы без сохранённого профиля, то в AUFS не применить аттрибут immutable + # Если система загружена в режимах песочницы без сохранённого профиля, то в AUFS не применить аттрибут chattr -i (immutable) + # Для этого в песочнице каталог /home перемонтируется в tmpfs #[[ ${SYSTEMBOOT_STATEMODE} == @(sandbox|sandbox_hdd) ]] - chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" 2>/dev/null chown -R root:root "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" chmod -R u+rwX,go-rwx "${XDG_DESKTOP_DIR}" chmod -R u+rwX,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs" setfacl -R -m u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" setfacl -R -m d:u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" - chattr +i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + chattr +i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" 2>/dev/null elif [[ ${FIND_SELECT_DESKTOP} == "@dislock" ]]; then - chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" 2>/dev/null setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" chmod -R u+rwX,g+rX,g-w,o+rX,o-w "${XDG_DESKTOP_DIR}" @@ -294,20 +295,20 @@ copy_desktop(){ elif [[ -n ${FILE_DESKTOP} ]]; then [[ -f "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" ]] || cp -f "${FILE_DESKTOP}" "${XDG_DESKTOP_DIR}" if [[ -n ${FIND_SELECT_DESKTOP_LOCK} ]]; then - chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" 2>/dev/null chown root:root "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" if [[ ${FILE_DESKTOP##*/} =~ .*".desktop"$ ]]; then - chmod o-rwx,ug+rwx "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + chmod o-rwx,ug+rwx "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" setfacl -m u:${SELECT_USER}:rx "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" else - chmod o-rwx,ug+rwX "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" + chmod o-rwx,ug+rwX "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" setfacl -m u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" fi chmod u+rw,u-x,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs" setfacl -m u:${SELECT_USER}:r "${SELECT_USER_HOME}/.config/user-dirs.dirs" - chattr +i "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null + chattr +i "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" 2>/dev/null else - chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" #2>/dev/null + chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" 2>/dev/null setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" if [[ ${FILE_DESKTOP##*/} =~ .*".desktop"$ ]]; then diff --git a/ublinux/rc.post.d/90-kesl b/ublinux/rc.post.d/90-kesl deleted file mode 100755 index 05039c5..0000000 --- a/ublinux/rc.post.d/90-kesl +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -ENABLED=yes -[[ ${ENABLED} == "yes" ]] || exit 0 - -if [ -d /var/opt/kaspersky ] ;then - if [ -d /mnt/livedata/ublinux-data ] ;then - if [ ! -d /mnt/livedata/ublinux-data/cache/kaspersky ] ;then - mkdir -p /mnt/livedata/ublinux-data/cache/kaspersky - cp -pr /var/opt/kaspersky/* /mnt/livedata/ublinux-data/cache/kaspersky || exit 1 - fi - mount --bind /mnt/livedata/ublinux-data/cache/kaspersky /var/opt/kaspersky - fi -fi diff --git a/ublinux/rc.preinit.d/65-kesl b/ublinux/rc.preinit.d/65-kesl new file mode 100755 index 0000000..fbb8362 --- /dev/null +++ b/ublinux/rc.preinit.d/65-kesl @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# +# Initial script for UBLinux +# This script are launching before starting init from initrd script +# Current dir allways must be set to root (/) +# All system path must be relative, except initrd dirs + +## +## Fix autostart Kaspersky Endpoint Security for Linux +## + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 +DEBUGMODE=no + +PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin + +[[ -d /usr/lib/ublinux ]] && { unset ROOTFS; unset CMD_CHROOT; } || { ROOTFS="/sysroot"; CMD_CHROOT="chroot ${ROOTFS} "; } +SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +debug_mode "$0" "$@" + +SYSCONF="${ROOTFS}${SYSCONF}" +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/system; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +exec_kesl_timer(){ + create_kesl_timer(){ + [[ -e ${ROOTFS}/etc/systemd/system/${KESL_TIMER_NAME} ]] \ + || cat < "${ROOTFS}/etc/systemd/system/${KESL_TIMER_NAME}" +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Daily kesl on boot + +[Timer] +OnBootSec=1min +OnUnitActiveSec=1d +AccuracySec=1h +RandomizedDelaySec=30s + +[Install] +WantedBy=timers.target +EOF + } + remove_kesl_timer(){ + [[ -e "${ROOTFS}/etc/systemd/system/${KESL_TIMER_NAME}" ]] && rm -f "${ROOTFS}/etc/systemd/system/${KESL_TIMER_NAME}" 2>/dev/null + [[ -e "${ROOTFS}/etc/systemd/system/timers.target.wants/${KESL_TIMER_NAME}" ]] && rm -f "${ROOTFS}/etc/systemd/system/timers.target.wants/${KESL_TIMER_NAME}" 2>/dev/null + } + enable_kesl_timer(){ + [[ -d ${ROOTFS}/etc/systemd/system/timers.target.wants ]] || install -dm0755 "${ROOTFS}/etc/systemd/system/timers.target.wants" + [[ -e "${ROOTFS}/etc/systemd/system/timers.target.wants/${KESL_TIMER_NAME}" ]] || ln -sf "/etc/systemd/system/${KESL_TIMER_NAME}" "${ROOTFS}/etc/systemd/system/timers.target.wants/${KESL_TIMER_NAME}" 2>/dev/null + } + KESL_SERVICE_NAME="kesl.service" + KESL_TIMER_NAME="kesl.timer" + # Если Касперский не установлен, то удалить kesl.timer + [[ ! -e ${ROOTFS}/var/opt/kaspersky/kesl/install-current ]] && remove_kesl_timer && return 0 + ISSYSTEMD=$(readlink -fq ${ROOTFS}/usr/bin/init | grep "lib/systemd/systemd$") + [[ -n ${ISSYSTEMD} ]] || return 0 + # Поиск включеного сервиса kesl.service + KESL_SERVICE_FIND=$(find ${ROOTFS}/etc/systemd/system/multi-user.target.wants -iname "${KESL_SERVICE_NAME}" 2>/dev/null) + if [[ -n ${KESL_SERVICE_FIND} ]]; then + rm -f ${KESL_SERVICE_FIND} 2>/dev/null + create_kesl_timer + enable_kesl_timer + elif [[ "${SERVICES_ENABLE}" =~ (^|,)+("${KESL_SERVICE_NAME%%.*}"|"${KESL_SERVICE_NAME}"|"${KESL_TIMER_NAME}")(,|$| )+ ]]; then + # Если указан автозапуск сервиса в конфигурации, то меняем на kesl.timer + sed -E "/SERVICES_ENABLE=/s/(=|,|\")+(${KESL_SERVICE_NAME}|${KESL_SERVICE_NAME%%.*})(,|$|\")+/\1${KESL_TIMER_NAME}\3/g" -i ${SYSCONF}/system + create_kesl_timer + enable_kesl_timer + fi +} + +## Копировать касперский в кеш каталог реальной файловой системы, для использования в режимах песочници +## Оценить необходимость, нужно тестировать +#exec_bind_mount(){ +# return 0 +# if [[ -d ${ROOTFS}/var/opt/kaspersky ]]; then +# if [[ -d ${ROOTFS}/mnt/livedata/ublinux-data]; then +# if [[ ! -d ${ROOTFS}/mnt/livedata/ublinux-data/cache/kaspersky ]]; then +# mkdir -p ${ROOTFS}/mnt/livedata/ublinux-data/cache/kaspersky +# cp -pr ${ROOTFS}/var/opt/kaspersky/* ${ROOTFS}/mnt/livedata/ublinux-data/cache/kaspersky || exit 1 +# fi +# mount --bind ${ROOTFS}/mnt/livedata/ublinux-data/cache/kaspersky ${ROOTFS}/var/opt/kaspersky +# fi +# fi +#} + +################ +##### MAIN ##### +################ + + exec_kesl_timer $@ diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 732d25c..9061f1d 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -1422,7 +1422,8 @@ VERSION= ## [*] # Все пользователи системы. Если не указано, то все пользователи системы ## = # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop" ## =@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения -## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог "Рабочего стола" рекурсивно +## =@lock # Установить владельца:группу root:root, права ACL только чтения на каталог "Рабочего стола" рекурсивно и immutable +## # В полной песочнице применяется только при загрузке системы ## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог "Рабочего стола" рекурсивно ## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop@lock ## APPDESKTOP_PLACEONDESKTOP_INIT=gimp,pinta @@ -1435,7 +1436,8 @@ VERSION= ## [*] # Все пользователи системы. Если не указано, то все пользователи системы ## = # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop" ## =@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения -## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог рабочего стола рекурсивно +## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог рабочего стола рекурсивно и immutable +## # В полной песочнице применяется только при загрузке системы ## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог рабочего стола рекурсивно ## APPDESKTOP_PLACEONDESKTOP[superadmin,@wheel]=ubinstall,htop ## APPDESKTOP_PLACEONDESKTOP[user-1]=htop@lock