<!--
     The FreeBSD Documentation Project
     The FreeBSD German Documentation Project

     Original Revision 1.32
     $FreeBSD$
     $FreeBSDde: de-docproj/books/handbook/users/chapter.sgml,v 1.7 2002/03/17 18:10:25 mheinen Exp $
-->

<chapter id="users">
  <chapterinfo>
    <authorgroup>
      <author>
        <firstname>Neil</firstname>
	<surname>Blakey-Milner</surname>
	<contrib>Beigetragen von </contrib>
      </author>
    </authorgroup>
    <!-- Feb 2000 -->
    <authorgroup>
      <author>
        <firstname>Robert</firstname>
	<surname>Drehmel</surname>
	<contrib>&Uuml;bersetzt von </contrib>
      </author>
    </authorgroup>
    <!-- Jul 2000 -->
  </chapterinfo>

  <title>Benutzer und grundlegende Account-Verwaltung</title>
  
  <sect1 id="users-synopsis">
    <title>&Uuml;bersicht</title>
    
    <para>Einen FreeBSD Computer k&ouml;nnen mehrere Benutzer zur selben
      Zeit benutzen, allerdings kann immer nur einer vor der Konsole sitzen
      <footnote>
	<para>Au&szlig;er Sie verwenden, wie in <xref
	linkend="serialcomms"> besprochen,  zus&auml;tzliche Terminals</para>
      </footnote>, &uuml;ber das Netzwerk k&ouml;nnen beliebig viele
      Benutzer angemeldet sein.  Jeder Benutzer muss einen Account
      haben, um das System benutzen zu k&ouml;nnen.</para>

    <para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie</para>

    <itemizedlist>
      <listitem>
	<para>die verschiedenen Account-Typen von FreeBSD kennen,</para>
      </listitem>

      <listitem>
	<para>wissen, wie Accounts angelegt werden,</para>
      </listitem>

      <listitem>
	<para>wissen, wie Sie Accounts l&ouml;schen,</para>
      </listitem>

      <listitem>
	<para>wie Sie Attribute eines Accounts, wie den Loginnamen oder
	  die Login-Shell &auml;ndern,</para>
      </listitem>

      <listitem>
	<para>wissen, wie Sie Limits f&uuml;r einen Account setzen, um
	  beispielsweise Ressourcen, wie Speicher oder CPU-Zeit,
	  einzuschr&auml;nken,</para>
      </listitem>

      <listitem>
	<para>wie Sie mit Gruppen die Verwaltung der Accounts
	  vereinfachen.</para>
      </listitem>
    </itemizedlist>

    <para>Vor dem Lesen dieses Kapitels sollten Sie</para>

    <itemizedlist>
      <listitem>
	<para>die Grundlagen von Unix und FreeBSD (<xref linkend="basics">)
	  verstanden haben.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="users-introduction">
    <title>Einf&uuml;hrung</title>

    <para>Jeder Zugriff auf das System geschieht &uuml;ber Accounts und alle
      Prozesse werden von Benutzern gestartet, also sind Benutzer- und
      Account-Verwaltung von wesentlicher Bedeutung in FreeBSD-Systemen.</para>

    <para>Mit jedem Account eines FreeBSD Systems sind bestimmte Informationen
      verkn&uuml;pft, die diesen Account identifizieren.</para>

    <variablelist>
      <varlistentry>
	<term>Loginnamen</term>

	<listitem>
	  <para>Den Loginnamen geben Sie bei der Anmeldung ein, wenn Sie
	    dazu mit <prompt>login:</prompt> aufgefordert werden.
	    Loginnamen m&uuml;ssen auf dem System eindeutig sein, das
	    hei&szlig;t auf einem System kann es nicht zwei Accounts mit
	    demselben Loginnamen geben.  In &man.passwd.5; wird
	    beschrieben, wie ein g&uuml;ltiger Loginnamen gebildet wird.
	    Normalerweise sollten Sie Namen verwenden, die aus
	    Kleinbuchstaben bestehen und bis zu acht Zeichen lang sind.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Passwort</term>

	<listitem>
	  <para>Mit jedem Account ist ein Passwort verkn&uuml;pft.  Wenn
	    das Passwort leer ist, wird es bei der Anmeldung nicht
	    abgefragt.  Das ist allerdings nicht zu empfehlen, daher sollte
	    jeder Account ein Passwort besitzen.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>User ID (UID)</term>

	<listitem>
	  <para>Die UID ist eine Zahl zwischen 0 und 65536, die einen
	    Account eindeutig identifiziert.  Intern verwendet FreeBSD nur
	    die UID, Loginnamen werden zuerst in eine UID umgewandelt,
	    mit der das System dann weiter arbeitet.  Das bedeutet, dass
	    Sie Accounts mit unterschiedlichen Loginnamen aber gleicher
	    UID einrichten k&ouml;nnen.  Vom Standpunkt des Systems handelt
	    es sich dabei um denselben Account.  In der Praxis werden Sie
	    diese Eigenschaft des Systems wahrscheinlich nicht
	    nutzen.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Group ID (GID)</term>

	<listitem>
	  <para>Die GID ist eine Zahl zwischen 0 und 65536, die eine Gruppe
	    eindeutig identifiziert.  Mit Gruppen kann der Zugriff auf
	    Ressourcen &uuml;ber die GID anstelle der UID geregelt werden.
	    Einige Konfigurationsdateien werden durch diesen Mechanismus
	    deutlich kleiner.  Ein Account kann mehreren Gruppen
	    zugeh&ouml;ren.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Login-Klasse</term>

	<listitem>
	  <para>Login-Klassen erweitern das Gruppenkonzept.  Sie
	    erh&ouml;hen die Flexibilit&auml;t des Systems in der Handhabung
	    der verschiedenen Accounts.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>G&uuml;ltigkeit von Passw&ouml;rtern</term>

	<listitem>
	  <para>Ein regelm&auml;&szlig;iges &Auml;ndern des Passworts wird in
	    der Voreinstellung von FreeBSD nicht erzwungen.  Sie
	    k&ouml;nnen allerdings einen Passwortwechsel nach einer
	    gewissen Zeit auf Basis einzelner Accounts erzwingen.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Verfallszeit eines Accounts</term>

	<listitem>
	  <para>In der Voreinstellung verfallen unter FreeBSD keine
	    Accounts.  Wenn Sie Accounts einrichten, die nur f&uuml;r eine
	    bestimmte Zeit g&uuml;ltig sein sollen, beispielsweise Accounts
	    f&uuml;r Teilnehmer eines Praktikums, k&ouml;nnen Sie angeben,
	    wie lange der Account g&uuml;ltig sein soll.  Nachdem die
	    angegebene Zeitspanne verstrichen ist, kann dieser Account
	    nicht mehr zum Anmelden verwendet werden, obwohl alle
	    Verzeichnisse und Dateien, die diesem Account geh&ouml;ren,
	    noch vorhanden sind.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>vollst&auml;ndiger Benutzername</term>

	<listitem>
	  <para>FreeBSD identifiziert einen Account eindeutig &uuml;ber
	    den Loginnamen, der aber keine &Auml;hnlichkeit mit dem
	    richtigen Namen des Benutzers haben muss.  Der
	    vollst&auml;ndige Benutzername kann daher beim Einrichten eines
	    Accounts angegeben werden.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Heimatverzeichnis</term>

	<listitem>
	  <para>Das Heimatverzeichnis gibt den vollst&auml;ndigen Pfad zu
	    dem Verzeichnis an, in dem sich der Benutzer nach erfolgreicher
	    Anmeldung befindet.  Es ist &uuml;blich, alle
	    Heimatverzeichnisse unter
	    <filename>/home/<replaceable>Loginname</replaceable></filename>
	    oder
	    <filename>/usr/home/<replaceable>Loginname</replaceable></filename>
	    anzulegen.  Im Heimatverzeichnis oder in dort angelegten
	    Verzeichnissen werden die Dateien eines Benutzers
	    gespeichert.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Login-Shell</term>

	<listitem>
	  <para>Grunds&auml;tzlich ist die Schnittstelle zum System eine
	    Shell, von denen es viele unterschiedliche gibt.  Die
	    bevorzugte Shell eines Benutzers kann seinem Account zugeordnet
	    werden.</para>
	</listitem>
      </varlistentry>
    </variablelist>

    <para>Es gibt drei Haupttypen von Accounts: Der
      <link linkend="users-superuser">Superuser</link>,
      <link linkend="users-system">Systembenutzer</link> und
      <link linkend="users-user">Benutzer-Accounts</link>.  Der
      Superuser-Account, normalerweise <username>root</username> genannt, wird
      benutzt, um das System ohne Beschr&auml;nkungen auf Privilegien zu
      verwalten.  Systembenutzer starten Dienste.  Abschlie&szlig;end werden
      Benutzer-Accounts von echten Menschen genutzt, die sich einloggen, Mails
      lesen und so weiter.</para>
  </sect1>
    
  <sect1 id="users-superuser">
    <title>Der Superuser-Account</title>

    <indexterm>
      <primary>Accounts</primary>
      <secondary>Superuser (root)</secondary>
    </indexterm>
    
    <para>Der Superuser-Account, normalerweise <username>root</username>
      genannt, ist vorkonfiguriert und erleichtert die Systemverwaltung, sollte
      aber nicht f&uuml;r allt&auml;gliche Aufgaben wie verschicken und
      empfangen von Mails, Entdecken des Systems oder Programmierung benutzt
      werden.</para>
      
    <para>Das ist so, da der Superuser im Gegensatz zu normalen
      Benutzer-Accounts ohne Beschr&auml;nkungen operiert und falsche
      Anwendung des Superuser-Accounts in spektakul&auml;ren Katastrophen
      resultieren kann.  Benutzer-Accounts sind nicht f&auml;hig das System
      versehentlich zu zerst&ouml;ren, deswegen ist es generell am besten
      normale Benutzer-Accounts zu verwenden, solange man nicht
      haupts&auml;chlich die extra Privilegien ben&ouml;tigt.</para>

    <para>Kommandos, die Sie als Superuser eingeben, sollten Sie immer
      doppelt und dreifach &uuml;berpr&uuml;fen, da ein
      zus&auml;tzliches Leerzeichen oder ein fehlender Buchstabe irreparablen
      Datenverlust bedeuten kann.</para>

    <para>Das erste, das Sie tun sollten, nachdem Sie dieses Kapitel gelesen
      haben, ist einen unprivilegierten Benutzer f&uuml;r Ihre eigene normale
      Benutzung zu erstellen, wenn Sie das nicht bereits getan haben.  Das
      trifft immer zu, egal ob Sie ein Mehrbenutzersystem oder ein System
      laufen haben, welches Sie alleine benutzen.  Sp&auml;ter in diesem
      Kapitel besprechen wir, wie man zus&auml;tzliche Accounts erstellt und
      wie man zwischen dem normalen Benutzer und dem Superuser wechselt.</para>
  </sect1>
    
  <sect1 id="users-system">
    <title>System-Accounts</title>

    <indexterm>
      <primary>Accounts</primary>
      <secondary>System-Accounts</secondary>
    </indexterm>

    <para>Systembenutzer starten Dienste wie DNS, mail, Web-Server und so
      weiter.  Der Grund daf&uuml;r ist die Sicherheit; wenn die Programme
      von dem Superuser gestartet werden, k&ouml;nnen Sie ohne
      Einschr&auml;nkungen handeln.</para>

    <indexterm>
      <primary>Accounts</primary>
      <secondary><username>daemon</username></secondary>
    </indexterm>
    <indexterm>
      <primary>Accounts</primary>
      <secondary><username>operator</username></secondary>
    </indexterm>
    <para>Beispiele von Systembenutzern sind <username>daemon</username>,
      <username>operator</username>, <username>bind</username> (f&uuml;r den
      Domain Name Service) und <username>news</username>.  Oft erstellen
      Systemadministratoren den Benutzer <username>httpd</username>, um
      Web-Server laufen zu lassen, die sie installieren.</para>

    <indexterm>
      <primary>Accounts</primary>
      <secondary><username>nobody</username></secondary>
    </indexterm>
    <para><username>nobody</username> ist der generische unprivilegierte
      Systembenutzer.  Bedenken Sie aber, dass je mehr Dienste
      <username>nobody</username> benutzen, immer mehr Dateien und Prozesse zu
      diesem Benutzer geh&ouml;ren und dieser Benutzer umso privilegierter
      wird.</para>
  </sect1>

  <sect1 id="users-user">
    <title>Benutzer-Accounts</title>

    <indexterm>
      <primary>Accounts</primary>
      <secondary>Benutzer-Accounts</secondary>
    </indexterm>

    <para>Benutzer-Account sind das prim&auml;re Mittel des Zugriffs f&uuml;r
      echte Menschen auf das System und isolieren Benutzer und Umgebung,
      sch&uuml;tzen die Benutzer davor das System oder Daten anderer Benutzer
      zu besch&auml;digen und erlauben Benutzern ihre Umgebung selbst
      einzurichten, ohne das sich dies auf andere auswirkt.</para>

    <para>Jede Person, die auf Ihr System zugreift, sollte ihren eigenen
      Account besitzen.  Das erlaubt Ihnen herauszufinden, wer was macht
      und h&auml;lt Leute davon ab, die Einstellungen der anderen zu
      ver&auml;ndern oder Mails zu lesen, die nicht f&uuml;r sie bestimmt
      waren.</para>

    <para>Jeder Benutzer kann seine eigene Umgebung einstellen, um sie
      der Benutzung auf dem System anzupassen: Alternative Shells, Editoren,
      Tastaturbelegungen und Sprache.</para>
  </sect1>

  <sect1 id="users-modifying">
    <title>Accounts ver&auml;ndern</title>

    <indexterm>
      <primary>Accounts</primary>
      <secondary>ver&auml;ndern</secondary>
    </indexterm>

    <para>Unter Unix gibt es verschiedene Kommandos, um Accounts zu
      ver&auml;ndern.  Die gebr&auml;uchlichsten Kommandos sind unten,
      gefolgt von einer detaillierten Beschreibung, zusammengefasst.</para>

    <informaltable>
      <tgroup cols="2">
	<thead>
	  <row>
	    <entry>Kommando</entry>
	    <entry>Zusammenfassung</entry>
	  </row>
	</thead>
	<tbody>
	  <row>
	    <entry><command>adduser</command></entry>
	    <entry>Das empfohlene Werkzeug, um neue Accounts zu
	      erstellen.</entry>
	  </row>
	  <row>
	    <entry><command>rmuser</command></entry>
	    <entry>Das empfohlene Werkzeug, um Accounts zu
	      l&ouml;schen.</entry>
	  </row>
	  <row>
	    <entry><command>chpass</command></entry>
	    <entry>Ein flexibles Werkzeug, um Informationen in der
	      Account-Datenbank zu ver&auml;ndern.</entry>
	  </row>
	  <row>
	    <entry><command>passwd</command></entry>
	    <entry>Ein einfaches Werkzeug, um Passw&ouml;rter von Accounts
	      zu &auml;ndern.</entry>
	  </row>
	  <row>
	    <entry><command>pw</command></entry>
	    <entry>Ein m&auml;chtiges und flexibles Werkzeug um alle
	      Informationen &uuml;ber Accounts zu &auml;ndern.</entry>
	  </row>
	</tbody>
      </tgroup>
    </informaltable>

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

      <indexterm>
	<primary>Accounts</primary>
	<secondary>erstellen</secondary>
      </indexterm>
      <indexterm>
	<primary><command>adduser</command></primary>
      </indexterm>
      <indexterm>
	<primary><filename class=directory>/usr/share/skel</filename></primary>
      </indexterm>
      <para><application>adduser</application> ist ein einfaches Programm
        um neue Benutzer hinzuzuf&uuml;gen.  Es erstellt
	<filename>passwd</filename> und <filename>group</filename>
	Eintr&auml;ge f&uuml;r den
        Benutzer, genauso wie ein home Verzeichnis, kopiert ein paar
        vorgegebene dotfiles aus <filename>/usr/share/skel</filename> und kann
        optional dem Benutzer eine ,,Willkommen``-Nachricht zuschicken.</para>

      <para>Um die anf&auml;ngliche Konfigurationsdatei zu erstellen,
        benutzen Sie: <command>adduser -s -config_create</command>.
        <footnote>
          <para>Das <option>-s</option> bringt <command>adduser</command>
            dazu, weniger Fragen und Fehlermeldungen auszugeben.
            Wir benutzen <option>-v</option> sp&auml;ter, wenn wir die
            Voreinstellungen &auml;ndern wollen.</para>
        </footnote>
        Zun&auml;chst konfigurieren wir Voreinstellungen von
	<command>adduser</command> und erstellen unseren ersten
	Benutzer-Account, da es b&ouml;se und unangenehm ist,
	<username>root</username> f&uuml;r normale Aufgaben zu verwenden.</para>
      <example>
	<title><command>adduser</command> konfigurieren</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>Zusammengefasst haben wir die vorgegebene Shell in
        <application>zsh</application> (eine zus&auml;tzliche Shell aus
        der Ports-Sammlung) ge&auml;ndert und das Senden einer
        ,,Willkommen``-Nachricht an neue Benutzer abgeschaltet.
        Danach haben wir die Konfiguration abgespeichert und anschlie&szlig;end
        einen Account f&uuml;r <username>jru</username> eingerichtet
        und sichergestellt, dass <username>jru</username> in der
        Gruppe <username>wheel</username> ist, so dass Sie mit
	<command>su</command> zu <username>root</username> wechseln
	kann.</para>
      <note>
        <para>Wenn Sie das Passwort eingeben, werden weder Passwort noch
          Sternchen angezeigt.  Passen Sie auf, dass Sie das Passwort nicht
          zweimal falsch eingeben.</para>
      </note>
      <note>
        <para>Benutzen Sie ab jetzt <command>adduser</command> ohne Argumente,
          dann m&uuml;ssen Sie nicht jedes mal die Vorgaben neu einstellen.
          Wenn das Programm Sie fragt, ob Sie die Vorgaben &auml;ndern wollen,
          verlassen und starten Sie es erneut mit der <option>-s</option>
          Option.</para>
      </note>
    </sect2>

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

      <indexterm><primary><command>rmuser</command></primary></indexterm>
      <indexterm>
	<primary>Accounts</primary>
	<secondary>l&ouml;schen</secondary>
      </indexterm>

      <para>Benutzen Sie <command>rmuser</command>, um einen Account
        vollst&auml;ndig aus dem System zu entfernen.
	<command>rmuser</command> f&uuml;hrt die folgenden Schritte
	durch:</para>

      <procedure>
        <step>
          <para>Entfernt den &man.crontab.1; Eintrag des Benutzers (wenn dieser
            existiert).</para>
        </step>
        <step>
          <para>Entfernt alle &man.at.1; jobs, die dem Benutzer geh&ouml;ren.
          </para>
        </step>
        <step>
          <para>Schlie&szlig;t alle Prozesse des Benutzers.</para>
        </step>
        <step>
          <para>Entfernt den Benutzer aus der lokalen Passwort-Datei des
            Systems.</para>
        </step>
        <step>
          <para>Entfernt das home Verzeichnis des Benutzers (falls es dem
            Benutzer geh&ouml;rt).</para>
        </step>
        <step>
          <para>Entfernt die eingegangen mails, die dem Benutzer geh&ouml;ren,
          aus <filename>/var/mail</filename>.</para>
        </step>
        <step>
          <para>Entfernt alle Dateien des Benutzers aus tempor&auml;ren
            Dateispeicherbereichen wie <filename>/tmp</filename>.</para>
        </step>
        <step>
          <para>Entfernt den Loginnamen von allen Gruppen, zu denen er
            geh&ouml;rt, aus <filename>/etc/group</filename>.

            <note>
              <para>Wenn eine Gruppe leer wird und der Gruppenname mit dem
                Loginnamen identisch ist, wird die Gruppe entfernt; das
                erg&auml;nzt sich mit den einzelnen Benutzer-Gruppen, die von
                &man.adduser.8; f&uuml;r jeden neuen Benutzer erstellt werden.
              </para>
            </note>
          </para>
        </step>
      </procedure>

      <para><application>rmuser</application> kann nicht daf&uuml;r benutzt
        werden Superuser-Accounts zu entfernen, da dies nahezu immer ein
        Zeichen f&uuml;r eine massive Verw&uuml;stung ist.</para>

      <para>Als Vorgabe wird ein interaktiver Modus benutzt, der
        sicherzustellen versucht, dass Sie wissen, was Sie tun.</para>

      <example>
        <title>Interaktives L&ouml;schen von Account mit
	  <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><application>chpass</application></title>

      <indexterm><primary><command>chpass</command></primary></indexterm>
      <para><command>chpass</command> &auml;ndert Informationen der
        Benutzerdatenbank wie Passw&ouml;rter, Shells und personelle
        Informationen.</para>

      <para>Nur Systemadministratoren, als Superuser, k&ouml;nnen die
        Informationen und Passw&ouml;rter der anderen Benutzer mit
        <command>chpass</command> ver&auml;ndern.</para>

      <para>Werden keine Optionen neben dem optionalen Loginnamen
        angegeben, zeigt <command>chpass</command> einen Editor
        mit Account-Informationen an und aktualisiert die
	Account-Datenbank, wenn dieser Editor beendet wird.</para>

      <example>
        <title>Interaktives <command>chpass</command> des Superusers</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>Der normale Benutzer kann nur einen kleinen Teil dieser
        Informationen ver&auml;ndern und nat&uuml;rlich nur f&uuml;r sich
        selbst.</para>

      <example>
        <title>Interaktives chpass eines normalen Benutzers</title>

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

      <note>
        <para><command>chfn</command> und <command>chsh</command> sind
          nur Verweise auf <command>chpass</command>, genauso wie
          <command>ypchpass</command>, <command>ypchfn</command> und
          <command>ypchsh</command>.  NIS wird automatisch unterst&uuml;tzt,
          deswegen ist es nicht notwendig das <literal>yp</literal> vor dem
          Kommando einzugeben.  NIS wird sp&auml;ter
	  <!-- in <xref linkend="advanced-networking">--> besprochen.</para>
      </note>
    </sect2>
    <sect2 id="users-passwd">
      <title><application>passwd</application></title>

      <indexterm><primary><command>passwd</command></primary></indexterm>
      <indexterm>
	<primary>Accounts</primary>
	<secondary>Passwort wechseln</secondary>
      </indexterm>
      <para><command>passwd</command> ist der &uuml;bliche Weg Ihr
        eigenes Passwort als Benutzer zu &auml;ndern oder das Passwort eines
        anderen Benutzers als Superuser.</para>

      <note>
        <para>Benutzer m&uuml;ssen ihr urspr&uuml;ngliches Passwort eingeben,
          bevor sie es wechseln, um eine nicht autorisierte Person davon
          abzuhalten ihr Passwort zu &auml;ndern, wenn der Benutzer gerade
          nicht an seinem Ger&auml;t ist.</para>
      </note>

      <example>
        <title>Wechseln des Passworts</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

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

      <example>
	<title>Als Superuser das Passwort eines anderen Accounts
	  ver&auml;ndern</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>Wie bei <command>chpass</command> ist <command>yppasswd</command>
	  nur ein Verweis auf <command>passwd</command>.  NIS wird von
	  jedem dieser Kommandos unterst&uuml;tzt.</para>
      </note>
    </sect2>

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

      <para><application>pw</application> ist ein Kommandozeilenprogramm, mit
        dem man Accounts und Gruppen erstellen, entfernen, ver&auml;ndern
	und anzeigen kann.  Dieses Kommando dient als Schnittstelle zu den
        Benutzer- und Gruppendateien des Systems.  <command>pw</command>
	besitzt eine Reihe m&auml;chtiger Kommandozeilenschalter, die es
	f&uuml;r die Benutzung in Shell-Scripts geeignet machen, doch
	finden neue Benutzer die Bedienung des Kommandos komplizierter, als
	die der anderen hier vorgestellten Kommandos.</para>
    </sect2>
  </sect1>

  <sect1 id="users-limiting">
    <title>Benutzer einschr&auml;nken</title>

    <indexterm><primary>Benutzer einschr&auml;nken</primary></indexterm>
    <indexterm>
      <primary>Accounts</primary>
      <secondary>einschr&auml;nken</secondary>
    </indexterm>
    <para>Wenn Sie ein System mit mehreren Benutzern laufen lassen, ist es
      wahrscheinlich, dass Sie nicht allen Benutzern vertrauen das System
      nicht zu besch&auml;digen.  FreeBSD bietet dem Systemadministrator
      mehrere M&ouml;glichkeiten die System-Ressourcen einzuschr&auml;nken,
      die ein einzelner Benutzer verwenden kann.  Diese Limitierungen sind
      in zwei Kategorien eingeteilt: Festplattenkontingente und andere
      Ressourcenbeschr&auml;nkungen.</para>

    <indexterm><primary>Quotas</primary></indexterm>
    <indexterm>
      <primary>Benutzer einschr&auml;nken</primary>
      <secondary>Quotas</secondary>
    </indexterm>
    <indexterm><primary>Festplatten Quotas</primary></indexterm>
    <para>Festplatten-Kontingente sind ein Weg f&uuml;r den
      Systemadministrator dem Dateisystem mitzuteilen, wieviel Speicher
      ein Benutzer verwenden darf.  Mit ihrer Hilfe kann man auch die
      Gr&ouml;&szlig;e des von einem Benutzer verwendeten Platzes
      &uuml;berpr&uuml;fen, ohne jedes mal neu berechnen zu m&uuml;ssen.
      Kontingente werden in <xref linkend="quotas"> diskutiert.</para>

    <indexterm>
      <primary><filename>/etc/login.conf</filename></primary>
    </indexterm>
    <para>Die Login-Klassen werden in <filename>/etc/login.conf</filename>
      definiert.  Auf die pr&auml;zisen Semantiken gehen wir hier nicht
      weiter ein, sie k&ouml;nnen jedoch in &man.login.conf.5;
      nachgelesen werden.  Es ist ausreichend zu sagen, dass jeder
      Benutzer einer Login-Klasse zugewiesen wird (standardm&auml;&szlig;ig
      <literal>default</literal>) und dass jede Login-Klasse mit einem Satz
      von Login-F&auml;higkeiten verbunden ist.  Eine Login-F&auml;higkeit
      ist ein <literal><replaceable>Name</replaceable>=<replaceable>Wert
      </replaceable></literal> Paar, in dem <replaceable>Name</replaceable>
      die F&auml;higkeit bezeichnet und <replaceable>Wert</replaceable>
      ein willk&uuml;rlicher Text ist, der je nach <replaceable>Name
      </replaceable> entsprechend verarbeitet wird.  Login-Klassen und
      -F&auml;higkeiten zu definieren ist fast schon selbsterkl&auml;rend
      und wird auch in &man.login.conf.5; beschrieben.</para> 

    <para>Ressourcenbeschr&auml;nkungen unterscheiden sich von normalen
      Login-F&auml;higkeiten zweifach.  Erstens gibt es f&uuml;r jede
      Beschr&auml;nkung ein aktuelles und ein maximales Limit.  Das
      aktuelle Limit kann vom Benutzer oder einer Anwendung beliebig
      bis zum maximalen Limit ver&auml;ndert werden.  Letzteres kann
      der Benutzer nur heruntersetzen.  Zweitens gelten die meisten
      Ressourcenbeschr&auml;nkungen f&uuml;r jeden vom Benutzer
      gestarteten Prozess, nicht f&uuml;r den Benutzer selbst.
      Beachten Sie jedoch, dass diese Unterschiede durch das spezifische
      Einlesen der Limits und nicht durch die Implementation der
      Login-F&auml;higkeiten entstehen (das heisst, sie sind kein
      <emphasis>wirklich</emphasis> spezieller Fall der
      Login-F&auml;higkeiten).</para> 

    <para>Hier befinden sich die am h&auml;ufigsten benutzten
      Ressourcenbeschr&auml;nkungen (der Rest kann zusammen mit den
      anderen Login-F&auml;higkeiten in &man.login.conf.5; gefunden
      werden):</para>

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

	<listitem>
	  <indexterm><primary>coredumpsize</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>coredumpsize</secondary>
	  </indexterm>
          <para>Das Limit der Gr&ouml;&szlig;e einer core-Datei, die
	    von einem Programm generiert wird, unterliegt aus
	    offensichtlichen Gr&uuml;nden anderen Limits der
	    Festplattenbenutzung (zum Beispiel <literal>filesize</literal>
	    oder Festplattenkontingenten).  Es wird aber trotzdem
	    oft als weniger harte Methode zur Kontrolle des
	    Festplattenplatz-Verbrauchs verwendet: Da Benutzer die
	    core-Dateien nicht selbst erstellen, und sie oft nicht
	    l&ouml;schen, kann sie diese Option davor retten, dass
	    ihnen kein Festplattenspeicher mehr zur Verf&uuml;gung
	    steht, sollte ein gro&szlig;es Programm, wie
	    <application>emacs</application>, abst&uuml;rzen.</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>cputime</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>cputime</secondary>
	  </indexterm>
	  <para>Die maximale Rechenzeit, die ein Prozess eines Benutzers
	    verbrauchen darf.  &Uuml;berschreitet der Prozess diesen Wert,
	    wird er vom Kernel beendet. 
	    <note>
	      <para>Die Rechen<emphasis>zeit</emphasis> wird limitiert,
		nicht die prozentuale Prozessorenbenutzung, wie es in
		einigen Feldern in &man.top.1; und &man.ps.1; dargestellt
		wird.  Letzteres war zu der Zeit, als dies hier geschrieben
		wurde nicht m&ouml;glich und w&uuml;rde eher nutzlos sein:
		Ein Compiler&mdash;ein wahrscheinlich legitimer
		Vorgang&mdash; kann leicht fast 100% des Prozessors in
		Anspruch nehmen.</para>
	    </note>
	  </para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>filesize</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>filesize</secondary>
	  </indexterm>
	  <para>Hiermit l&auml;sst sich die maximale gr&ouml;sse einer Datei
	    bestimmen, die der Benutzer besitzen darf.  Im Gegensatz zu
            <link linkend="quotas">Festplattenkontingenten</link> ist diese
	    Beschr&auml;nkung nur f&uuml;r jede einzelne Datei g&uuml;ltig
	    und nicht f&uuml;r den Platz, den alle Dateien eines Benutzers
	    verwenden.</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>maxproc</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>maxproc</secondary>
	  </indexterm>
	  <para>Das ist die maximale Anzahl von Prozessen, die ein
	    Benutzer starten darf, und beinhaltet sowohl Vordergrund-
	    als auch Hintergrundprozesse.  Nat&uuml;rlich darf dieser
	    Wert nicht h&ouml;her sein als das System-Limit, das in
	    <varname>kern.maxproc</varname> angegeben ist.  Vergessen
	    Sie auch nicht, dass ein zu kleiner Wert den Benutzer in
	    seiner Produktivit&auml;t einschr&auml;nken k&ouml;nnte;
	    es ist oft n&uuml;tzlich mehrfach eingeloggt zu sein, oder
	    <foreignphrase>Pipelines</foreignphrase>
	      <footnote>
		<para><foreignphrase>Pipeline</foreignphrase> =
		  <emphasis>Leitung</emphasis>.
		  Mit <foreignphrase>Pipes</foreignphrase> sind Verbindungen
		  zwischen zwei Sockets in meistens zwei verschiedenen
		  Prozessen gemeint.</para>
	      </footnote>
	    zu verwenden.  Ein paar Aufgaben, wie die Kompilierung eines
	    gro&szlig;oen Programms, starten mehrere Prozesse (zum Beispiel
	    &man.make.1;, &man.cc.1; und andere).</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>memorylocked</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>memorylocked</secondary>
	  </indexterm>
	  <para>Dieses Limit gibt an, wie viel virtueller Speicher von einem
	    Prozess maximal im Arbeitsspeicher festgesetzt werden kann.
	    (siehe auch &man.mlock.2;).  Ein paar systemkritische Programme,
	    wie &man.amd.8;, verhindern damit einen Systemzusammenbruch, der
	    auftreten k&ouml;nnte, wenn sie aus dem Speicher genommen werden.
	  </para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>memoryuse</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>memoryuse</secondary>
	  </indexterm>
	  <para>Bezeichnet den maximalen Speicher, den ein Prozess benutzen
	    darf und beinhaltet sowohl Arbeitsspeicher-, als auch Swap-
	    Benutzung.  Es ist kein all&uuml;bergreifendes Limit f&uuml;r
	    den Speicherverbrauch, aber ein guter Anfang.</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>openfiles</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>openfiles</secondary>
	  </indexterm>
	  <para>Mit diesem Limit l&auml;sst sich die maximale Anzahl
	    der von einem Prozess des Benutzers ge&ouml;ffneten Dateien
	    festlegen.  In FreeBSD werden Dateien auch verwendet, um Sockets
	    und <foreignphrase>IPC</foreignphrase>-Kan&auml;le
	    <footnote>
	      <para><foreignphrase>IPC</foreignphrase> steht f&uuml;r
		<foreignphrase>Interprocess Communication</foreignphrase>.
		</para>
	    </footnote>
	    darzustellen.  Setzen Sie es deshalb nicht zu niedrig.  Das
	    System-Limit ist im <varname>kern.maxfiles</varname>
	    <command>sysctl</command> definiert.</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>sbsize</primary></indexterm>
	  <indexterm>
	    <primary>Benutzer einschr&auml;nken</primary>
	    <secondary>sbsize</secondary>
	  </indexterm>
	  <para>Dieses Limit beschr&auml;nkt den Netzwerk-Speicher, und damit
	    die mbufs, die ein Benutzer verbrauchen darf.  Es stammt aus einer
	    Antwort auf einen DoS-Angriff, bei dem viele Netzwerk-Sockets
	    ge&ouml;ffnet wurden, kann aber generell dazu benutzt werden
	    Netzwerk-Verbindungen zu beschr&auml;nken.</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <para>Das ist die maximale Gr&ouml;&szlig;e, auf die der Stack
	    eines Prozesses heranwachsen darf.  Das allein ist nat&uuml;rlich
	    nicht genug um den Speicher zu beschr&auml;nken, den ein Programm
	    verwenden darf.  Es sollte deshalb in Verbindung mit anderen
	    Limits gesetzt werden.</para>
	</listitem>
      </varlistentry>
    </variablelist>

    <para>Beim Setzen von Ressourcenbeschr&auml;nkungen sind noch andere
      Dinge zu beachten.  Nachfolgend ein paar generelle Tipps, Empfehlungen
      und verschiedene Kommentare.</para>

    <itemizedlist>
      <listitem>
	<para>Von <filename>/etc/rc</filename> beim Hochfahren des Systems
	  gestartete Prozesse werden der <literal>daemon</literal>
	  Login-Klasse zugewiesen.</para>
      </listitem>

      <listitem>
	<para>Obwohl das mitgelieferte <filename>/etc/login.conf</filename>
	  eine Quelle von vern&uuml;nftigen Limits darstellt, k&ouml;nnen nur
	  Sie, der Administrator, wissen, was f&uuml;r Ihr System angebracht
	  ist.  Ein Limit zu hoch anzusetzen k&ouml;nnte Ihr System f&uuml;r
	  Missbrauch &ouml;ffnen, und ein zu niedriges Limit der
	  Produktivit&auml;t einen Riegel vorschieben.</para>
      </listitem>

      <listitem>
	<para>Benutzer des X-Window Systems (X11) sollten wahrscheinlich
	  mehr Ressourcen zugeteilt bekommen als andere Benutzer.  X11
	  beansprucht selbst schon eine Menge Ressourcen, verleitet die
	  Benutzer aber auch, mehrere Programme gleichzeitig laufen zu
	  lassen.</para>
      </listitem>

      <listitem>
	<para>Bedenken Sie, dass viele Limits f&uuml;r einzelne Prozesse
	  gelten und nicht f&uuml;r den Benutzer selbst.  Setzt man
	  zum Beispiel <varname>openfiles</varname> auf 50, kann jeder
	  Prozess des Benutzers bis zu 50 Dateien &ouml;ffnen.  Dadurch
	  ist die maximale Anzahl von Dateien, die von einem Benutzer
	  ge&ouml;ffnet werden k&ouml;nnen, <literal>openfiles</literal>
	  mal <literal>maxproc</literal>.  Das gilt auch f&uuml;r den
	  Speicherverbrauch.</para>
      </listitem>
    </itemizedlist>

    <para>F&uuml;r weitere Informationen &uuml;ber
      Ressourcenbeschr&auml;nkungen, Login-Klassen und -F&auml;higkeiten
      generell, sehen Sie sich die entsprechenden Manual Pages an:
      &man.cap.mkdb.1;, &man.getrlimit.2; und &man.login.conf.5;.</para>
  </sect1>

  <sect1 id="users-personalizing">
    <title>Benutzer personalisieren</title>

    <para>Die Lokalisierung ist eine Umgebung, die vom Systemadministrator
      oder Benutzer eingerichtet wird, um verschiedene Sprachen,
      Zeichens&auml;tze, Datum- und Zeitstandards und so weiter
      unterzubringen.  Dies wird im Kapitel &uuml;ber die
