/etc/skel - это папка, которая будет клонирована для новых пользователей. Есть ли способ, которым мы можем определить правила для копирования из папки /etc/skel?
Например, я ищу способ, который, если пользователь создан и принадлежит группе с именем A, клон /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
Команда adduser может запускать скрипт для конкретного сайта, чтобы выполнить любую настройку, например удаление файлов. Если это приемлемо, чтобы начать с полной копии, а затем удалить некоторые файлы после этого, то этот подход может сработать для вас.
Из справочной страницы adduser (8):
Если файл /usr/local/sbin/adduser.local существует, он будет выполнен после установки учетной записи пользователя, чтобы выполнить локальную настройку. Аргументы, переданные в adduser.local, следующие: username 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. [ ! d9]
Обратите внимание, что команда 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
Команда adduser может запускать скрипт для конкретного сайта, чтобы выполнить любую настройку, например удаление файлов. Если это приемлемо, чтобы начать с полной копии, а затем удалить некоторые файлы после этого, то этот подход может сработать для вас.
Из справочной страницы adduser (8):
Если файл /usr/local/sbin/adduser.local существует, он будет выполнен после установки учетной записи пользователя, чтобы выполнить локальную настройку. Аргументы, переданные в adduser.local, следующие: username 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. [ ! d9]