/etc/skel
- это папка, которая будет клонирована для новых пользователей. Есть ли возможный способ определить правила для копирования из папки /etc/skel
?
Например, я ищу способ, которым, если пользователь создан и принадлежит к группе с именем A
, папка clone /etc/skel
, за исключением /etc/skel/not_for_a.txt
. Возможно ли это?
Обратите внимание, что команда useradd
позволяет вам указать пользовательский каталог SKEL, используя опцию -k
. Вы можете создать каталог / etc / skel-for-group-A без not-for-a.txt
, а затем добавить новых пользователей со своей группой по умолчанию как A и указать свой каталог SKEL с помощью команды:
useradd username -g groupA -k /etc/skel-for-group-A -m
См .: http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html
. Создать дополнительные skel
каталоги.
sudo mkdir /etc/skel{A,B}
Скопируйте содержимое /etc/skel
в /etc/skelA
.
sudo cp /etc/skel/* /etc/skelA/
Настройка альтернативного содержимого каталога skel.
adduser
без homedir, но с другими обычными настройками. Замените многоточие соответствующими настройками.
sudo adduser --no-create-home ... bob
mkhomedir_helper
для создания пользователей homedir на основе альтернативного skel dir.
sudo mkhomedir_helper bob /etc/skelA
#!/bin/bash
### a bare bones dumb script to create a user with a homedir based on an alternitive skeldir
adduseropt="--no-create-home --ingroup"
# assumes $1 will be user TODO add sanity check
# Assumes $2 will be alternitive skeldir TODO add sanity check
# assumes $3 will be a group TODO add sanity check
sudo adduser --no-create-home $adduseropt $3 $1
sudo mkhomedir_helper $1 $2
adduser
поддерживает ограниченный способ исключения файлов из каталога скелета. Из man adduser.conf
:
SKEL_IGNORE_REGEX
Files in /etc/skel/ are checked against this regex, and not
copied to the newly created home directory if they match. This
is by default set to the regular expression matching files left
over from unmerged config files (dpkg-(old|new|dist)).
Хотя вы не можете установить это регулярное выражение из командной строки, вы можете установить используемый файл конфигурации, используя опцию --conf
. Таким образом, вы можете создать дополнительные копии /etc/adduser.conf
, которые отличаются только на SKEL_IGNORE_REGEX
, и использовать их:
(grep -v '^SKEL_IGNORE_REGEX' /etc/adduser.conf; printf "%s\n" 'SKEL_IGNORE_REGEX="not_for_a.txt"') > /etc/adduser_A.txt
sudo adduser --conf /etc/adduser_A.txt ...
adduser
команда может запустить сайт-специфичный скрипт, чтобы сделать любую установку как удаление файлов. Пока приемлемо запуститься с полной копии и затем удалить некоторые файлы впоследствии, затем этот подход мог работать на Вас.
От adduser (8) страница справочника:
Если файл
/usr/local/sbin/adduser.local
существует, это будет выполняться после того, как учетная запись пользователя была настроена, чтобы сделать любую локальную установку. Аргументы передалиadduser.local
:имя пользователя uid корневой каталог ценуроза
Таким образом, все, что необходимо сделать, записать сценарий, который берет четыре параметра и использование, оно удаляет любые файлы, в которых Вы нуждаетесь. Сохраните его как /usr/local/sbin/adduser.local
и удостоверьтесь, что это отметило исполняемый файл (chmod a+x
).
Вот что-то для запущения Вас:
#!/bin/bash
## Site-specific setup for newly-created users.
## adduser(8) will call this script after setting up a new user.
set -euo pipefail
if [[ "$#" != 4 ]]; then
echo "usage: $0 username uid gid home" > /dev/stderr
fi
NEW_USERNAME="${1:?}"
NEW_UID="${2:?}"
NEW_GID="${3:?}"
NEW_HOME="${4:?}"
# The groups command outputs a space-separated list of group names
IFS=' '
for group in $(groups "${NEW_USERNAME}"); do
case "${group}" in
a)
[[ "${VERBOSE}" > 0 ]] && echo Removing file for a
rm "${NEW_HOME}/not_for_a.txt"
;;
b)
[[ "${VERBOSE}" > 0 ]] && echo Removing dir for b
rm -r "${NEW_HOME}/not_for_b/"
;;
*)
[[ "${VERBOSE}" > 1 ]] && echo No special setup required for $group
;;
esac
done
Интересная часть, которую Вы захотите отредактировать, является строками, которые похожи на этого:
a)
[[ "${VERBOSE}" > 0 ]] && echo Removing file for a
rm "${NEW_HOME}/not_for_a.txt"
;;
Можно заполнить фактическое название группы и поведение, которое требуется видеть вместо a)
и rm not_for_a.txt
.