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


# Получение имени программы (скорее всего "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 Управление пользователями и группами


Листинг 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. Серийное добавление новых пользователей