Для чего используется команда passwd. Изменяем пароль пользователя в Linux. Меняем пароль текущего пользователя

  • Перевод

Продолжение третьей части серии руководств Linux для новичков. Основы управления пользователями и группами.

Управление аккаунтами в Linux

Знакомьтесь, /etc/passwd

В этом разделе мы познакомимся с механизмом управления аккаунтами в Linux и начнем с файла /etc/passwd , в котором определены все пользователи, которые существуют в системе. Вы можете посмотреть свой файл /etc/passwd , набрав команду less /etc/passwd . Каждой строкой в /etc/passwd определяется аккаунт пользователя. Вот пример из моего /etc/passwd :

Drobbins:x:1000:1000:Daniel Robbins:/home/drobbins:/bin/bash

Как видите, в одной строке не так уж много информации. Каждая из них содержит несколько полей, разделённых ":". Первое поле отвечает за имя пользователя (drobbins), второе поле содержит «x». На устаревших Linux-системах второе поле содержало зашифрованных пароль для аутентификации, но фактически, сейчас все Linux-системы хранят эту информацию в другом файле. Третье поле отвечает за числовой пользовательский идентификатор, связанный с конкретным пользователем, а четвертое поле ассоциирует этого пользователя с конкретной группой; скоро мы увидим, где определена группа 1000. Пятое поле содержит текстовое описание аккаунта, в нашем случае это имя пользователя. Шестое поле определяет домашний каталог пользователя, седьмое - устанавливает стартовую оболочку пользователя, которая будет автоматически запускаться когда пользователь входит в систему.

Вы вероятно заметили, что в системе намного больше пользовательских аккаунтов, которые определены в /etc/passwd, чем тех, которые логинятся в систему на самом деле. Всё это потому, что различные компоненты Linux используют некоторые аккаунты для повышения безопасности. Обычно, такие системные аккаунты имеют идентификатор (uid) меньший 100, и у многих из них в качестве стартовой оболочки установлена /bin/false. Так как эта программа ничего не делает, кроме как выходит и возвращает код ошибки, это эффективно препятствует использованию этих аккаунтов в качестве обычных аккаунтов для логина - т.е. они предназначены только для внутрисистемного пользования.

/etc/shadow

Итак, сами пользовательские аккаунты определены в /etc/passwd . Системы Linux вдобавок к /etc/passwd содержат его файл-компаньон /etc/shadow . Он, в отличие от /etc/passwd , доступен для чтения только суперпользователю и содержит зашифрованную информацию о паролях. Взглянем на образец строки из /etc/shadow :

Каждая строка определяет информацию о пароле конкретного аккаунта, поля в ней разделены знаком ":". Первое поле определяет конкретный пользовательский аккаунт, которому соответствует данная «теневая» запись. Во втором поле содержится зашифрованный пароль. Оставшиеся поля описаны в таблице ниже:

Поле 3 - количество дней с 01.01.1970 до момента, когда пароль был изменен
поле 4 - количество дней до того, как будет разрешено сменить пароль («0» - «менять в любое время»)
поле 5 - количество дней до того, как система заставит пользователя сменить пароль ("-1" - «никогда»)
поле 6 - количество дней до истечения срока действия пароля, когда пользователь получит предупреждение об этом ("-1" - «не предупреждать»)
поле 7 - количество дней после истечения срока действия пароля, по прошествии которых аккаунт будет автоматически отключен системой ("-1" - «не отключать»)
поле 8 - количество дней, прошедшее с момента отключения этого аккаунта ("-1" - «этот аккаунт включен»)
поле 9 - зарезервировано для будущего использования

/etc/group

Теперь взглянем на файл /etc/group , который определяет группы в системе Linux. Вот примерная строка из него:

Drobbins:x:1000:

Формат полей файла /etc/group следующий: первое поле определяет имя группы, второе поле - это поле остаточного пароля, которое сейчас просто зарезервировано x, и третье поле определяет числовой идентификатор для конкретной группы. Четвертое поле (которое пусто в примере выше) определяет всех членов группы.

Вспомните, что в нашем образце строки из /etc/passwd есть «ссылка» на группу с идентификатором 1000. Мы сможем поместить пользователя drobbins в группу drobbins, даже несмотря на отсутствие имени drobbins в четвертом поле /etc/group.

Примечания о группах

Замечание насчет соответствия пользователей с группами: на некоторых системах каждый новый логин-аккаунт связан с группой, имеющей то же имя (и обычно идентификатор). На других системах все логин-аккаунты будут принадлежать к одной группе пользователей. Какой из этих методов выбрать зависит от вас. Создание соответствующей группы для каждого пользователя имеет преимущество в том, что позволяет им более легко контролировать их собственный доступ просто помещая доверенных друзей в свою личную группу.

