В этом разделе описаны основные различия между средствами управления паролями в данной операционной системе и в системах BSD 4.3.
При вызове пользователем root команды /bin/passwd в данной операционной системе пользователю будет предложено ввести текущий пароль пользователя root. Пример применения команды: /bin/passwd:
# passwd cslater Изменение пароля для "cslater" Введите пароль root или Старый пароль для cslater: Новый пароль для cslater: Введите новый пароль еще раз: #
В BSD 4.3 эта команда не запрашивает текущий пароль пользователя root. Пример работы версии этой команды в BSD 4.3 приведен ниже:
# passwd cslater New password: Retype new password: #
Вы можете импортировать файл паролей BSD 4.3. Для этого достаточно скопировать файл /etc/passwd и ввести следующую команду:
pwdck -y ALL
Затем в файл /etc/security/limits нужно добавить пустые разделы для всех новых пользователей. Эту операцию можно выполнить с помощью команды usrck, однако, если вместе с файлом /etc/passwd не был импортирован файл /etc/group, то применение команды usrck может привести к возникновению ошибок.
Примечание: Если файл /etc/security/limits был изменен, то размер стека не должен превышать 65 536. В противном случае вызов команды usrck может привести к возникновению ошибок. Измените размер стека на 65 536 и повторите вызов команды usrck.
Кроме того, для проверки атрибутов пользователей и групп воспользуйтесь командами grpck и usrck.
В данной операционной системе для управления паролями применяются команды lsuser, mkuser , chuser и rmuser. Функции всех этих команд могут быть также выполнены с помощью Web-администратора системы или SMIT. Однако все эти команды за один вызов позволяют изменить информацию только для одного пользователя.
Примечание: Одновременное изменение с помощью редактора записей нескольких пользователей требует одновременного редактирования нескольких файлов; это связано с тем, что пароли хранятся в файле /etc/security/passwd, информация о правах доступа - в файле /etc/security/user, а остальные данные о пользователях - в файле /etc/passwd.
Данная операционная система не поддерживает команду vipw, но поддерживает команду mkpasswd. Тем не менее, вы можете управлять паролями с помощью тех же средств, что и в системе BSD 4.3. Для этого выполните следующую процедуру:
chmod 000 /etc/shadow
----------------------------------------------------- ---- #!/bin/bsh # # vipw. В настоящее время использует pwdck. Может работать с usrck. # PATH=/bin:/usr/bin:/etc:/usr/ucb # Дополните это строку, # если ваш редактор # находится в другом каталоге if [ -f /etc/ptmp ]; then echo "/etc/ptmp существует. Кто-то еще работает с vipw?" exit 1 fi if [ ! -f /`which "$EDITOR" | awk '{ print $1 }'` ] ; then EDITOR=vi fi cp /etc/shadow /etc/ptmp if (cmp /etc/shadow /etc/ptmp) ; then $EDITOR /etc/ptmp else echo Невозможно скопировать shadow в ptmp exit 1 fi if (egrep "^root:" /etc/ptmp >/dev/null) ; then cp /etc/ptmp /etc/shadow ; cp /etc/ptmp /etc/passwd chmod 000 /etc/passwd /etc/shadow pwdck -y ALL 2>1 >/dev/null # код возврата 114 может измениться rc=$? if [ $rc -eq 114 ]; then chmod 644 /etc/passwd rm -f /etc/passwd.dir /etc/passwd.pag mkpasswd /etc/passwd # обновление /etc/security/limits или ftp # завершится неудачно else pwdck -y ALL fi else echo Неправильная запись для root в ptmp fi rm /etc/ptmp -----------------------------------------------------------
mkpasswd /etc/passwd
При этом будут обновлены файлы /etc/passwd.dir и /etc/passwd.pag.
Внимание: Инициализация переменнойIFS и оператора trap повышает риск нарушения защиты, связанный с использованием функции setuid. Тем не менее, сценарии vipw и passwd могут применяться в сравнительно открытой среде, когда на передний план выходят требования совместимости. Для реализации среды с более высокой степенью защиты рекомендуется применять только стандартные команды данной операционной системы.
----------------------------------------------------- #!/bin/ksh # # приводит файл /etc/security/passwd в соответствие # с измененным файлом /etc/shadow # IFS=" " PATH=/bin trap "exit 2" 1 2 3 4 5 6 7 8 10 12 13 14 15 16 17 18 21 22 \ 23 24 25 27 28 29 30 31 32 33 34 35 36 60 61 62 if [ -n "$1" ]; then USERNAME=$1 else USERNAME=$LOGNAME fi if [ -f /etc/ptmp ]; then echo Файл паролей занят exit 1 fi trap "rm /etc/ptmp; exit 3" 1 2 3 4 5 6 7 8 10 12 13 \ 14 15 16 17 18 21 22 23 24 25 27 28 29 30 31 \ 32 33 34 35 36 60 61 62 if (cp /etc/security/passwd /etc/ptmp) ; then chmod 000 /etc/ptmp else rm -f /etc/ptmp exit 1 fi if ( /bin/passwd $USERNAME ) ; then PW=` awk ' BEGIN { RS = "" } $1 == user { print $4 } ' user="$USERNAME:" \ /etc/security/passwd ` else rm -f /etc/ptmp exit 1 fi rm -f /etc/ptmp awk -F: '$1 == user { print $1":"pw":"$3 ":"$4":"$5":"$6":"$7 } $1 != user { print $0 }' user="$USERNAME" pw="$PW" \ /etc/shadow > /etc/ptmp chmod 000 /etc/ptmp mv -f /etc/ptmp /etc/shadow ---------------------------------------------------------
chmod 4711 /usr/ucb/passwd