программно клонировать / etc / skel для новых пользователей

/etc/skel - это папка, которая будет клонирована для новых пользователей. Есть ли возможный способ определить правила для копирования из папки /etc/skel?

Например, я ищу способ, которым, если пользователь создан и принадлежит к группе с именем A, папка clone /etc/skel, за исключением /etc/skel/not_for_a.txt. Возможно ли это?

11
задан 6 December 2017 в 07:54

4 ответа

Обратите внимание, что команда 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

.
11
ответ дан 6 December 2017 в 07:54
  1. Создать дополнительные skel каталоги.

    sudo mkdir /etc/skel{A,B}
    
  2. Скопируйте содержимое /etc/skel в /etc/skelA.

    sudo cp /etc/skel/* /etc/skelA/
    
  3. Настройка альтернативного содержимого каталога skel.

  4. adduser без homedir, но с другими обычными настройками. Замените многоточие соответствующими настройками.

    sudo adduser --no-create-home ... bob
    
  5. 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
8
ответ дан 6 December 2017 в 07:54

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 ...
3
ответ дан 6 December 2017 в 07:54

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.

3
ответ дан 6 December 2017 в 07:54

Другие вопросы по тегам:

Похожие вопросы: