p align="left">## Длина генерируемых паролей pass_len=8 ## Срок действия паролей (в днях) pass_expire=90 ## Получение имени программы (скорее всего, "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 in a group" echo " -a change everyone's password" echo " -v verbose" echo " -n don't do i t . just simulate (implies -v)" e x i t 0 } short_usage () { echo >&2 "usage: $prog [-v] [-g] [-a] name..." echo >&2 " $prog -h for help" e x i t 1 # echo something, but only i f in verbose mode vecho () { test -n "$verbose" && echo "$@" } # Построение случайного пароля. # Если программа pwgen доступна, используем # Если программа недоступна, читаем /dev/urandom и отфильтровываем все # символы, не являющиеся алфавитно-цифровыми, пока количество символов # не окажется достаточным для пароля. Символы в "tr -d" определяют # ASCII-коды (в восьмеричной записи) диапазонов удаляемых символов. randompass () # Функция интерпретирует режим (пользователи / группы / серийная замена) # и возвращает список имен пользователей 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 while [ -n "$1" ] : do g_ent=$(getent group "$1" 2>&-) i f [ -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=l: shift :: -v) verbose=l: shift ;: -a) all_mode=l: shift :: -n) simulate=true: verbose=l: shift :: -M) mass_out=l: shift :: # we're called from mass_useradd -h | -? | --help) usage :: --) eol-1; shift :: -*) short_usage :: *) eol=l :: 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 change -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 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" processed=$(expr $processed + 1) done i f [ $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 16. Серийная замена паролей Для серийной смены паролей можно воспользоваться сценарием mass_passwd из раздела 15. Сценарий позволяет задать состав пользователей тремя разными способами: # mass_passwd пользователь1 пользователь2 ... # masspasswd -g группа группа... # mass_passwd -a В первом случае передается список имен пользователей, разделенных пробелами. Во втором случае изменяются пароли пользователей, входящих в указанные группы. В третьем случае изменяются все пароли из /etc/passwd. Сценарий mass_passwd генерирует для каждого пользователя отдельный файл с указанием новых паролей и инструкциями, которые вы сочтете нужным включить. Это позволяет легко распечатать отдельную инструкцию для каждого пользователя. Ключ -n тестирует команду без ее фактического выполнения: # ./mass_passwd -v -g -n usergroup generating password for dawns… teivuphu generating password for nikitah…kohfahsh 2 password(s) reset - see /root/mass_passwd/mass_passwd.log Пароли остаются прежними, выполнение команды в этом режиме всего лишь проверяет параметры перед внесением изменений. 17. Серийное включение пользователей в группы Для того чтобы добавить большое количество пользователей в группу нужно вставить список имен прямо в файл /etc/group. Далее описан быстрый способ построения списка пользователей для вставки в /etc/group. Он основан на схеме нумерации UID, позволяющей легко отсортировать нужную группу пользователей. Для примера воспользуемся схемой "Trainers/ Coaches/Players", описанной в разделе 1. Добавим в группу Trainers несколько новых членов: $ awk -F: '($3 >= 1050) && ($3 <= 1060) { print $1}' /etc/passwd | tr '\n' ',' bcool.bkind.fmow.kthxbye.oknodo Далее копируем и вставляем список в /etc/group. А если в вашей системе нет аккуратной, четкой схемы нумерации UID, то можно воспользоваться данными GECOS. Следует выбрать одно из полей для хранения метки. Поле "прочее" лучше всего подходит для этой цели, поскольку пользователи не могут изменять его по своему усмотрению. Оно находится в данных GECOS -- пяти полей, разделенных запятыми. Данные GECOS выглядят примерно так: bcool:х:1300:1300:Bob Cool.... trainer:/home/bkind:/bin/bash bkind:x:1055:1055:Bev Kind....trainer:/home/bkind:/bin/bash После добавления меток выборка пользователей легко производится при помощи grep и awk: $ cat /etc/passwd | grep trainer awk -F: '{ print $1}' | tr '\n' ',' bkind.bcool. 18. Временное использование привелегий ROOT Когда потребуется выполнить какую-нибудь административную операцию, воспользуйтесь командой su (Switch User): carla@windbag:~$ su Password: root@windbag:/home/carla# Затем вернитесь к своей "основной личности": root@windbag:/home/carla# exit exit carla@windbag:~$ Переключение на root с восстановлением конфигурации окружения и командного процессора root: carla@windbag:~$ su - Password: root@windbag:/home/carla~# Переход на другой командный интерпретатор: $ su - --shell=tcsh Password: Доступные командные процессоры перечислены в /etc/shells. Команда su позволяет переключиться на любую учетную запись, пароль которой вам известен. Дефис после su существенно влияет на результат выполнения команды. Без дефиса команда сохраняет старую системную конфигурацию и переменные окружения -- командный процессор, редактор по умолчанию, пути и umask. 19. Временное предоставление привелегий ROOT командой SUDO Требуется поручить некоторые операции администрирования системы другим пользователям или создать дополнительный уровень безопасности для ваших административных потребностей, но это нужно сделать так, чтобы мощь привилегий root использовалась в ограниченном объеме, не раскрывая пароль root. Воспользуйтесь sudo -- командой, которая предоставляет ограниченные права root конкретным пользователям для решения конкретных задач и регистрирует их действия без сообщения пароля root. Допустим, имеется пользователь jhaugh, которому вы хотите предоставить полные права root. Поскольку пользователи sudo имеют собственные пароли, пароль root остается защищенным. Отредактируйте файл /etc/sudoers командой visudo - файл открывается в редакторе по умолчанию. # visudo # Файл sudoers # # Этот файл ДОЛЖЕН редактироваться командой 'visudo' # с правами root. # За дополнительной информацией о записи в файл # sudoers обращайтесь к man-странице. # # Спецификацияпсевдонимов хостов # Спецификация псевдонимов пользователей # Спецификация псевдонимов команд # Спецификация привилегий пользователей root ALL=(ALL) ALL Для начала создайте псевдоним хоста: Host_Alias LOCALHOST= local host В секции "Спецификация привилегий пользователей" ("User privilege specification") добавляются отдельные пользователи: jhaugh ALL=(ALL) ALL Эта строка предоставляет jhaugh привилегии root для выполнения любых операций в системе и на подключенных компьютерах. Допустим, вы хотите предоставить другому пользователю tgwynne привилегии root только на локальном компьютере. Включите следующую запись: tgwynne LOCALHOST = ALL А пользователю msmith разрешается только выключение локального компьютера: msmith LOCALHOST=/sbin/shutdown, /sbin/halt Предоставление группам обычных пользователей права выключения своих компьютеров: # Спецификация псевдонимов хостов Host_Alias LOCALHOST = local host # Спецификация псевдонимов пользователей User_Alias USERS = tgwynne. msmith. jhaugh, \ abyron. jwinters # Спецификация псевдонимов команд Cmnd_Alias SHUTDOWN - /usr/sbin/shutdown, /usr/sbin/halt. \ /usг/sbin/reboot, /usr/sbin/poweroff # Спецификация привилегий пользователей USERS LOCALHOST = SHUTDOWN Вызов команды sudo выглядит так: $ sudo /usr/sbin/halt Команда запрашивает у пользователей их пароли, после чего завершается. Чтобы узнать, выполнение каких команд им разрешено, пользователи могут выполнить следующую команду: $ sudo -1 User jhaugh may run the following commands on this host: (ALL) ALL Команда sudo фиксирует ошибки в системном журнале и передает сообщение root: $ sudo /usr/sbin/halt carla is not in the sudoers file. This incident will be reported. Вы можете определять группы серверов и предоставлять пользователям привилегии для группы: # Спецификация псевдонимов хостов Host Alias FILESERVERS - hostl. host2. host3 # Спецификация псевдонимов пользователей User_Alias FILESERVERADMINS = jhaugh. abyron. jwinters # Спецификация псевдонимов команд Cmnd_Alias FILEUTILS = /bin/chgrp, /bin/chmod, \ /bin/chown, /bin/cp, /bin/dd, /bin/df, \ /bin/dir, /bin/dircolors, /bin/du, /bin/install, \ /bin/In, /bin/Is. /bin/mkdir, /bin/mkinfo, \
Страницы: 1, 2, 3, 4, 5
|