Смекни!
smekni.com

Управление учетными записями пользователей (стр. 3 из 6)

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 $username

useradd -m -c "$realname" -g $username -u $id $username

chmod 700 /home/$username

# Назначение пароля. Для этой цели вызывается другой сценарий

# mass_passwd, который может использоваться независимо.

# Сценарий mass_passwd выводит имя пользователя, пароль

# и идентификатор пользователя.

$(dirname $0)/lmass_passwd -M $username

done

Листинг 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

## Получение имени программы (скорее всего, "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 () {

pwgen $pass_len 1 2>&- ||

tr -d '[&bsol;000-&bsol;057][&bsol;072-&bsol;100][&bsol;133-&bsol;140][&bsol;173-&bsol;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

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 "&bsol;

------------------------------------------------------------------------------------------------------------------------

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&bsol;n" $u $pass

vecho "$pass"

if [ -n "$mass_out" ]: then

uid=$(getent passwd $u | cut -f3 -d:)

echo -e "$u&bsol;t$pass&bsol;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 '&bsol;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 '&bsol;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, &bsol;

abyron. jwinters

# Спецификация псевдонимов команд

Cmnd_Alias SHUTDOWN - /usr/sbin/shutdown, /usr/sbin/halt. &bsol;

/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.

Вы можете определять группы серверов и предоставлять пользователям привилегии для группы: