<!--
     The FreeBSD Russian Documentation Project

     $FreeBSD$
     $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/users/chapter.sgml,v 1.5 2004/04/07 13:00:50 den Exp $

     Original revision: 1.43
-->

<chapter id="users">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Neil</firstname>
	<surname>Blakey-Milner</surname>
	<contrib>Предоставил </contrib>
      </author>
    </authorgroup>
    <!-- Feb 2000 -->
  </chapterinfo>

  <title>Пользователи и основы управления учетными записями</title>

  <sect1 id="users-synopsis">
    <title>Краткий обзор</title>

    <para>FreeBSD позволяет одновременную работу множества пользователей
      на одном компьютере.  Разумеется, только один пользователь может сидеть
      за клавиатурой и перед экраном в один момент времени
      <footnote>
	<para>Конечно, пока не используется множество терминалов, но мы
	  оставим эту тему для <xref linkend="serialcomms">.</para>
      </footnote>, но любое количество пользователей может выполнять работу
      через сеть.  Для использования системы у каждого пользователя должна
      быть учетная запись.</para>

    <para>После прочтения этой главы вы будете знать:</para>

    <itemizedlist>
      <listitem>
	<para>Различия между разнообразными учетными записями в системе
	  FreeBSD.</para>
      </listitem>

      <listitem>
	<para>Как добавлять учетные записи пользователей.</para>
      </listitem>

      <listitem>
	<para>Как удалять учетные записи пользователей.</para>
      </listitem>

      <listitem>
	<para>Как изменять данные учетных записей пользователей, такие
	  как полное имя пользователя, или предпочитаемую оболочку.</para>
      </listitem>

      <listitem>
	<para>Как устанавливать ограничения на использование ресурсов,
	  например на использование памяти и времени CPU для учетных записей
	  или групп учетных записей.</para>
      </listitem>

      <listitem>
	<para>Как использовать группы для упрощения управлением учетными
	  записями.</para>
      </listitem>
    </itemizedlist>

    <para>Перед прочтением этой главы вам потребуется:</para>

    <itemizedlist>
      <listitem>
	<para>Понимание основ &unix; и FreeBSD (<xref
	  linkend="basics">).</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="users-introduction">
    <title>Введение</title>

    <para>Весь доступ к системе осуществляется через учетные записи,
      и все процессы запускаются пользователями, так что управление
      пользователями и учетными записями в системах FreeBSD имеет
      всеобъемлющее значение.</para>

    <para>С каждой учетной записью в системе FreeBSD связана определенная
      идентификационная информация.</para>

    <variablelist>
      <varlistentry>
	<term>Имя пользователя</term>

	<listitem>
	  <para>Имя пользователя в том виде, в каком оно вводится в
	    приглашение <prompt>login:</prompt>.  Имена пользователей
	    должны быть уникальны в пределах одного компьютера; не может
	    быть двух пользователей с одинаковым именем пользователя.
	    Существует множество правил для создания правильных имен
	    пользователей, документированных в &man.passwd.5;; вы как
	    правило будете использовать имена пользователей, состоящие
	    из восьми или меньшего количества символов, все символы в
	    нижнем регистре.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Пароль</term>

	<listitem>
	  <para>С каждой учетной записью связан пароль.  Пароль может быть
	    пустым, в этом случае для доступа к системе не нужен пароль.
	    Обычно это очень плохая идея; у каждой учетной записи должен быть
	    пароль.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>ID пользователя (User ID, UID)</term>

	<listitem>
	  <para>The UID это номер, традиционно от 0 до
	    65535<footnote id="users-largeuidgid">
	      <para>Возможно использование UID/GID вплоть до
		4294967295, но эти ID могут вызвать серьезные проблемы с
		программами, делающими предположения о значениях
		ID.</para>
	    </footnote>, используемый для однозначной идентификации
	    пользователя в системе.  Сама система FreeBSD для идентификации
	    пользователей использует UID &mdash; любая команда FreeBSD,
	    позволяющая вам указывать имя пользователя, первым делом
	    преобразует его к UID.  Это означает, что вы можете создать
	    несколько учетных записей с различными именами пользователей,
	    но с одним UID.  FreeBSD будет воспринимать эти учетные записи как
	    одного пользователя.  Маловероятно, что вам когда-либо это
	    понадобится.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>ID группы (Group ID, GID)</term>

	<listitem>
	  <para>GID это номер, традиционно от 0 до
	    65535<footnoteref linkend="users-largeuidgid">, используемый
	    для однозначной идентификации главной группы, к которой
	    принадлежит пользователь.  Группы это механизм для контроля
	    доступа к ресурсам на основе GID пользователя вместо его UID.
	    Это может значительно уменьшить размер некоторых файлов настройки.
	    Кроме того, пользователь может быть включен более чем в одну
	    группу.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Класс логина</term>

	<listitem>
	  <para>Классы логинов это расширение к механизму групп,
	    позволяющее системе более гибко управлять различными
	    пользователями.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Время изменения пароля</term>

	<listitem>
	  <para>По умолчанию FreeBSD не принуждает пользователей периодически
	    менять пароли.  Вы можете включить эту функцию для определенных
	    пользователей, заставив некоторых или всех пользователей менять
	    пароли по прошествии определенного времени.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Время истечения действия учетной записи</term>

	<listitem>
	  <para>По умолчанию в FreeBSD время действия учетных записей не
	    ограничено.  Если вы создаете учетные записи, продолжительность
	    жизни которых ограничена, например в учетные записи для
	    студентов в школе, вы можете определить время истечения
	    действия учетной записи.  После наступления этого времени
	    учетная запись не может использоваться для входа в систему,
	    хотя каталоги и файлы этой учетной записи останутся
	    нетронутыми.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Полное имя пользователя</term>

	<listitem>
	  <para>Имя пользователя является уникальным идентификатором
	    учетной записи в FreeBSD, но недостаточно для сопоставления
	    с реальным именем пользователя.  Эта информация может быть
	    добавлена в учетную запись.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Домашний каталог</term>

	<listitem>
	  <para>Домашний каталог это полный путь к каталогу в системе, в
	    котором пользователь начнет работать после входа в систему.
	    По общепринятому соглашению все домашние каталоги пользователей
	    помещаются в
	    <filename>/home/<replaceable>username</replaceable></filename>
	    или
	    <filename>/usr/home/<replaceable>username</replaceable></filename>.
	    Пользователи хранят личные файлы в домашнем каталоге и в любых
	    подкаталогах, создаваемых внутри домашнего каталога.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Оболочка пользователя</term>

	<listitem>
	  <para>Оболочка необходима пользователям как средство взаимодействия
	    с системой по умолчанию.  Существует множество различных видов
	    оболочек, опытные пользователи работают с собственными
	    настройками, которые могут быть отражены в установках их учетных
	    записей.</para>
	</listitem>
      </varlistentry>
    </variablelist>

    <para>Существует три основных типа учетных записей: <link
      linkend="users-superuser">суперпользователь</link>, <link
      linkend="users-system">системные пользователи</link>, и <link
      linkend="users-user">учетные записи пользователей</link>.
      Учетная запись суперпользователя, обычно называемая
      <username>root</username>, используется для управления системой
      без ограничения привилегий.  Системные пользователи запускают
      сервисы.  Наконец, учетные записи пользователей необходимы обычным
      людям для входа в систему, чтения почты, и так далее.</para>
  </sect1>

  <sect1 id="users-superuser">
    <title>Учетная запись суперпользователя</title>

    <indexterm>
      <primary>учетные записи</primary>
      <secondary>суперпользователь (root)</secondary>
    </indexterm>
    <para>Учетная запись суперпользователя, обычно называемая
      <username>root</username>, существует в системе изначально
      для целей системного администрирования, и не должна использоваться
      для повседневных задач, таких как получение и отправка почты,
      общее исследование системы или программирование.</para>

    <para>Причина в том, что суперпользователь, в отличие от обычных
      пользователей, может работать без ограничений и неправильное
      использование учетной записи суперпользователя может привести к
      полному уничтожению системы.  Учетные записи пользователей не
      способны уничтожит систему вследствие ошибки, поэтому обычно
      лучше использовать учетные записи обычных пользователей везде,
      где это возможно, пока вам не потребуются дополнительные
      привилегии для какой-то определенной задачи.</para>

    <para>Вы всегда должны дважды и трижды проверять команды, выполняемые
      под учетной записью суперпользователя, поскольку даже один лишний
      пробел или отсутствующий символ может привести к безвозвратной
      потере данных.</para>

    <para>Таким образом, первое, что вам необходимо сделать после прочтения
      этой главы, это создать непривилегированную учетную запись пользователя
      для повседневного использования (если вы еще этого не сделали).
      Это необходимо сделать независимо от того, работаете ли вы на
      многопользовательском или однопользовательском компьютере.
      Позже в этой главе мы обсудим как создать дополнительные учетные записи,
      и как менять уровень привилегий между нормальным пользователем и
      суперпользователем.</para>
  </sect1>

  <sect1 id="users-system">
    <title>Системные учетные записи</title>

    <indexterm>
      <primary>учетные записи</primary>
      <secondary>системные</secondary>
    </indexterm>
    <para>Системные пользователи предназначены для запуска сервисов, таких
      как DNS, почта, веб серверы и так далее.  Это необходимо по соображениям
      безопасности; если все сервисы работают от суперпользователя, они
      могут действовать без ограничений.</para>

    <indexterm>
      <primary>учетные записи</primary>
      <secondary><username>daemon</username></secondary>
    </indexterm>
    <indexterm>
      <primary>учетные записи</primary>
      <secondary><username>operator</username></secondary>
    </indexterm>
    <para>Примеры системных пользователей это <username>daemon</username>,
      <username>operator</username>, <username>bind</username> (для
      Domain Name Service, DNS), и <username>news</username>.  Зачастую
      системные администраторы создают <username>httpd</username>
      для запуска устанавливаемых веб серверов.</para>

    <indexterm>
      <primary>учетные записи</primary>
      <secondary><username>nobody</username></secondary>
    </indexterm>
    <para><username>nobody</username> это классический непривилегированный
      системный пользователь.  Тем не менее, необходимо помнить, что чем
      больше сервисов используют <username>nobody</username>, тем больше
      файлов и процессов ассоциировано с этим пользователем, и следовательно
      тем больше прав появляется у этого пользователя.</para>
  </sect1>

  <sect1 id="users-user">
    <title>Учетные записи пользователей</title>

    <indexterm>
      <primary>учетные записи</primary>
      <secondary>пользователей</secondary>
    </indexterm>
    <para>Учетные записи пользователей в основном означают доступ в систему
      для обычных людей, и эти учетные записи отделяют пользователя и
      его рабочую среду, предотвращая повреждение пользователем системы
      или данных других пользователей, и позволяя пользователям
      настраивать свою рабочую среду без влияния на других
      пользователей.</para>

    <para>Каждая персона, получающая доступ к вашей системе, должна получить
      уникальную учетную запись пользователя.  Это позволит вам выяснить
      кто что делает, предотвращая сбивание одним пользователем настроек
      других пользователей, чтение чужой почты и так далее.</para>

    <para>Каждый пользователь может настраивать свою собственную рабочую
      среду для приспособления системы под свои нужды с помощью альтернативных
      оболочек, редакторов, привязки клавиш и настроек языка.</para>
  </sect1>

  <sect1 id="users-modifying">
    <title>Изменение учетных записей</title>

    <indexterm>
      <primary>учетные записи</primary>
      <secondary>изменение</secondary>
    </indexterm>

    <para>В среде &unix; существуют различные команды для работы с учетными
      записями пользователей.  Наиболее часто используемые команды приведены
      в таблице, ниже находятся более детальные примеры их
      использования.</para>

    <informaltable>
      <tgroup cols="2">
	<thead>
	  <row>
	    <entry>Команда</entry>
	    <entry>Краткое описание</entry>
	  </row>
	</thead>
	<tbody>
	  <row>
	    <entry>&man.adduser.8;</entry>
	    <entry>Рекомендуемое приложение командной строки для добавления
	      новых пользователей.</entry>
	  </row>
	  <row>
	    <entry>&man.rmuser.8;</entry>
	    <entry>Рекомендуемое приложение командной строки для удаления
	      пользователей.</entry>
	  </row>
	  <row>
	    <entry>&man.chpass.1;</entry>
	    <entry>Гибкий инструмент для изменения информации в базе данных
	      пользователей.</entry>
	  </row>
	  <row>
	    <entry>&man.passwd.1;</entry>
	    <entry>Простой инструмент командной строки для изменения паролей
	      пользователей.</entry>
	  </row>
	  <row>
	    <entry>&man.pw.8;</entry>
	    <entry>Мощный и гибкий инструмент для изменения любой информации,
	      связанной с учетными записями пользователей.</entry>
	  </row>
	</tbody>
      </tgroup>
    </informaltable>

    <sect2 id="users-adduser">
      <title><command>adduser</command></title>

      <indexterm>
	<primary>учетные записи</primary>
	<secondary>добавление</secondary>
      </indexterm>
      <indexterm>
	<primary><command>adduser</command></primary>
      </indexterm>
      <indexterm>
	<primary><filename class=directory>/usr/share/skel</filename></primary>
      </indexterm>
      <indexterm><primary>каталог шаблонов</primary></indexterm>
      <indexterm><primary>skeleton directory</primary></indexterm>
      <para>&man.adduser.8; это простая программа для добавления новых
	пользователей.  Она создает записи в системных файлах
	<filename>passwd</filename> и <filename>group</filename>.
	Она также создает домашний каталог для нового пользователя,
	копируя файлы настройки по умолчанию (<quote>dotfiles</quote>, файлы
	имя который начинается с символа <literal>.</literal>) из
	<filename>/usr/share/skel</filename> и опционально может отправлять
	новому пользователю приветственное сообщение.</para>

      <para>В &os;&nbsp;5.0, скрипт &man.adduser.8; был переписан с языка
	Perl на язык shell, работающий в качестве оболочки к
	&man.pw.8;, так что использование этого скрипта в &os;&nbsp;4.X
	немного отличается использования в &os;&nbsp;5.X.</para>

      <para>Для создания файла настройки используйте
	<command>adduser -s -config_create</command>.
	<footnote>
	  <para>С параметром <option>-s</option> &man.adduser.8;
	    не будет выводить информацию.  Позже для изменения настроек
	    по умолчанию мы используем параметр <option>-v</option>.</para>
	</footnote>
	Далее, мы настроим параметры &man.adduser.8; по умолчанию и
	создадим нашу первую учетную запись пользователя, поскольку
	повседневное использование <username>root</username>
	неприемлемо.</para>

      <example>
	<title>Настройка <command>adduser</command> и добавление
	  пользователя в &os;&nbsp;4.X</title>

	<screen>&prompt.root; <userinput>adduser -v</userinput>