Ручное создание пользователей и групп

Теперь, я покажу как создать аккаунты для пользователя и группы. Лучший путь узнать как это сделать это добавить нового пользователя в систему вручную. Для начала убедитесь что вашей переменной окружения EDITOR соответствует ваш любимый редактор:

# echo $EDITOR
vim

Если это не так, то вы можете установить переменную EDITOR, набрав что-то, вроде:

# export EDITOR=/usr/bin/emacs
# vipw

Теперь ваш редактор должен быть запущен с уже загруженным /etc/passwd экране. Изменяя системные файлы passwd и group обязательно используйте команды vipw и vigr. Они имеют повышенные меры предосторожности, оберегая ваши файлы от участи быть испорченными.

Редактирование /etc/passwd

Итак, у вас уже есть готовый файл /etc/passwd, добавьте теперь следующую строку:

Testuser:x:3000:3000:LPI tutorial test user:/home/testuser:/bin/false

Мы только что добавили пользователя «testuser» с идентификатором 3000. Мы определили его в группу с таким же идентификатором, которую еще не создали. Но мы можем добавить его к уже имеющейся группе пользователей, если нужно. У этого пользователя установлен комментарий, гласящий «LPI tutorial test user», домашний каталог установлен как "/home/testuser", а командная оболочка - как "/bin/false", в целях безопасности. Если бы мы создавали не тестовый аккаунт, мы бы установили командную оболочку как "/bin/bash". Отлично, теперь сохраните файл и выходите.

Редактирование /etc/shadow

Сейчас нам нужно добавить запись в /etc/shadow для этого пользователя. Для этого наберите vipw -s . Вас как всегда встретит ваш любимый редактор в котором уже открыт файл /etc/shadow . Теперь скопируйте строку существующего пользовательского аккаунта (того, у которого есть пароль и запись которого длиннее стандартных записей системных аккаунтов)

Drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0

Замените имя пользователя в скопированной строке на имя вашего пользователя и убедитесь что все поля (особенно старый пароль) установлены как вам надо:

Testuser:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0

Теперь сохраните и закройте.

Установка пароля

Вы вернетесь к командной строке. Теперь, самое время задать пароль для вашего нового пользователя.

