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

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

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

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

  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

adduser Команда может запустить специфичный для сайта сценарий, чтобы выполнить любую настройку, например удаление файлов. Если допустимо начинать с полной копии, а затем удалять некоторые файлы, тогда этот подход может работать для вас.

Со страницы руководства adduser(8):

Если файл /usr/local/sbin/adduser.local существует, он будет выполнен после того, как учетная запись пользователя была настроена для выполнения любой локальной настройки. Аргументы переданы adduser.local являются:

имя пользователя uid gid home-directory

Поэтому все, что вам нужно сделать, это написать скрипт, который принимает четыре параметра и использовать его для удаления любых файлов, которые вам нужны. Сохранить как /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,

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 ...
Другие вопросы по тегам