Use option ``-silent'' if you don't want to see all warnings and questions.
Check /etc/shells
Check /etc/master.passwd
Check /etc/group
Enter your default shell: csh date no sh tcsh zsh [sh]: <userinput>zsh</userinput>
Your default shell is: zsh -&gt; /usr/local/bin/zsh
Enter your default HOME partition: [/home]:
Copy dotfiles from: /usr/share/skel no [/usr/share/skel]: 
Send message from file: /etc/adduser.message no 
[/etc/adduser.message]: <userinput>no</userinput>
Do not send message
Use passwords (y/n) [y]: <userinput>y</userinput>

Write your changes to /etc/adduser.conf? (y/n) [n]: <userinput>y</userinput>

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username [a-z0-9_-]: <userinput>jru</userinput>
Enter full name []: <userinput>J. Random User</userinput>
Enter shell csh date no sh tcsh zsh [zsh]: 
Enter home directory (full path) [/home/jru]: 
Uid [1001]: 
Enter login class: default []: 
Login group jru [jru]: 
Login group is ``jru''. Invite jru into other groups: guest no 
[no]: <userinput>wheel</userinput>
Enter password []: 
Enter password again []: 

Name:	  jru
Password: ****
Fullname: J. Random User
Uid:	  1001
Gid:	  1001 (jru)
Class:	  
Groups:	  jru wheel
HOME:     /home/jru
Shell:	  /usr/local/bin/zsh
OK? (y/n) [y]: <userinput>y</userinput>
Added user ``jru''
Copy files from /usr/share/skel to /home/jru
Add another user? (y/n) [y]: <userinput>n</userinput>
Goodbye!
&prompt.root;</screen>
      </example>

      <para>В результате мы изменили оболочку по умолчанию на
	<application>zsh</application> (дополнительная оболочка, находящаяся
	в коллекции портов), и отключили отправку добавляемым пользователям
	письма с приветствием.  Затем мы сохранили настройки, создали
	учетную запись для <username>jru</username>, и убедились, что
	<username>jru</username> находится в группе
	<username>wheel</username> (теперь этот пользователь может получить
	привилегии <username>root</username> с помощью команды
	&man.su.1;.)</para>

      <note>
	<para>Пароль, который вы вводите, не отображается,
	  <quote>звездочки</quote> при вводе пароля также не отображаются.
	  убедитесь, что не ввели пароль неправильно дважды</para>
      </note>

      <note>
	<para>Теперь просто используйте &man.adduser.8; без аргументов,
	  и вам не потребуется изменять настройки по умолчанию.  Если
	  программа будет запрашивать изменение настроек по умолчанию,
	  попробуйте параметр <option>-s</option>.</para>
      </note>

      <example>
	<title>Добавление пользователя в &os;&nbsp;5.X</title>

	<screen>&prompt.root; <userinput>adduser</userinput>