# passwd testuser
Enter new UNIX password: (enter a password for testuser)
Retype new UNIX password: (enter testuser"s new password again)

Редактирование /etc/group

Теперь /etc/passwd и /etc/shadow готовы и самое время как следует настроить /etc/group . Для этого, наберите:

# vigr

Перед вами появится ваш /etc/group файл, готовый для редактирования. Итак, если ранее вы решили добавить созданного пользователя к уже имеющейся группе, то вам не понадобиться создавать новую группу в /etc/groups . Если это не так, вам нужно добавить новую группу для этого пользователя, введите следующую строку:

Testuser:x:3000:

Теперь сохраните и закройте.

Создание домашней директории

Мы почти закончили. Выполните следующие команды для создания домашнего каталога testuser"а:

# cd /home
# mkdir testuser
# chown testuser:testuser testuser
# chmod o-rwx testuser

Наш каталог пользователя на месте и аккаунт готов к использованию. Уже почти готово. Если вы собираетесь использовать этот аккаунт, вам надо будет воспользоваться vipw для смены стартовой оболочки на /bin/bash , так, чтобы пользователь смог войти.

Утилиты администрирования учетных записей

Вы уже знаете как вручную добавить новые аккаунты и группы, давайте же теперь рассмотрим различные, экономящие время, утилиты для управления аккаунтами под Linux. Из-за некоторых ограничений мы не будем рассматривать множество деталей, описывающих эти команды. Запомните - вы всегда можете получить больше информации о какой-либо команде если посмотрите её man-страничку. Если вы планируете сдавать LPIC 101 экзамен, вам следует провести побольше времени на ознакомление с каждой из этих команд.

Newgrp - По умолчанию, любой файл, который создает пользователь, сразу же присваивается к группе, в которой он состоит, определенной в /etc/passwd . Если пользователь принадлежит к другим группам, он или она может набрать newgrp thisgroup чтобы стать членом группы thisgroup. Затем, любые новые созданные файлы унаследуют членство в thisgroup.
chage - Команда chage используется для просмотра и изменения настроек срока действия паролей, сохраненных в /etc/shadow.
gpasswd - Основная утилита управления группами
groupadd/groupdel/groupmod - Используются для добавления/удаления/изменения групп в /etc/group
useradd/userdel/usermod - Используются для добавления/удаления/изменения пользователей в /etc/passwd . Эти команды могут выполнять и другие полезные функции. Смотрите man для получения дополнительной информации.
pwconv/grpconv - Используются для преобразования passwd и group файлов старого образца в новые shadow passwords. Фактически, все Linux системы уже используют shadow passwords, так что вам никогда не придется использовать эти команды.

Перевод выполнил коллективный разум с помощью notabenoid.com . Спасибо следующим benoid-юзерам (в алфавитном порядке): kindacute , nekjine , Rich . А также инициатору всей серии переводов, VBart .

Продолжение следует...

Об авторах

Daniel Robbins

Дэниэль Роббинс - основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава

The passwd command changes passwords for user account s. A normal user may only change the password for his/her own account, while the superuser may change the password for any account. passwd also changes the account or associated password validity period.

Password Changes

The user is first prompted for his/her old password, if one is present. This password is then encrypted and compared against the stored password. The user has only one chance to enter the correct password. The superuser is permitted to bypass this step so that forgotten passwords may be changed. After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time. If not, passwd refuses to change the password and exits. The user is then prompted twice for a replacement password. The second entry is compared against the first and both are required to match in order for the password to be changed. Then, the password is tested for complexity. As a general guideline, passwords should consist of 6 to 8 characters including one or more characters from each of the following sets:

Lower case alphabetics

Digits 0 thru 9

Punctuation marks

Care must be taken not to include the system default erase or kill characters. passwd will reject any password which is not suitably complex.

Hints for user passwords

The security of a password depends upon the strength of the encryption algorithm and the size of the key space. The legacy UNIX System encryption method is based on the NBS DES algorithm. More recent methods are now recommended (see ENCRYPT_METHOD ). The size of the key space depends upon the randomness of the password which is selected. Compromises in password security normally result from careless password selection or handling. For this reason, you should not select a password which appears in a dictionary or which must be written down. The password should also not be a proper name, your license number, birth date, or street address. Any of these may be used as guesses to violate system security. You can find advice on how to choose a strong password on http://en.wikipedia.org/wiki/Password_strength

OPTIONS

The options which apply to the passwd command are: -a , --all

This option can be used only with -S and causes show status for all users.

-d , --delete

Delete a user"s password (make it empty). This is a quick way to disable a password for an account. It will set the named account passwordless.

-e , --expire

Immediately expire an account"s password. This in effect can force a user to change his/her password at the user"s next login.

-h , --help

Display help message and exit.

-i , --inactive INACTIVE

This option is used to disable an account after the password has been expired for a number of days. After a user account has had an expired password for INACTIVE days, the user may no longer sign on to the account.

-k , --keep-tokens

Indicate password change should be performed only for expired authentication tokens (passwords). The user wishes to keep their non-expired tokens as before.

-l , --lock

Lock the password of the named account. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a ´!´ at the beginning of the password). Note that this does not disable the account. The user may still be able to login using another authentication token (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account"s expire date to Jan 2, 1970). Users with a locked password are not allowed to change their password.

-n , --mindays MIN_DAYS

Set the minimum number of days between password changes to MIN_DAYS . A value of zero for this field indicates that the user may change his/her password at any time.

-q , --quiet -r , --repository REPOSITORY

change password in REPOSITORY repository

-R , --root CHROOT_DIR

Apply changes in the CHROOT_DIR directory and use the configuration files from the CHROOT_DIR directory.

-S , --status

Display account status information. The status information consists of 7 fields. The first field is the user"s login name. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P). The third field gives the date of the last password change. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password. These ages are expressed in days.

-u , --unlock

Unlock the password of the named account. This option re-enables a password by changing the password back to its previous value (to the value before using the -l option).

-w , --warndays WARN_DAYS

Set the number of days of warning before a password change is required. The WARN_DAYS option is the number of days prior to the password expiring that a user will be warned that his/her password is about to expire.

-x , --maxdays MAX_DAYS

Файл /etc/passwd содержит список пользователей, которые известны системе. В
процессе регистрации пользователя система обращается к этому файлу в поисках идентификатора пользователя и его домашнего каталога.

Стуктура записей в /etc/passwd

Каждая строка файла описывает одного пользователя и 7 полей , разделенных двоеточиями:

  1. Регистрационное имя . Регистрационные имена должны быть уникальными и состоять не более чем из 32 символов.
    Они могут содержать любые символы, кроме двоеточия и символа новой строки. Они не должны начинаться с цифры.
  2. Зашифрованный пароль или «заполнитель» пароля.

    В данном поле возможно присутствие:

    1. символа «х» --
      так указыватеся, что пароль храниться
    2. символа «*»
      -- значит, что данная учетная запись временно отключена.
    3. или набора случайных символов и чисел
      -- значит указывается непосредственный пароль пользователя в зашифрованном виде.
  3. Идентификатор пользователя - это 32-битное целое число, которое уникально идентифицирует пользователя в системе.
    По умолчанию, идентификаторы меньше 500 зарезервированы для служебных учетных записей. Регулярные пользователи имеют идентификаторы, начиная с 500.
  4. Идентификатор группы по умолчанию .
    Как и идентификатор пользователя, идентификатор группы (GID) является 32-битным целым числом.
    Причем:
    • Идентификатор 0 зарезервирован для группы с именем root,
    • идентификатор 1 - для группы bin,
    • а 2 - для группы daemon.

    Группы определяются в , а поле идентификатора группы в файле /etc/passwd задает стандартный («эффективный») идентификатор на момент регистрации пользователя в системе.

    Этот идентификатор не играет особой роли при определении прав доступа; он используется лишь при создании новых файлов и каталогов .

    Новые файлы обычно включаются в эффективную группу своего владельца, но если у каталога установлен специальный бит setgid (02000) или файловая система смонтирована с опцией grpid, новые файлы принадлежат группе владельца каталога.
    По умолчанию, в ОС Linux для каждого нового пользователя создается новая группа с таким же регистрационным именем и идентификатором.

  5. Поле персональных данных . Поле GECOS в основном используется для хранения персональной информации о каждом пользователе. Оно не имеет четко определенного синтаксиса.

    Структура данного поля может быть произвольной, но команда finger интерпретирует разделенные запятыми элементы данного поля в следующем порядке:

    • полное имя;
    • номер офиса и здания;
    • рабочий телефон;
    • домашний телефон.
  6. Домашний каталог . Войдя в систему, пользователь попадает в свой домашний каталог. Если на момент регистрации этот каталог отсутствует, выводится сообщение о его отсутствии. Если в качестве значения поля домашнего каталога по умолчанию DEFAULT_HOME в файле /etc/login.defs установлено «no», продолжение регистрации пользователя будет невозможно; в противном случае пользователь попадает в корневой каталог.
    По умолчанию, домашние каталоги пользователей создаются в каталоге /home. При добавлении в систему нового пользователя в его домашний каталог копируются все файлы из каталога /etc/skel, в котором содержаться персональные конфигурационные файлы командного интерпретатора и различных программ.
  7. Командный интерпретатор .
    -- В качестве регистрационной оболочки, как правило, задается интерпретатор команд, например, /bin/sh

    /bin/csh

    ,
    -- но, в принципе, это может быть любая программа. По умолчанию используется интерпретатор bash.

    Пользователи могут менять интерпретатор с помощью команды chsh. Файл /etc/shells содержит список тех интерпретаторов, которые доступны для выбора.

Пример записи в /etc/passwd

Типовые записи файла /etc/passwd имеет следующий вид (приведём две строки):

Root:х:0:0:test,w,1,w:/root:/bin/bash sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin

В первой записи указана учетная запись пользователя root. Как видно, идентификатор пользователя и идентификатор группы пользователя для данной учетной записи совпадают и равны нулю. Затем следует поле персональных данных, домашний каталог, которым является каталог /root и командный интерпретатор пользователя - /bin/bash.

Updated: 12/29/2017 by Computer Hope

Overview

The passwd command is used to change the password of a user account. A normal user can run passwd to change their own password, and a system administrator (the superuser) can use passwd to change another user"s password, or define how that account"s password can be used or changed.

passwd syntax

passwd [OPTION ] [USER ]

Quick Examples

Change Your Password

Running passwd with no options will change the password of the account running the command. You will first be prompted to enter the account"s current password:

(current) UNIX password:

If it is correct, you will then be asked to enter a new password:

Enter new UNIX password:

And to enter the same password again, to verify it:

Retype new UNIX password:

If the passwords match, the password will be changed.

Change Another User"s Password

Sudo passwd jeff

If you have superuser privileges, you can change another user"s password. Here, we prefix the command with sudo to run it as the superuser. This command will change the password for user jeff . You will not be prompted for jeff "s current password.

Change Your Password Without Knowing Your Current Password

If you need to change your password because you forgot it, you will need to log in to the root account. To do this, you will need to know the password for user root .

Let"s say your username is sally , and you can"t remember your password. However, you have administrator access to the system: you can log in as root , using the password for that account. Log in as root , and then from the command line, run:

Passwd sally

But what if you forgot the password for root as well? In this case, you will need to log in to the machine in single-user mode, also known as Runlevel 1 . This cannot be done over the network, so you will need physical access to the machine to boot into this runlevel.

Reboot the machine. When it is booting up, you should be presented with a bootloader menu. On many systems, such as Debian or Ubuntu , the boot menu will include an option for "Recovery Mode" or "Single User Mode" (as in the image below). Select this boot option.

This option will boot you into a text-only mode, and log you in as root.

If you need to mount / , do so:

Mount -rw -o remount /

Now change sally "s password:

Passwd sally

Or root "s:

When you"re done, reboot your system:

Shutdown -r now

Start the system normally, and you should be able to log in as sally with the new password.

Now that we"ve gone over the most common scenarios for using passwd , let"s look at the command in more detail. The following sections will describe how the command works, how it can be used, and what options can be specified to make use of its different functions.

Description

The passwd command changes passwords for user accounts. A normal user can only change the password for their own account, but the superuser can change the password for any account. passwd can also change or reset the account"s validity period — how much time can pass before the password expires and must be changed.

Before a normal user can change their own password, they must first enter their current password for verification. (The superuser can bypass this step when changing another user"s password.)

After the current password has been verified, passwd checks to see if the user is allowed to change their password at this time. If not, passwd refuses to continue, and exits.

Otherwise, the user is then prompted twice for a replacement password. Both entries must match for passwd to continue.

Next, the password is tested for complexity. As a general guideline, passwords should consist of at least 6 characters , including one or more of each of the following:

  • digits 0 through 9
  • punctuation marks

Options

The following options will change the way passwd operates:

-a , --all When used with -S (see below), this option will show the password status for all users. This option will not work if used without -S .
-d , --delete Delete a user"s password (make it empty). This option is a quick way to disable logins for an account, without disabling the account itself.
-e , --expire Immediately expire an account"s password. This forces a user to change their password the next time they log in.
-h , --help Display information about how to use the passwd command.
-i , --inactive INACTIVE This option is used to disable an account after the password has been expired for a number of days. After a user account has had an expired password for integer INACTIVE days, the user may no longer sign on to the account.
-k , --keep-tokens Keep password tokens. Indicates that this user"s password should only be changed if it has expired.
-l , --lock Lock the password of the named account. This option disables a password by changing it to a value which matches no possible encrypted value. It does this by adding a character at the beginning of the encrypted password.

Note that this does not disable the account. The user may still be able to log in using another authentication method (an SSH key, for example). To disable the account, the superuser can use the usermod command with the option --expiredate 1 . This option will set the account"s expiration date to a date in the past — namely Jan 2, 1970.

Users with a locked password are not allowed to change their password.

-n , --mindays MIN_DAYS Set the minimum number of days between password changes to MIN_DAYS . A value of zero for this field indicates that the user may change his/her password at any time.
-q , --quiet Quiet mode; passwd will operate without displaying any output.
-R , --root CHROOT_DIR For advanced users: this option will apply changes in the chroot directory CHROOT_DIR and use the configuration files from the CHROOT_DIR directory.
-S , --status Display account status information. The status information consists of 7 fields:
  1. The user"s login name
  2. password usability: L if the account has a locked password, NP if the account has no password, or P if the account has a usable password
  3. date of the last password change
  4. minimum password age
  5. maximum password age
  6. password warning period
  7. password inactivity period
In fields 4 through 7, password ages are expressed in days.

Specifying -a in addition to -S will display password status for all users.

-u , --unlock Unlock the password of the named account. This option re-enables a password by changing the password back to its value before the -l option was used to lock it.
-w , --warndays WARN_DAYS Set the number of days of warning before a password change is required. WARN_DAYS is the number of days prior to the password expiring that a user will be warned that their password is about to expire.
-x , --maxdays MAX_DAYS Set the maximum number of days a password remains valid. After MAX_DAYS , the password must be changed.

Notes

Password complexity will vary depending on the system. Consult your operating system documentation for default complexity rules and how to change them.

On systems that use NIS (Network Information Services), users may not be able to change their password if they are not logged into the NIS server.

System Files Used By Passwd

/etc/passwd User account information.
/etc/shadow Secure user account information.
/etc/pam.d/passwd PAM configuration for passwd .

passwd examples

passwd

Change your password.

Sudo passwd username

Change the password for the user named username .

Sudo passwd -S ted

Check the status of the password for the user named ted . Output will resemble the following:

Ted P 05/13/2014 2 365 7 28

Here, we see the user"s name (ted ), followed by a P , indicating that his password is currently valid and usable. The password will expire on May 5, 2014 . Ted cannot change his password more often than every 2 days, and must change the password every 365 days. He will be warned 7 days before a required password change, and if he allows his password to expire, his account will be disabled 28 days later.

Sudo passwd -S -a

Similar to the above command, but checks the password status for all user accounts, system-wide.

Sudo passwd -l jane

Lock the password for user jane . She will be unable to log in until a system administrator unlocks it.

Sudo passwd -u jane

Unlock jane "s password. It will automatically be reset to whatever it was before it was locked, and she will be able to log in again.

Sudo passwd -e alan

Expire alan "s password. The next time he logs in, he will be required to set a new password.

Related commands

chfn — Change a user"s finger information.
finger — List information about a user.
login — Begin a session on a system.
nispasswd — Change NIS+ password information.
nistbladm — Administer NIS+ tables.
useradd — Add a user to the system.
vipw — Safely edit the password file.
yppasswd — Change a network password in an NIS database.

Файл passwd — это список пользователей, которые известны системе. В процессе регистрации пользователя система обращается к данному файлу в поисках идентификатора пользователя, а также с целью проверки входного пароля. Каждая строка файла описывает одного пользователя и содержит семь полей, разделенных двоеточиями:

    регистрационное имя;

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

    идентификатор группы по умолчанию;

    поле GECOS (полное имя, номер офиса, рабочий и домашний телефоны);

    начальный каталог;

    регистрационный интерпретатор команд.

Вот примеры правильно составленных строк файла /etc/passwd:

root:jsg8Y.lp6uWMo:0:0:The System,x6096,:/:/bin/csh jl:Hwex6bM8cT3/E:100:0:Jim Lane,ECT8-3,:/staff/jl:/bin/sh dotty:oP0vdZ/s93ZiY:101:20::/home/korbel/dotty:/bin/csh

Файл /etc/passwd часто используется несколькими системами через СУБД, такую как NIS или NIS+. Более подробную информацию на эту тему вы найдете в главе 18.

Ниже рассматривается назначение отдельных полей файла /etc/passwd.

Регистрационное имя

Регистрационные имена (называемые также пользовательскими именами) должны быть уникальными. Как правило, они содержат не более восьми символов*. Если используется база данных NIS или NIS+, длина имени ограничена 8 символами независимо от операционной системы.

Ранее регистрационные имена могли состоять только из алфавитно-циф-ровых символов. В современных системах допускаются любые символы, кроме двоеточий и символов новой строки. Тем не менее, лучше придерживаться старых правил и не создавать имена длиной более 8 символов. Это позволит избежать конфликтов с почтовыми системами и старыми программами, а также гарантировать, что пользователи смогут иметь одинаковые регистрационные имена на любой машине. Помните: сегодня у вас одни компьютеры, а завтра могут быть другие.

Регистрационные имена могут содержать как строчные, так и прописные буквы. Правда, большинство почтовых систем (включая sendmail ) предполагает, что используются только строчные буквы. По этой причине мы рекомендуем избегать употребления прописных букв в регистрационных именах за исключением случая, когда пользователям не нужно работать с электронной почтой.

Следует выбирать такие регистрационные имена, которые можно легко запомнить, поэтому имя, состоящее из случайной последовательности букв, является не совсем удачным вариантом. Избегайте также кличек и прозвищ. Поскольку регистрационные имена часто используют в адресах электронной почты, полезно установить стандартную процедуру их формирования. Пользователям должна быть предоставлена возможность делать обоснованные догадки о регистрационных именах друг друга. Имена, фамилии, инициалы и сочетания этих элементов — вот приемлемые варианты для схем формирования имен.

Любая жестко заданная схема в конечном итоге приводит к появлению дубликатов имен или слишком длинных имен, поэтому иногда придется делать исключения. В случае появления длинного имени можно в файле /etc/mail/aliases задать две версии одного и того же имени, по крайней мере, для электронной почты.

Например, схема именования может быть такой: первый инициал и фамилия каждого сотрудника. Пользователь Брент Браунинг (Brent Browning), таким образом, превратится в "bbrowning", но девять символов — слишком много. Лучше присвоить этому пользователю регистрационное имя "brentb", a "bbrowning" сделать элементом файла aliases :

bbrowning: brentb

Если в организации есть глобальный файл почтовых псевдонимов, то все новые регистрационные имена должны отличаться от любого псевдонима, указанного в этом файле. В противном случае почта будет доставляться не новому пользователю, а пользователю с таким же псевдонимом.

Когда пользователь работает за несколькими машинами, то регистрационные имена должны быть уникальными в двух аспектах. Во-первых, необходимо, чтобы имя конкретного пользователя на всех машинах было одним и тем же. Это предусматривается главным образом для удобства — самого пользователя и администратора.

Во-вторых, конкретное регистрационное имя всегда должно относиться к одному и тому же лицу. Если в сетевой среде одно имя принадлежит двум разным пользователям, это приводит к возникновению слабых мест в системе защиты. Например, если записи scott@boulder и scott@refuge относятся к разным пользователям, то при определенных обстоятельствах оба пользователя могут получить доступ к файлам друг друга.

Опыт также показывает, что дублирующиеся имена сбивают с толку пользователей почтовых систем. Сама почтовая система различает, кому именно принадлежат имена, однако ее пользователи при отправлении писем часто ошибаются адресом.

Зашифрованный пароль

Пароли хранятся в файле /etc/passwd в зашифрованном виде. Если только вы не производите DES-кодирование в уме (в этом случае мы очень хотели бы с вами познакомиться), необходимо либо установить содержимое этого поля с помощью команды passwd (или yppasswd , если используется база данных NIS), либо скопировать строку, содержащую зашифрованный пароль, из другой учетной записи.

Редактируя файл /etc/passwd для создания новой учетной записи, в поле зашифрованного пароля поставьте звездочку (*). Она воспрепятствует несанкционированному использованию учетной записи до установки реального пароля. Никогда не оставляйте это поле пустым, иначе в системе защиты возникнет огромная брешь, поскольку для доступа к такой учетной записи пароль не требуется.

В системах, где применяются стандартные DES-пароли, длина незашифрованного пароля не может превышать 8 символов. Более длинные пароли допускаются, но значащими в них будут только первые 8 символов. Зашифрованный пароль будет иметь длину 13 символов независимо от длины исходного пароля. В алгоритме используется случайная двухсимвольная "примесь", чтобы одному исходному паролю соответствовало несколько зашифрованных форм. Таким образом, факт выбора пользователями одинаковых паролей не может быть выявлен путем просмотра файла passwd.

В HP-UX существует "доверительный режим", при котором допускаются пароли любой длины. Это достигается путем многократного применения алгоритма DES, по одному разу для каждого 8-символьного сегмента.

В Red Hat и FreeBSD поддерживаются пароли MD5, которые также могут иметь произвольную длину. Зашифрованные таким способом пароли легко распознать, так как они имеют длину 31 символ и всегда начинаются с последовательности

С появлением быстродействующих аппаратных средств и эффективных алгоритмов шифрования все более очевидной становится необходимость прятать зашифрованные пароли путем помещения их в отдельный файл, недоступный для всеобщего чтения. Это называется механизмом теневых паролей. Полное описание теневых паролей приведено в параграфе 21.3.

В Solaris теневые пароли обязательны. Необходимо модифицировать файл теневых паролей при подключении и отключении пользователей, чтобы он был согласован с файлом /etc/passwd . Структура файла shadow в Solaris описана в параграфе 6.4.

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

В большинстве современных систем идентификатор пользователя (UID) — это 32-разрядное целое число в диапазоне от 0 до 2147483647. Но для обеспечения совместимости со старыми системами мы рекомендуем, чтобы значение самого старшего идентификатора по возможности не превышало 32767. В текущих версиях Linux максимальное значение UID равно 65535, но подобное положение может измениться в будущем.

По определению пользователь root имеет идентификатор 0. В большинстве систем есть также псевдопользователи bin (идентификатор 1) и daemon (идентификатор 2). Как правило, псевдоимена помещаются в начало файла /etc/passwd , и им назначаются низкие идентификаторы. Чтобы зарезервировать побольше номеров для неперсонифицированных пользователей, рекомендуем присваивать реальным пользователям идентификаторы, начиная с номера 100.

Нежелательно создавать более одной учетной записи с идентификатором 0. Может показаться удобным иметь несколько суперпользовательских записей с разными интерпретаторами команд и паролями, но в действительности это создает дополнительные бреши в системе защиты и приводит к лишним трудностям. Если нескольким пользователям необходимо быть администраторами, пусть они применяют команду sudo .

Избегайте повторного использования идентификаторов, даже идентификаторов тех пользователей, которые уволились из организации и учетные записи которых удалены. Такая мера предосторожности позволит избежать путаницы, если файлы впоследствии будут восстанавливаться из резервных копий, где пользователи идентифицируются по номерам, а не по регистрационным именам.

Идентификаторы должны быть уникальными в пределах всей организации. Иными словами, необходимо, чтобы заданный идентификатор соответствовал одному и тому же регистрационному имени и физическому лицу на каждой машине. Нарушение уникальности идентификаторов приведет к появлению проблем безопасности в такой системе, как NFS, а также может вызвать замешательство у пользователей, переходящих из одной рабочей группы в другую.

Трудно соблюдать уникальность идентификаторов, когда группы компьютеров администрируются разными лицами и даже организациями. Это проблема как техническая, так и политическая. Лучшим решением будет создание центральной базы данных, содержащей для каждого пользователя свою уникальную запись. Мы у себя самостоятельно создали такую базу данных и назвали ее Uniquid. Проще всего назначить каждой группе в пределах организации свой диапазон идентификаторов и позволить распоряжаться им по своему усмотрению. Проблема не решится полностью, но вероятность совпадений значительно уменьшится.

Идентификатор группы по умолчанию

Идентификатор группы (GID) представляет собой 16- или 32-разрядное целое число со знаком или без. Идентификатор 0 зарезервирован для группы с именем root или wheel , а идентификатор 1 обычно принадлежит группе daemon .

Группы определяются в файле /etc/group . В старых версиях UNIX пользователь мог быть членом только одной группы. Для выбора эффективного идентификатора группы, используемой по умолчанию при входе в систему, брали значение поля GID из файла /etc/passwd . Новейшие версии UNIX позволяют пользователю быть членом до 16 групп одновременно, поэтому поле GID в файле /etc/passwd никогда не используется и, по сути дела, является рудиментом старой эпохи. Тем не менее, значение поля продолжают включать в список групп пользователя.

В HP-UX список групп пользователя инициализируется во время регистрации на основании файла /etc/logingroup , а не /etc/group . Мы рекомендуем сделать файл /etc/logingroup символической ссылкой на файл /etc/group , чтобы ОС HP-UX вела себя так же, как и другие системы при работе в нескольких группах.

Единственный раз, когда эффективный идентификатор учитывается, — при создании новых файлов и каталогов. Если используется семантика BSD, новые файлы наследуют значение GID у своего родительского каталога. В противном случае им назначается текущий эффективный идентификатор группы, которой принадлежит владелец. Изменить этот идентификатор можно с помощью команды newgrp .

Большинство систем по умолчанию не используют семантику BSD, но ее можно активизировать с помощью опции grpid команды mount либо путем установки для нужных каталогов бита SGID (2000). Во FreeBSD этот режим всегда включен, так как в данной системе нет команды newgrp .

Поле GECOS

Поле GECOS не имеет четко определенного синтаксиса. Первоначально в Bell Labs его использовали для регистрации информации, необходимой при передаче пакетных заданий из UNIX-системы мэйнфрейму, работающему под управлением GECOS. Сейчас осталось одно название.

Как правило, это поле используют для хранения персональной информации о каждом пользователе. Некоторые программы заменяют символ "&" в поле GECOS регистрационным именем пользователя, что позволяет немного сократить объем вводимых данных. В частности, это относится к программам finger и sendmail . Лучше не полагаться на подобную возможность.

Программа finger интерпретирует разделенные запятыми элементы поля GECOS в следующем порядке:

    полное имя (часто используется только это поле);

    номер офиса;

    рабочий телефон;

    домашний телефон.

С помощью команды chfh (passwd -g в Solaris) можно изменять информацию, содержащуюся в поле GECOS. Эта команда полезна для ведения и обновления списка телефонных номеров, но ею часто злоупотребляют: пользователь может изменить информацию так, что она станет нецензурной или некорректной. В нашем факультетском компьютерном центре, который посещают толпы старшекурсников, эту команду пришлось отключить.

Начальный каталог

При входе в систему пользователь попадает в свой начальный каталог. Если на момент регистрации у пользователя нет начального каталога, выводится сообщение наподобие "no home directory" (начальный каталог отсутствует). В некоторых системах допускается продолжение процедуры регистрации, и пользователь попадает в корневой каталог. Есть системы, в которых регистрация без начального каталога не разрешена.

Если начальные каталоги используются коллективно посредством сетевой файловой системы, то в случае проблем с сервером или с самой сетью они могут оказаться недоступными.

Регистрационный интерпретатор команд

В качестве регистрационного интерпретатора, как правило, задается Bourne shell или С shell (соответственно /bin/sh или /bin/csh ), но в принципе это может быть любая программа. В большинстве систем по умолчанию используется интерпретатор Bourne shell, который запускается, если соответствующее поле в файле /etc/passwd не указано. К другим распространенным интерпретаторам относятся ksh (Korn shell), bash (Bourne-again shell) и tcsh (усовершенствованная разновидность С shell).

Во многих системах пользователи могут изменить интерпретатор с помощью команды chsh . В Solaris лишь суперпользователь имеет право менять интерпретатор другого пользователя (с помощью команды passwd -е ), если только не используется база данных NIS или NIS+. Файл /etc/shells содержит список тех интерпретаторов, которые пользователь может выбирать с помощью команды chsh . Пользователь root может применять эту команду без ограничений. Проверьте, чтобы элементы файла /etc/shells