Linux -сборник рецептов

         

Управление пользователями и группами










допускаются. Рекомендуется использовать сильные пароли, то есть не выбирать в качестве пароля имена, слова из словаря, дни рождения или адреса. Пароли рекомендуется записывать и хранить в надежном месте. К сожалению, многие пользователи выбирают слабые, легко угадываемые пароли или хранят их в небезопасных местах (например, на записке, прикрепленной к монитору).
Пароли Linux не восстанавливаются. При потере пароля следует обратиться к суперпользователю для получения нового пароля.
См. также passwd(1), passwd(5).



Adding new group squid (109). Adding new user squid (109) with group squid Not creating home directory
Проверьте результат:
# cat /etc/passwd | grep squid squid:x:109:109::/home/squid:/bin/false
Хотя подстрока /home/squid присутствует, домашний каталог не создается.
А вот как то же самое делается в useradd:
# useradd -d /dev/nuil -g squid -s /bin/false squid



Листинг 8.1 (продолжение)
# имя_пользователя : имя фамилия # Чтобы в качестве разделителя использовалась запятая, замените # IFS=":$IFS" на IFS=",$IFS" while IFS=":$IFS" read username realname; do # Сначала удаляем пустые строки и комментарии case "Susername" in '' | \#*) continue ;; esac # Чтение /etc/passwd и /etc/group и вычисление # следующих свободных значений UID and GID. # Программа начинает с (id=1000}, измените для своей системы id=$({ getent passwd: getent group; } | cut -f3 -d: | sort -un | awk 'BEGIN { id=1000 } $1 == id { id++ } $1 > id { print id: exit }') # Добавление новых пользователей в /etc/group и /etc/passwd. # Создание домашних каталогов командой chmod 700 # Все параметры groupadd, useradd и chmod # можно изменить в соответствии со спецификой системы. groupadd -g $id Susername useradd -m -c "$realname" -g $username -u $id $username chmod 700 /home/$username # Назначение пароля. Для этой цели вызывается другой сценарий # mass_passwd. который может использоваться независимо. # Сценарий mass_passwd выводит имя пользователя, пароль # и идентификатор пользователя. $(dirname $0)/lmass_passwd -M $username done
Листинг 8.2. Программа mass_passwd
#!/bin/sh ## Каталог для сохранения файлов "username.passwd.txt" ## Если каталог не существует, он будет создан. text_file_dir=$HOME/mass_passwds log_file=mass_passwd.log ## Минимальный идентификатор для "обычных" пользователей min_uid=1000 ## Длина генерируемых паролей pass_len=8 ## Срок действия паролей (в днях) pass_expire=90 ###################################################################### ## При желании отредактируйте текст между двумя строками ----------. 8.17. Серийное добавление новых пользователей # Получение имени программы (скорее всего "mass_passwd") prog=${0##*/}
usage () { echo "usage: $prog [-v] [-n] username ..." echo " $prog [-v] [-n] [-g] groupname ..." echo " $prog [-v] [-n] [-a]" echo " -g change passwords of everyone ina group" echo " -a change everyone's password" echo " -v verbose" echo " -n don't do it, just simulate (implies -v)" exit 0 }
short_usage () { echo >&2 "usage: $prog [-v] [-g] [-a] name..." echo >&2 " $prog -h for help" exit 1 } # echo something, but only i f in verbose mode vecho () { test -n "$verbose" && echo "$@" } # Построение случайного пароля. # # Если программа pwgen доступна, используем ее -- она для этого # предназначена и хорошо работает. # # Если программа недоступна, читаем /dev/urandom и отфильтровываем все # символы, не являющиеся алфавитно-цифровыми, пока количество символов # не окажется достаточным для пароля. Символы в "tr -d" определяют # ASCII-коды (в восьмеричной записи) диапазонов удаляемых символов. # # Подобное использование /dev/urandom крайне неэффективно. # но это несущественно, randompass () { pwgen $pass_ len 1 2>&- || tr -d '[\000-\057][\072-\100][\133-\140][\173-\377]' < /dev/urandom | dd bs=$pass_len count=l 2>&- } # Функция интерпретирует режим (пользователи / группы / серийная замена) # и возвращает список имен пользователей get_users () { if [ -n "$all_mode" ]; then getent passwd | awk -F: '{if ($3 >= '$min_uid') (print $1}}' return fi if [ -z "$group_mode" ]; then echo "$@" return fi while [ -n "$1" ]; do
продолжение ==>


Листинг 8.2 {продолжение)
g_ent=$(getent group "$1" 2>&-) if [ -z "$g_ent" ]; then echo >&2 "warning: $1: group not found" continue fi members=${g_ent##*:} gid=${g_ent%:*} gid=${gid##*:} echo "$members" | tr '.' ' ' getent passwd | awk -F: '{if ($4 == '$gid') { print $1 } }' shift done } # Основной код group_mode=; verbose=; all_mode=; simulate=; eol=; while [ -z "$eol" ]; do case "$1" in -g) group_mode=1; shift ;; -v) verbose=1; shift ;; -a) all_mode=1; shift ;; -n) simulate=true; verbose=1; shift ;; -M) mass_out=1; shift ;; # we're called from mass_useradd -h | -? | --help) usage ;; --) eol=1; shift ;; -*) short_usage ;; *) eol=1 ;; esac done # Настройка безопасного окружения и каталога для текстовых файлов. # предназначенных для вывода на печать. PATH=/usr/sbin:/usr/bin:$PATH umask 077 mkdir -р $text_file_dir cd $text_file_dir
processed=0 for u in $(get_users "$@"); do vecho -n "generating password for $u..." pass=$(randompass) echo "$u:$pass" | eval $simulate chpasswd vecho -n "." eval $simulate chage -M $pass_expire -d 2003-01-01 $u vecho -n "."
rm -f $u.passwd.txt echo > $u.passwd.txt "\ ---------------------------------------------------------------------- Login name: $u Password: $pass Please log in and change your password: the system should prompt you to do this when you log in. You can change your 8.18. Серийная замена паролей password at any time with the 'passwd' command. Choose a strong password - everyday words, birthdays, names of people or animals, all these are too easy to guess. Also, DO NOT give your password to anyone, ever. The IT staff will never ask you for your password, and neither should anyone else. You will be held responsible for all activity done via your account. ----------------------------------------------------------------------" printf >> $log_file "$(date) %-12s %s\\n" $u $pass vecho "$pass" if [-n "$mass_out" ]; then uid=$(getent passwd $u | cut -f3 -d:) echo -e "$u\\t$pass\\t$uid" fi processed=$(expr $processed + 1) done
if [ $processed -gt 0 ]; then test -z "$mass_out" && echo >&2 "$processed password(s) reset - see $text_file_dir/$log_file" else echo >&2 "no users specified - see '$prog -h' for help" fi См. также
bash(1), pwgen(1); домашняя страница программы pwgen (http://sourceforge.net/proiects/pwgen/).



Сценарий mass_passwd генерирует для каждого пользователя отдельный файл с указанием новых паролей и инструкциями, которые вы сочтете нужным включить. Это позволяет легко распечатать отдельную инструкцию для каждого пользователя.

Содержание раздела