<!--
      <link linkend="l10n">Lokalisierung</link>
-->
      Lokalisierung
      besprochen.</para>
  </sect1>

  <sect1 id="users-groups">
    <title>Gruppen</title>

    <indexterm><primary>Gruppen</primary></indexterm>
    <indexterm>
      <primary><filename>/etc/groups</filename></primary>
    </indexterm>
    <indexterm>
      <primary>Accounts</primary>
      <secondary>Gruppen</secondary>
    </indexterm>
    <para>Eine Gruppe ist einfach eine Zusammenfassung von Accounts.
      Gruppen werden durch den Gruppennamen und die GID (group ID)
      identifiziert.  Der Kernel von FreeBSD (und den meisten anderen Unix
      Systemen) entscheided anhand der UID und der Gruppenmitgliedschaft
      eines Prozesses, ob er dem Prozess etwas erlaubt oder nicht.  Im
      Unterschied zur UID kann ein Prozess zu einer Reihe von Gruppen
      geh&ouml;ren.  Wenn jemand von der <quote>group ID</quote> eines
      Benutzers oder Prozesses spricht, meint er damit meistens die erste
      Gruppe der Gruppenliste.</para>

    <para>Die Zuordnung von Gruppennamen zur GID steht in
      <filename>/etc/group</filename>, einer Textdatei mit vier durch
      Doppelpunkte getrennten Feldern.  Im ersten Feld steht der
      Gruppenname, das zweite enth&auml;lt ein verschl&uuml;sseltes
      Passwort, das dritte gibt die GID an und das vierte besteht aus einer
      Komma separierten Liste der Mitglieder der Gruppe.  Diese Datei kann
      einfach editiert werden (nat&uuml;rlich nur, wenn Sie dabei keine
      Syntaxfehler machen).  Eine ausf&uuml;hrliche Beschreibung der Syntax
      dieser Datei finden Sie in &man.group.5;.</para>

    <para>Wenn Sie <filename>/etc/group</filename> nicht h&auml;ndisch
      editieren m&ouml;chten, k&ouml;nnen Sie &man.pw.8; zum Editieren
      benutzen.  Das folgende Beispiel zeigt das Hinzuf&uuml;gen einer
      Gruppe mit dem Namen <groupname>teamtwo</groupname>:</para>

    <example>
      <title>Hinzuf&uuml;gen einer Gruppe mit &man.pw.8;</title>

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

    <para>Die Zahl <literal>1100</literal> ist die GID der Gruppe
      <groupname>teamtwo</groupname>.  Momentan hat
      <groupname>teamtwo</groupname> noch keine Mitglieder und ist daher
      ziemlich nutzlos.  Um das zu &auml;ndern, nehmen wir nun
      <username>jru</username> in <groupname>teamtwo</groupname>
      auf.</para>

    <example>
      <title>Ein Gruppenmitglied mit &man.pw.8; hinzuf&uuml;gen</title>

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

    <para>Als Argument von <option>-M</option> geben Sie eine Komma
      separierte Liste von Mitgliedern an, die Sie in die Gruppe aufnehmen
      m&ouml;chten.  Aus den vorherigen Abschnitten ist bekannt, dass die
      Passwort-Datei ebenfalls eine Gruppe f&uuml;r jeden Benutzer
      enth&auml;lt.  Das System teilt dem Benutzer automatisch eine Gruppe
      zu, die aber vom <command>groupshow</command> Kommando von &man.pw.8;
      nicht angezeigt wird.  Diese Information wird allerdings von
      &man.id.1; und &auml;hnlichen Werkzeugen angezeigt.  Das hei&szlig;t,
      dass &man.pw.8; nur <filename>/etc/group</filename> manipuliert,
      es wird nicht versuchen, zus&auml;tzliche Informationen aus
      <filename>/etc/passwd</filename> zu lesen.</para>

    <example>
      <title>Mit &man.id.1; die Gruppenzugeh&ouml;rigkeit bestimmen</title>

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

    <para>Wie Sie sehen, ist <username>jru</username> Mitglied von
      <groupname>jru</groupname> und <groupname>teamtwo</groupname>.</para>

    <para>Weitere Informationen entnehmen Sie bitte &man.pw.8;.</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:
-->