Username: <userinput>jru</userinput>
Full name: <userinput>J. Random User</userinput>
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: <userinput>wheel</userinput>
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: <userinput>zsh</userinput>
Home directory [/home/jru]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): <userinput>yes</userinput>
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): <userinput>no</userinput>
Goodbye!
&prompt.root;</screen>
      </example>
    </sect2>

    <sect2 id="users-rmuser">
      <title><command>rmuser</command></title>

      <indexterm><primary><command>rmuser</command></primary></indexterm>
      <indexterm>
	<primary>учетные записи</primary>
	<secondary>удаление</secondary>
      </indexterm>

      <para>Для полного удаления пользователя из системы вы можете
	использовать &man.rmuser.8;.  Эта программа выполняет следующие
	действия:</para>

      <procedure>
	<step>
	  <para>Удаление записи пользователя из &man.crontab.1; (если
	    она присутствует).</para>
	</step>
	<step>
	  <para>Удаляет задачи &man.at.1;, принадлежащие
	    пользователю.</para>
	</step>
	<step>
	  <para>Уничтожает все процессы, принадлежащие пользователю.</para>
	</step>
	<step>
	  <para>Удаляет пользователя из локального файла паролей.</para>
	</step>
	<step>
	  <para>Удаляет домашний каталог пользователя (если он принадлежит
	    пользователю).</para>
	</step>
	<step>
	  <para>Удаляет принадлежащую пользователю входящую почту из
	    <filename>/var/mail</filename>.</para>
	</step>
	<step>
	  <para>Удаляет все файлы, принадлежащие пользователю, из каталогов
	    с временными файлами, например <filename>/tmp</filename>.</para>
	</step>
	<step>
	  <para>Наконец, удаляет имя пользователя из всех групп, которым оно
	    принадлежит, в <filename>/etc/group</filename>.

	    <note>
	      <para>Если после этого удаления группа остается пустой и
		имя группы совпадает с именем пользователя, она удаляется;
		Это необходимо для удаления пользовательских уникальных
		групп, создаваемых &man.adduser.8;.</para>
	    </note>
	  </para>
	</step>
      </procedure>

      <para>&man.rmuser.8; не может использоваться для удаления учетной
	записи суперпользователя, поскольку это почти всегда означает
	разрушение системы.</para>

      <para>По умолчанию используется интерактивный режим, программа
	пытается убедиться, что вы уверены в своих действиях.</para>

      <example>
	<title>Интерактивное удаление учетной записи с помощью
	  <command>rmuser</command></title>

	<screen>&prompt.root; <userinput>rmuser jru</userinput>
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? <userinput>y</userinput>
Remove user's home directory (/home/jru)? <userinput>y</userinput>
Updating password file, updating databases, done.
Updating group file: trusted (removing group jru -- personal group is empty) done.
Removing user's incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done.
Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
&prompt.root;</screen>
      </example>
    </sect2>

    <sect2 id="users-chpass">
      <title><command>chpass</command></title>

      <indexterm><primary><command>chpass</command></primary></indexterm>
      <para>&man.chpass.1; изменяет информацию в базе данных пользователей:
	пароли, оболочки, персональную информацию.</para>

      <para>Только системные администраторы с правами суперпользователя
	могут изменять информацию и пароли других пользователей с помощью
	&man.chpass.1;.</para>

      <para>При запуске без параметров (кроме опционального имени
	пользователя), &man.chpass.1; вызывает редактор, содержащий
	информацию о пользователе.  Когда пользователь выходит из редактора,
	база данных пользователей обновляется этой информацией.</para>

      <note>
	<para>В &os;&nbsp;5.X, после выхода из редактора будет запрошен
	  пароль (если вы не суперпользователь.</para>
      </note>

      <example>
	<title>Интерактивная работа с <command>chpass</command>
	  суперпользователя</title>

	<screen>#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:</screen>
      </example>

      <para>Обычные пользователи могут изменять лишь небольшую часть этой
	информации, и только для своей учетной записи.</para>

      <example>
	<title>Интерактивная работа с <command>chpass</command> обычного
	  пользователя</title>

	<screen>#Changing user database information for jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:</screen>
      </example>

      <note>
	<para>&man.chfn.1; и &man.chsh.1; это всего лишь ссылки на
	  &man.chpass.1;, как и &man.ypchpass.1;, &man.ypchfn.1; и
	  &man.ypchsh.1;.  NIS поддерживается автоматически, так что
	  указание <literal>yp</literal> перед командой не обязательно.
	  Если это непонятно, не беспокойтесь, NIS будет рассмотрен в
	  <xref linkend="advanced-networking">.</para>
      </note>
    </sect2>
    <sect2 id="users-passwd">
      <title><command>passwd</command></title>

      <indexterm><primary><command>passwd</command></primary></indexterm>
      <indexterm>
	<primary>учетные записи</primary>
	<secondary>изменение пароля</secondary>
      </indexterm>
      <para>&man.passwd.1; это обычный способ изменения собственного пароля
	пользователя, или пароля другого пользователя
	суперпользователем.</para>

      <note>
	<para>Для предотвращения случайного или неавторизованного изменения,
	  перед установкой нового пароля необходимо ввести старый.</para>
      </note>

      <example>
	<title>Изменение пароля</title>

	<screen>&prompt.user; <userinput>passwd</userinput>
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done</screen>
      </example>

      <example>
	<title>Изменение пароля другого пользователя
	  суперпользователем</title>

	<screen>&prompt.root; <userinput>passwd jru</userinput>
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done</screen>
      </example>

      <note>
	<para>Как и с &man.chpass.1;, &man.yppasswd.1; это всего лишь
	  ссылка на &man.passwd.1;, так что NIS работает с обеими
	  командами.</para>
      </note>
    </sect2>


    <sect2 id="users-pw">
      <title><command>pw</command></title>
      <indexterm><primary><command>pw</command></primary></indexterm>

      <para>&man.pw.8; это утилита командной строки для создания, удаления,
	модифицирования и отображения пользователей и групп.  Она
	функционирует как внешний интерфейс к системным файлам пользователей
	и групп.  У &man.pw.8; очень мощный набор параметров командной строки,
	что делает это программу подходящей для использования в shell
	скриптах, но новым пользователям она может показаться более сложной,
	чем другие представленные здесь команды.</para>
    </sect2>
  </sect1>

  <sect1 id="users-limiting">
    <title>Ограничение пользователей</title>

    <indexterm><primary>ограничение пользователей</primary></indexterm>
    <indexterm>
      <primary>учетные записи</primary>
      <secondary>ограничение</secondary>
    </indexterm>
    <para>Если у вас есть пользователи, может появиться мысль о возможности
      ограничения нагрузки на систему.  FreeBSD предоставляет
      администратору несколько способов ограничения объема
      занимаемых пользователями системных ресурсов.  Существует два вида
      ограничений: дисковые квоты и другие ограничения ресурсов.</para>

    <indexterm><primary>квоты</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>квоты</secondary>
    </indexterm>
    <indexterm><primary>дисковые квоты</primary></indexterm>
    <para>Дисковые квоты ограничивают объем пространства, занимаемого
      пользователями, это способ быстрой проверки объема без вычисления
      его каждый раз.  Квоты обсуждаются в <xref
      linkend="quotas">.</para>

    <para>Другие ограничения ресурсов включают способы ограничения
      использования CPU, памяти и других ресурсов, которые могут потребляться
      пользователем.  Ограничения накладываются с помощью классов учетных
      записей и обсуждаются в этом разделе.</para>

    <indexterm>
      <primary><filename>/etc/login.conf</filename></primary>
    </indexterm>
    <para>Классы учетных записей определяются в
      <filename>/etc/login.conf</filename>.  Описание полной семантики
      выходит за пределы обсуждаемого здесь материала, она детально
      описана в странице справочника &man.login.conf.5;.  Достаточно
      сказать, что каждому пользователю присвоен класс
      (<literal>default</literal> по умолчанию), и каждому классу присвоен
      набор характеристик.  Характеристика определяется в виде пары
      <literal><replaceable>имя</replaceable>=<replaceable>значение</replaceable></literal>,
      где <replaceable>имя</replaceable> это определенный идентификатор,
      а <replaceable>значение</replaceable> это произвольная строка,
      обрабатываемая в зависимости от имени.  Настройка классов и
      характеристик довольно проста и также описана в
      &man.login.conf.5;.</para>

    <para>Ограничения на ресурсы отличаются от обычных характеристик:
      во-первых, для каждого ограничения существует <quote>мягкое</quote>
      (текущее) и <quote>жесткое</quote> ограничение.  Мягкое ограничение
      может настраиваться пользователем или приложением, но не может
      превышать жесткое ограничение.  Последнее может быть уменьшено
      пользователем, но никогда не увеличено.  Во-вторых, большинство
      ограничений ресурсов применяются к процессам определенного пользователя,
      а не к пользователю вообще.  Обратите внимание, что эти различия
      реализуются специфической обработкой лимитов, а не реализацией
      структуры характеристик учетных записей (т.е. это не
      <emphasis>настоящий</emphasis> специальный случай характеристик).</para>

    <para>Ниже приведен список наиболее часто используемых ограничений
      на ресурсы (остальные, вместе с другими характеристиками
      можно найти в &man.login.conf.5;).</para>

    <variablelist>
      <varlistentry>
	<term><literal>coredumpsize</literal></term>

	<listitem>
    <indexterm><primary>coredumpsize</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>coredumpsize</secondary>
    </indexterm>
	  <para>Ограничение на размер файла core, генерируемого программой,
	    по очевидным причинам подчиняющееся другим ограничениям
	    на используемое дисковое пространство (например,
	    <literal>filesize</literal>, или дисковые квоты).
	    Тем не менее, оно часто используется как менее строгий
	    метод контролирования потребления дискового пространства:
	    поскольку пользователь не создает файлы core самостоятельно,
	    и зачастую не удаляет их, установка этого параметра может
	    предохранить его от выхода за пределы дисковых квот, если
	    большая программа (например, <application>emacs</application>)
	    создаст core файл.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>cputime</literal></term>

	<listitem>
    <indexterm><primary>cputime</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>cputime</secondary>
    </indexterm>
	  <para>Это максимальное количество времени CPU, потребляемого
	    пользователем.  Превысившие это время процессы будут уничтожены
	    ядром.

	    <note>
	      <para>Это ограничение потребляемого
		<emphasis>времени</emphasis> CPU, а не процентов использования
		CPU, которые отображаются в некоторых полях &man.top.1;
		и &man.ps.1;.  Ограничения на них на время написания этого
		материала невозможны и такие ограничения практически
		бесполезны: компилятор &mdash; вполне законное приложение
		&mdash; иногда может легко использовать почти 100%
		CPU.</para>
	    </note>
	  </para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>filesize</literal></term>

	<listitem>
    <indexterm><primary>filesize</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>filesize</secondary>
    </indexterm>
	  <para>Это максимальный размер файла, который может обрабатываться
	    пользователем.  В отличие от <link linkend="quotas">дисковых
	    квот</link>, это ограничение применяется к отдельным файлам,
	    а не ко всему набору принадлежащих пользователю файлов.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>maxproc</literal></term>

	<listitem>
    <indexterm><primary>maxproc</primary></indexterm>
	<indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>maxproc</secondary>
    </indexterm>
	  <para>Это максимальное число процессов, которые могут быть
	    запущены пользователем.  В это число включаются и консольные
	    и фоновые процессы.  По очевидным причинам, они не могут быть
	    больше, чем системное ограничение, указываемое через
	    переменную &man.sysctl.8; <varname>kern.maxproc</varname>.
	    Имейте ввиду, что установка слишком жестких ограничений может
	    стать помехой работе пользователя: зачастую полезно входить
	    в систему с нескольких консолей или использовать каналы.
	    Некоторые задачи, такие как компиляция большой программы,
	    также порождают множество процессов (например, &man.make.1;,
	    &man.cc.1; и другие препроцессоры).</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>memorylocked</literal></term>

	<listitem>
    <indexterm><primary>memorylocked</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>memorylocked</secondary>
    </indexterm>
	  <para>Это максимальный объем памяти, блокировка которого
	    может быть запрошена процессом (см. например
	    &man.mlock.2;).  Некоторые критически важные для системы
	    программы, такие как &man.amd.8;, блокируют память так,
	    что при выгрузке они не создают системе дополнительных
	    проблем.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>memoryuse</literal></term>

	<listitem>
    <indexterm><primary>memoryuse</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>memoryuse</secondary>
    </indexterm>
	  <para>Это максимальный объем памяти, которая может быть занята
	    процессами.  Он включает основную и основную память и
	    использование подкачки.  Это ограничение не снимает все вопросы,
	    связанные с использованием памяти, но для начала это подходящее
	    ограничение.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>openfiles</literal></term>

	<listitem>
    <indexterm><primary>openfiles</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>openfiles</secondary>
    </indexterm>
	  <para>Это максимальное количество файлов, которые могут быть
	    открыты процессами.  В FreeBSD, файлы также используются для
	    представления сокетов и каналов IPC; не устанавливайте слишком
	    маленькое значение.  Ограничение этого параметра, устанавливаемое
	    для всей системы, определяется переменной &man.sysctl.8;
	    <varname>kern.maxfiles</varname>.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>sbsize</literal></term>

	<listitem>
    <indexterm><primary>sbsize</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>sbsize</secondary>
    </indexterm>
	  <para>Это ограничение потребляемого пользователем объема сетевой
	    памяти, т.е. mbufs.  Оно было введено как ответ на старые
	    DoS атаки, при которых создавалось множество сокетов,
	    но обычно может быть использовано и для ограничения
	    сетевых соединений.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term><literal>stacksize</literal></term>

	<listitem>
    <indexterm><primary>stacksize</primary></indexterm>
    <indexterm>
      <primary>ограничение пользователей</primary>
      <secondary>stacksize</secondary>
    </indexterm>
	  <para>Это максимальный размер, до которого может вырасти стек
	    процесса.  Сам по себе этот параметр не может ограничить
	    размер используемой программой памяти, следовательно,
	    его необходимо использовать вместе с другими ограничениями.</para>
	</listitem>
      </varlistentry>
    </variablelist>

    <para>Существуют несколько других аспектов, которые необходимо учитывать
      при установке ограничений ресурсов.  Ниже приведены некоторые общие
      подсказки, советы и различные комментарии.</para>

    <itemizedlist>
      <listitem>
	<para>Процессам, загружаемым при старте системы скриптами
	  <filename>/etc/rc</filename> присваивается класс
	  <literal>daemon</literal>.</para>
      </listitem>

      <listitem>
	<para>Хотя <filename>/etc/login.conf</filename>, поставляемый с
	  системой, это хороший источник подходящих значений для большинства
	  ограничений, только вы, администратор, можете знать подходящие
	  значения для вашей системы.  Установка слишком слабых ограничений
	  может повлечь злоупотребления системой, а установка слишком
	  сильных ограничений может стать помехой производительности.</para>
      </listitem>

      <listitem>
	<para>Пользователи X Window System (X11) возможно должны получить
	  больше ресурсов, чем другие пользователи.  X11 сама по себе
	  потребляет много ресурсов, а также провоцирует пользователей
	  на одновременный запуск большего количества программ.</para>
      </listitem>

      <listitem>
	<para>Помните, что многие ограничения применяются к отдельным
	  процессам, а не к пользователю вообще.  Например, установка
	  <varname>openfiles</varname> в 50 означает, что каждый
	  процесс, запущенный пользователем, может открывать до 50
	  файлов.  Таким образом, общее количество файлов, которые могут
	  быть открыты пользователем, вычисляется как
	  <literal>openfiles</literal>, помноженное на
	  <literal>maxproc</literal>.  Это также применимо к потребляемой
	  памяти.</para>
      </listitem>
    </itemizedlist>

    <para>За дальнейшей информацией по ограничениям на ресурсы, классам
      учетных записей и характеристикам, обращайтесь к соответствующим
      страницам справочника.</para>
  </sect1>

  <sect1 id="users-personalizing">
    <title>Персонализация пользователей</title>

    <para>Локализация это окружение, настраиваемое системным администратором
      или пользователем для работы с различными языками, наборами
      символов, стандартами даты и времени, и так далее.  Это обсуждается
      в главе <link linkend="l10n">локализация</link>.</para>
  </sect1>

  <sect1 id="users-groups">
    <title>Группы</title>

    <indexterm><primary>группы</primary></indexterm>
    <indexterm>
      <primary><filename>/etc/groups</filename></primary>
    </indexterm>
    <indexterm>
      <primary>учетные записи</primary>
      <secondary>группы</secondary>
    </indexterm>
    <para>Группа это просто список пользователей.  Группа идентифицируется
      по имени и GID (Group ID, идентификатор группы).  В FreeBSD
      (и большинстве других &unix;-подобных системах) ядро для определения
      прав процесса использует два фактора: его ID пользователя и
      список групп, которым он принадлежит.  Когда вы слышите что-то о
      <quote>group ID</quote> пользователя или процесса, это обычно означает
      только первую группу из списка.</para>

    <para>Имена групп связываются с ID групп в файле
      <filename>/etc/group</filename>.  Это текстовый файл с четырьмя
      разделенными двоеточием полями.  Первое поле это имя группы,
      второе это зашифрованный пароль, третье это ID группы, а четвертое
      это разделенный запятыми список членов группы.  Этот файл может
      быть безопасно отредактирован вручную (предполагается, конечно,
      что вы не сделаете синтаксических ошибок!).  За более полным описанием
      синтаксиса обратитесь к странице справочника &man.group.5;.</para>

    <para>Если вы не хотите редактировать <filename>/etc/group</filename>
      вручную, используйте команду &man.pw.8; для добавления и
      редактирования групп.  Например, для добавления группы,
      называемой <groupname>teamtwo</groupname>, и проверки ее существования
      вы можете использовать:</para>

    <example>
      <title>Добавление группы с использованием &man.pw.8;</title>

      <screen>&prompt.root; <userinput>pw groupadd teamtwo</userinput>
&prompt.root; <userinput>pw groupshow teamtwo</userinput>
teamtwo:*:1100:</screen>
    </example>

    <para>Число <literal>1100</literal> это ID группы
      <groupname>teamtwo</groupname>.  На данный момент в,
      <groupname>teamtwo</groupname> нет членов, и поэтому она практически
      бесполезна.  Давайте изменим эту ситуацию, добавив
      <username>jru</username> в группу <groupname>teamtwo</groupname>.</para>

    <example>
      <title>Добавление пользователя в группу с использованием
	&man.pw.8;</title>

      <screen>&prompt.root; <userinput>pw groupmod teamtwo -M jru</userinput>
&prompt.root; <userinput>pw groupshow teamtwo</userinput>
teamtwo:*:1100:jru</screen>
    </example>

    <para>Аргумент к параметру <option>-M</option> это разделенный
      запятыми список пользователей, являющихся членами группы.  Из предыдущих
      разделов мы знаем, что файл паролей также указывает группу для
      каждого пользователя.  Пользователь автоматически добавляется системой
      к списку групп; пользователь не будет показан как член группы при
      использовании &man.pw.8; <option>groupshow</option>, но эта
      информация будет показана при использовании &man.id.1; или похожего
      инструмента.  Другими словами, с этим параметром программа &man.pw.8;
      работает только с файлом <filename>/etc/group</filename>; она никогда
      не будет пытаться получить дополнительную информацию из файла
      <filename>/etc/passwd</filename>.</para>

    <example>
      <title>Использование &man.id.1; для определения принадлежности к
	группам</title>

      <screen>&prompt.user; <userinput>id jru</userinput>
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)</screen>
    </example>

    <para>Как вы можете видеть, <username>jru</username> является членом
      групп <groupname>jru</groupname> и
      <groupname>teamtwo</groupname>.</para>

    <para>За дальнейшей информацией о &man.pw.8;, обратитесь к ее странице
      справочника, а за дополнительной информацией о формате файла
      <filename>/etc/group</filename> к странице справочника
      &man.group.5;.</para>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->
