# +----------------------------------------> 1. Имя пользователя
# Если поле пароля содержит первый символ звездочку (*), то пользователь не сможет войти по паролю, но сможет другим способом (например по ключу через ssh)
# Если поле пароля содержит первый символ восклицательный знак (!), то пользователь вообще не сможет войти, даже по ключу
# Алгоритмы хеширования пароля:
# (empty) # DES
# $_$ # BSDi
# $1$ # MD5
# $2$ # bcrypt based on Blowfish
# $2a$ # Blowfish
# $2b$ # OpenBSD blowfish
# $2x$ # blowfish
# $2y$ # Eksblowfish
# $3$ # NTHASH
# $5$ # SHA-256
# $6$ # SHA-512
# $7$ # scrypt
# $md5$ # Solaris MD5
# $sha1$ # PBKDF1 with SHA1
# $gy$ # gost-yescrypt
# $y$ # yescrypt
# $argon2d$ # Argon2d
# $argon2i$ # Argon2i
# $argon2ds$ # Argon2ds
# $argon2id$ # Argon2id
# Получить хеш пароля, тип хеша
# $1 # Режим получения хеша, значения: hash, phash
# hash # Вернуть хеш, если первые символы %%, то удалить их и вернуть хеш
# phash # Если первые символы %%, то убрать %% и вернуть не шифрованный пароль, в остальных случаях вернуть хеш
# $2 # Тип хеша, поддерживаются yescrypt|gost-yescrypt|scrypt|bcrypt|bcrypt-a|sha512crypt|sha256crypt|sunmd5|md5crypt|bsdicrypt|descrypt|nt
# # В разработке argon2d|argon2i|argon2ds|argon2id
# $3 # Пароль пользователя шифрованный или не шифрованный. Если шифрованный, то вернётся как есть
if [[ -n ${PARAM} && ${SELECT_PASSWORD} =~ ^'%%'(.*)$ ]]; then
ubconfig --noexecute --target global set [users] USERADD[${SELECT_USERNAME}]="${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_EXTRAGROUPS}:${SELECT_OPTIONAL}:${BASH_REMATCH[1]}"
else
#return_hash_password "${SELECT_PASSWORD}"
#[[ -n ${HASH_PASSWORD_NEW} ]] && ubconfig --noexecute --target global set [users] USERADD[${SELECT_USERNAME}]="${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_EXTRAGROUPS}:${SELECT_OPTIONAL}:${HASH_PASSWORD_NEW}"
ubconfig --noexecute --target global set [users] USERADD[${SELECT_USERNAME}]="${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_EXTRAGROUPS}:${SELECT_OPTIONAL}:$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})"
fi
fi
done 3< <(printf "%s\n" "${!USERADD[@]}")
fi
# Проверим GROUPADD, если не указан в $1, то подгрузить из глобальной конфигурации
[[ -n ${PARAM} ]] || while IFS= read -r SELECT_GROUPADD; do
if [[ ! ${SELECT_GROUPADD%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]]; then
if [[ -n ${PARAM} && ${SELECT_PASSWORD} =~ ^'%%'(.*)$ ]]; then
ubconfig --noexecute --target global set [users] GROUPADD[${SELECT_GROUP}]="${SELECT_USERS}:${SELECT_GID}:${SELECT_OPTIONAL}:${SELECT_ADMINISTRATORS}:${BASH_REMATCH[1]}"
else
#return_hash_password "${SELECT_PASSWORD}"
#[[ -n ${HASH_PASSWORD_NEW} ]] && ubconfig --noexecute --target global set [users] GROUPADD[${SELECT_GROUP}]="${SELECT_USERS}:${SELECT_GID}:${SELECT_OPTIONAL}:${SELECT_ADMINISTRATORS}:${HASH_PASSWORD_NEW}"
ubconfig --noexecute --target global set [users] GROUPADD[${SELECT_GROUP}]="${SELECT_USERS}:${SELECT_GID}:${SELECT_OPTIONAL}:${SELECT_ADMINISTRATORS}:$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD})"
fi
fi
done 3< <(printf "%s\n" "${!GROUPADD[@]}")
fi
}
detectDE(){
@ -126,7 +210,7 @@ debug_log(){
}
log(){
echo "$@" 2>/dev/null >>/var/log/ublinuxlog
echo "$@" 2>/dev/null >>/var/log/ublinux.log
}
debug_mode(){
@ -227,7 +311,7 @@ allow_only_root(){
# Hotkeys functions #
#####################
notify-send(){
notify_send(){
local FIND_DISPLAY=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
local FIND_USER=$(who | grep '('${FIND_DISPLAY}')' | awk '{print $1}' | head -n 1) #'
${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] USERADD[${SELECT_USER}]="${SELECT_GECOS}:${SELECT_UID}:${SELECT_GROUP}:${SELECT_EXTRAGROUPS}:${SELECT_OPTIONAL}:${SELECT_PASSWORD}"
${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] USERSHADOW[${SELECT_USER}]="${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}"
${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] GROUPADD[${SELECT_GROUP}]="${SELECT_GUSERS}:${SELECT_GID}::${SELECT_ADMINISTRATORS}:${SELECT_PASSWORD}"
## Storage # Указывает, где хранить журнал. Доступны следующие параметры:
## # "volatile" - Журнал хранится в оперативной памяти, т.е. в каталоге /run/log/journal
## # "persistent" - Данные хранятся на диске, т.е. в каталоге /var/log/journal
## # "auto" - используется по-умолчанию
## # "none" - Журнал не ведётся
## Compress # Пороговое значение данных для сжатия и записи в ФС. Может принимать yes, no, цифра. Суффиксы, такие как K, M и G
## SplitMode # Определяет, следует ли разделять файлы журнала для каждого пользователя: «uid» или «none»
## RateLimitIntervalSec # Настраивает ограничение скорости, которое применяется ко всем сообщениям, интервал времени применения =30
## RateLimitBurst # Настраивает ограничение скорости, которое применяется ко всем сообщениям, лимит сообщений =10000
## SystemMaxUse # Указывает максимальное дисковое пространство, которое может использовать журнал в постоянном хранилище
## SystemKeepFree # Указывает объем места, которое журнал должен оставить свободным при добавлении записей журнала в постоянное хранилище
## SystemMaxFileSize # Определяет, до какого размера могут вырасти отдельные файлы журнала в постоянном хранилище перед ротацией
## RuntimeMaxUse # Указывает максимальное дисковое пространство, которое можно использовать в энергозависимом хранилище (в файловой системе /run)
## RuntimeKeepFree # Указывает объем пространства, которое будет выделено для других целей при записи данных в энергозависимое хранилище (в файловой системе /run)
## RuntimeMaxFileSize # Указывает объем места, которое отдельный файл журнала может занимать в энергозависимом хранилище (в файловой системе /run) перед ротацией
## ForwardToConsole # Перенаправить журнал на консоль, yes|no
## TTYPath # Измените используемый консольный TTY, если используется ForwardToConsole=yes. По умолчанию /dev/console.
## MaxLevelConsole # Тип сообщений перенаправляемые в журнал, варианты: emerg|alert|crit|err|warning|notice|info|debug или целочисленные значения в диапазоне 0–7
## <value> # Значение переменной настройки журнала
## Storage # Указывает, где хранить дамп ядра. Доступны следующие параметры:
## journal # Дампы будут храниться в журнале и перезаписываться в соответствии со стандартными принципами ротации журналов
## external # Значение по умолчанию, дампы сохраняются в каталоге /var/lib/systemd/coredump/
## none # Дампы ядра записываются (включая обратную трассировку, если возможно), но не сохраняются
## Compress # Используется для сжатия дампов ядра. Принимает логический аргумент - *yes или no
## *yes # Дампы сжимаются при сохранении (значение по умолчанию)
## no # Дампы сохраняются без сжатия.
## ProcessSizeMax # Максимальный размер дампа процесса, который может быть сохранен. Если размер дампа превышает значение этого параметра, то дамп сохранен не будет. Суфиксы: B
## # Параметры Storage=none и ProcessSizeMax=0 отключает всю обработку дампа памяти, за исключением записи журнала
## ExternalSizeMax # Максимальный (сжатый или несжатый) размер дампа процесса, который будет сохранен на диске
## JournalSizeMax # Максимальный (сжатый или несжатый) размер дампа процесса, который будет сохранен в журнале системы
## MaxUse # Максимальный объем общего дискового пространства, который может быть использован для хранения дампов процессов. Суфиксы: B,K,M,G,T,P,E
## KeepFree # Минимальный объем свободного дискового пространства, который должен оставаться на диске при хранении дампов. Суфиксы: B,K,M,G,T,P,E
## <value> # Значение переменной настройки журнала
# +----------------------------------------> 1. Имя пользователя
# Если поле пароля содержит первый символ звездочку (*), то пользователь не сможет войти по паролю, но сможет другим способом (например по ключу через ssh)
# Если поле пароля содержит первый символ восклицательный знак (!), то пользователь вообще не сможет войти, даже по ключу
# Алгоритмы хеширования пароля:
# (empty) # DES
# $_$ # BSDi
# $1$ # MD5
# $2$ # bcrypt based on Blowfish
# $2a$ # Blowfish
# $2b$ # OpenBSD blowfish
# $2x$ # blowfish
# $2y$ # Eksblowfish
# $3$ # NTHASH
# $5$ # SHA-256
# $6$ # SHA-512
# $7$ # scrypt
# $md5$ # Solaris MD5
# $sha1$ # PBKDF1 with SHA1
# $gy$ # gost-yescrypt
# $y$ # yescrypt
# $argon2d$ # Argon2d
# $argon2i$ # Argon2i
# $argon2ds$ # Argon2ds
# $argon2id$ # Argon2id
PATH_HOME="/home"
# Задать пароль пользователю
# $1 # Имя пользователя
# $2 # Зашифрованный пароля, если не указан, то пароль '!*' запрет авторизации
# if grep -q "^${SELECT_GROUP}:.*:${FINDGROUP_ID}:" ${FILE_GROUP} 2>/dev/null; then
# # Группа найдена, имя и id совпадают, пропускаем добавление
# continue
# elif grep -q "^${SELECT_GROUP}:" ${FILE_GROUP} 2>/dev/null; then
# # Группа найдена, имя и id несовпадают, удаляем группу
# echo "WARNING: the group '${SELECT_GROUP}' has an id different from the template /usr/share/ublinux-sysusers/*.sysusers and the id will be changed to '${SELECT_GROUP}:${FINDGROUP_ID}'"
# Группа найдена, имя и id несовпадают, удаляем группу
echo "WARNING: the group '${SELECT_GROUP}' has an id different from the template /usr/share/ublinux-sysusers/*.sysusers and the id will be changed to '${SELECT_GROUP}:${FINDGROUP_ID}'"
# Добавить пользователя системы в /etc/passwd. Если пользователь существует, то без изменений
# $1 Команды set или remove с режимом, варианты: set=|set+=|set++=|set-=|set--=|remove
# $2 Для команды set=|set+=|set++= параметр со значением, пример: USERADD[user-1]='Пользователь-1:x:x:vboxusers,libvirt:-s /usr/bin/bash:%%plain_password'
# Для команды set-=|set--=|remove параметр только с именем, пример: USERADD[superadmin]
# null Если отсутствует $@, то применяем из системной конфигурации USERADD[*]
##
## USERADD=no|none|disable # Отключить управление прользователями конфигурации
## user_name # Имя пользователя, обязательное поле
## lastchanged # Дата последнего изменения пароля. Указывается количество дней, исчисляется с 1 января 1970 года (дата эпохи). Возможно указать дату формата: YYYY-MM-DD
## minday # Минимальное количество дней действия пароля, прежде чем пароль пользователя может быть изменен. По умолчанию 0 означает отсутствие минимального срока действия парол
## maxday # Максимальное количество дней действия пароля после смены пароля пользователя. По умолчанию этот номер установлен на 99999
## warn # Количество дней предупреждения, в течение которого пользователь получает предупреждение о необходимости изменения пароля. По умолчанию 7
## inactive # Количество дней не активности пароля до отключения учетной записи пользователя. По умолчанию пустое
## expire # Дата, когда учетная запись была отключена. Указывается количество дней, исчисляется с 1 января 1970 года (дата эпохи). Возможно указать дату формата: YYYY-MM-DD
## <null> # Если один из параметров не задан, содержит пустое значение, то исходное значение не изменяется
## # Конвертировать кол-во дней от эпохи в понятную дату: date --date=@$(( DDDDD*(60*60*24) )); date --date=@EPOCH
## <name_repo> # Произвольное имя репозитория. Обязательный
## disable # Отключить отдин из репозиториев по умолчанию: core,extra,community,multilib,ublinux,modules
## <siglevel> # Уровень проверки подписи репозитория, можно выбрать одну из основных и вторую из дополнительных, разделитель запятая. Не обязательный
## # Последовательность имеет значение, т.к. накладываются правила каскадно. По умолчанию: Required,DatabaseOptional
## Never # Проверка подписи выполняться не будет. Основная
## PackageNever # Только для пакетов. Дополнительная
## DatabaseNever # Только для базы данных. Дополнительная
## Optional # Подписи будут проверяться при их наличии, но неподписанные базы данных и пакеты также будут приниматься. Основная
## PackageOptional # Только для пакетов. Дополнительная
## *DatabaseOptional # Только для базы данных. Дополнительная
## *Required # Подписи будут необходимы для всех пакетов и баз данных. Основная
## PackageRequired # Только для пакетов. Дополнительная
## DatabaseRequired # Только для базы данных. Дополнительная
## TrustedOnly # Если подпись проверяется для пакетов и базы, она должна находиться в связке ключей и быть полностью доверенной; маргинальное доверие не применимо
## PackageTrustedOnly # Если подпись проверяется только для пакетов
## DatabaseTrustedOnly # Если подпись проверяется только для базы данных
## TrustAll # Если подпись проверена, она должна находиться в связке ключей, но ей не требуется назначать уровень доверия (например, неизвестное или предельное доверие)
## PackageTrustAll # Если подпись проверена только для пакетов
## DatabaseTrustAll # Если подпись проверена только для базы данных
## <usage> # Уровень использования этого репозитория. Не обязательный
## *All # Включать все перечисленные функции для репозитория. Это значение по умолчанию
## Sync # Включать обновления для этого репозитория
## Search # Включать поиск этого репозитория
## Install # Включать установку пакетов из этого репозитория во время операции --sync
## Upgrade # Позволить этому репозиторию быть действительным источником пакетов при выполнении --sysupgrade
## <server_path_n> # Полный URL-адрес места, где можно найти базу данных, пакеты и подписи (если доступны) для этого репозитория. Обязательный
## # Возможно указать несколько, через запятую.
## <file> # Если указан доступный файл, то подключить как дополнительный файл расширения конфигурации
## file:// # URL префикс для репозитория в каталоге