Курсовая работа: Управление учетными записями пользователей
Изменения можно вносить последовательно:
# chgrp 800 /usr/src/include/lber.h
А можно выполнить замену одновременно посредством совместного использования find и chgrp:
# find / -gid 750 -exec chgrp -v 800 {} \;
11. Создание системного пользователя
Если есть необходимость создать системного пользователя для таких программ, как Postfix, Apache или Squid рекомендуется назначить собственные учетные записи пользователей вместо того, чтобы на скорую руку "свалить" их на универсального пользователя nobody.
Задача может быть решена как командой adduser, так и useradd. С adduser это делается примерно так:
# adduser --system --no-create-home --group squid
Adding system user squid...
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
Многие демоны и процессы, которым необходима системная учетная запись, по умолчанию используют nobody, но все больше приложений требует создания собственной уникальной учетной записи. Старайтесь использовать уникальную учетную запись там, где это возможно, потому что это повышает уровень безопасности системы. Учетная запись nobody чаще всего становится объектом хакерских атак, поэтому собирать разнообразные процессы и демонов в единую цель для атаки не стоит.
12. Создание системных групп командой ADDGROUP
Создание системных групп сценарием addgroup происходит следующим образом:
# addgroup - - system группа
В командной строке можно передать код GID, переопределяя значение по умолчанию.
Не забудьте придерживаться схемы нумерации групп, принятой в вашем дистрибутиве Linux:
# addgroup --system --gid 300 группе
13. Изменение принадлежности к группам
Бывает, что требуется включить пользователей в некоторую группу или исключить их из этой группы, для этого отредактируйте файл /etc/groups вручную. Просто скопируйте и вставьте записи, это самый быстрый способ.
Для решения задачи также можно воспользоваться командами add user и usermod, но будьте осторожны: adduser позволяет за один вызов включить пользователя только в одну группу, а команда usermod, позволяющая перечислить несколько групп, стирает прежние данные о принадлежности пользователя к группам.
14. Проверка целостности файлов паролей
Файлы паролей (/etc/group, /etc/passwd, /etc/shadow и /etc/gshadow) интенсивно используются в процессе администрирования, и вам нужно какое-нибудь средство для проверки правильности их синтаксиса.
Файлы /etc/passwd и /etc/shadow проверяются командой pwck, а файлы /etc/group и /etc/gshadow командой grpek:
# pwck
# grpek
Если команда завершается без выдачи сообщений, значит, ошибки не обнаружены. В противном случае команда выводит перечень ошибок. Ошибки нужно будет исправить, иначе работа программы завершится. Чтобы ограничиться просмотром всех ошибок, запустите программу в режиме "только чтения":
# pwck -r
# grpek -r
Программа pwck проверяет логическую целостность файлов /etc/passwd и /etc/shadow.
Она последовательно анализирует записи и проверяет, что каждая запись содержит:
· правильное количество полей;
· уникальное имя пользователя;
· действительные идентификаторы пользователя и группы;
· действительную первичную группу;
· действительный домашний каталог;
· действительный командный процессор.
Pwck сообщает обо всех записях, не имеющих пароля. Когда pwck обнаруживает ошибку, вы можете либо удалить учетную запись, либо проигнорировать ее. Во втором случае pwck прекращает работу и не проверяет новые строки (за одним исключением: обнаружив повторяющееся имя, программа продолжит проверку даже в том случае, если вы не удалите учетную запись).
Программа grpck анализирует файлы/etc/group и/etc/gshadow и проверяет, что каждая запись содержит:
· правильное количество полей;
· уникальное имя группы;
· действительный список членов и администраторов.
15. Серийное добавление новых пользователей
Для серийного добавления новых пользователей системный администратор может воспользоваться сценарием mass_useradd(листинг 1). Это сценарий командного процессора, поэтому он должен работать практически везде. Также понадобится сценарий mass_passwd(листинг 2). Необходимо сохранить эти два сценария в одном каталоге. Также следует установить утилиту pwgen, генерирующую пароли.
Создаем список имен и паролей в формате:
имя_пользователя: имя фамилия
Также можно добавить дополнительные данные GECOS:
dawns:Dawn Marie Schroder,,123-4567,trainers
Затем запустите сценарий mass_useradd. Сценарий создает записи в /etc/passwd, /etc/group и /etc/shadow, домашние каталоги, персональные группы и пароли, которые становятся недействительными после первого использования.
Следующая команда приказывает mass_useradd использовать список новых пользователей из файла newusers с заменой/созданием выходного файла newLogins.txt:
sh mass_useradd < newusers > newlogins.txt
Присоединение новых имен и паролей к файлу newlogins.txt:
sh mass_useradd < newusers >> newlogins.txt
Помимо выходного файла, который представляет собой обычный список, mass_passwd создает для каждого пользователя отдельный файл с инструкциями. Инструкции распечатываются и раздаются пользователям. Эти файлы, а также файл журнала хранятся в домашнем каталоге
пользователя, запустившего сценарий (обычно root):
# ls /root/mass_passwds
dawns.passwd.txt nikitah.passwd.txt mass_passwd.log rubst.passwd.txt
В сценариях используются стандартные средства Shadow Suite, поэтому они легко настраиваются посредством регулировки параметров утилит, задействованных в их работе.
Файл выходных данных выглядит так:
dawns shabaefi 1002
nikitah gohbinga 1003
rubst ahtoohaa 1004
В файл /etc/passwd добавляются записи вида
dawns:x:1002:1002:Dawn Mari Schroder,.123-4567,trainers:/home/dawns:/bin/bash
nikitah:x:1003:1003:Nikita Horse..123-4567,equine:/home/nikitah:/bin/bash
rubst:x:1004:1004:Rubs The Cat.101,,234-5678.,test:/home/rubst:/bin/bash
Листинг 1. Программа mass_useradd
#!/bin/sh
##
## Использование:
# # sh mass_useradd < inputfile >> new-passwords.txt
##
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:$PATH
# Чтение строки входных данных.
# Формат входного файла:
# имя_пользователя : имя фамилия
# Чтобы в качестве разделителя использовалась запятая, замените
# 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 $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 ()
# Функция интерпретирует режим (пользователи / группы / серийная замена)
# и возвращает список имен пользователей
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.