aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/books/handbook/users/chapter.xml
blob: 0794c7399d93e45619f97abc3c5fdc1ea1486d1b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
<?xml version="1.0" encoding="euc-jp"?>
<!--
     The FreeBSD Documentation Project
     The FreeBSD Japanese Documentation Project

     Original revision: r41037
     $FreeBSD$
-->

<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>&os; は、複数のユーザが同時にコンピュータを使えるようにします。
      スクリーンとキーボードの前に一度に座れるのはその中の一人だけですが
      ユーザは何人でもネットワークを通してログインできます。
      システムを使うためには、
      どのユーザもアカウントがなければなりません。</para>

    <para>この章を読むと、以下のことがわかります。</para>

    <itemizedlist>
      <listitem>
	<para>&os; のさまざまなユーザアカウントの違い</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><link linkend="basics">&unix;&os; の基礎知識</link>
	  を理解しておいてください。</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="users-introduction">
    <title>はじめに</title>

    <para>&os; システムへアクセスするには、
      かならずアカウントが使われ、
      また、プロセスもすべてユーザによって実行されるので、
      ユーザとアカウントの管理は、重要なものです。
    </para>

    <para>&os; システム上のどのアカウントにも、
      そのアカウントを識別するための情報がなにかしら結び付けられています。</para>

    <variablelist>
      <varlistentry>
	<term>ユーザ名</term>

	<listitem>
	  <para><prompt>login:</prompt>
	    プロンプトに対して入力するユーザの名前です。
	    ユーザ名はそのシステムで一意でなければならず、
	    2 名のユーザに同じユーザ名をつけることはできません。
	    有効なユーザ名を作成するには &man.passwd.5;
	    に記載されているいくつもの規則があります。
	    アプリケーションの上位互換性を保つために、
	    8 文字以下の小文字からなるユーザ名が一般的です。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>パスワード</term>

	<listitem>
	  <para>それぞれのアカウントにはパスワードがあります。
	    パスワードは空白にもできますが、
	    行うべきではありません。
	    すべてのアカウントにはパスワードをつけるべきです。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>ユーザ ID (<acronym>UID</acronym>)</term>

	<listitem>
	  <para>ユーザ ID (<acronym>UID</acronym>) は、
	    システムがユーザを一意に識別するための、
	    伝統的には 0 から 65535<footnote
	      id="users-largeuidgid">
	      <para><acronym>UID</acronym><acronym>GID</acronym>
		には 4294967295 までの数を使えますが、
		そのような ID は、ID
		の値に対して仮定を置いているソフトウェアで問題を起こす可能性があります。</para>
	    </footnote>の間の数値です。内部的には、&os; はユーザの識別に
	    <acronym>UID</acronym> を使っています。
	    ユーザ名を指定できるコマンドは、
	    ユーザ名を <acronym>UID</acronym> に変換してから扱っています。
	    好ましくありませんが、同じ <acronym>UID</acronym>
	    を持つ異なるユーザ名のアカウントがいくつあってもよいということになります。
	    &os; に限っていうと、
	    これらのアカウントはひとりのユーザとして扱われます。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>グループ ID (<acronym>GID</acronym>)</term>

	<listitem>
	  <para>グループ ID (<acronym>GID</acronym>) は、
	    ユーザが属する第一グループを一意に識別するための、
	    伝統的には 0 から 65535<footnoteref linkend="users-largeuidgid"/>
	    の間の数値です。グループは、<acronym>UID</acronym> ではなく、
	    ユーザの <acronym>GID</acronym> に基づいて資源へのアクセスを制御する仕組みです。
	    これは、ある種の設定ファイルのサイズを大幅に小さくします。
	    ユーザは、複数のグループに所属できます。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>ログインクラス</term>

	<listitem>
	  <para>ログインクラスはグループの仕組みを拡張したもので、
	    別々のユーザに対してシステムを調整する時に、
	    さらなる柔軟性を提供します。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>パスワード変更時間</term>

	<listitem>
	  <para>デフォルトでは、&os;
	    は定期的にパスワードを変更することをユーザに強制しません。
	    これをユーザごとに設定して、一部またはすべてのユーザに、
	    一定の時間がたったらパスワードを強制的に変更させることができます。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>アカウント失効時間</term>

	<listitem>
	  <para>デフォルトでは、&os; はアカウントを失効させません。
	    たとえば学校で生徒のアカウントがある場合など、
	    限られた期間だけのアカウントを作成するなら、
	    そのアカウントがいつ失効するか指定できます。
	    有効期間が経過したら、
	    そのアカウントのディレクトリやファイルは残っていますが、
	    システムへのログインはできなくなります。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>ユーザの氏名</term>

	<listitem>
	  <para>&os; ではユーザ名でアカウントを一意に識別しますが、
	    必ずしもユーザの本名を反映したものではありません。
	    この情報をアカウントに関連付けることもできます。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>ホームディレクトリ</term>

	<listitem>
	  <para>ホームディレクトリは、システム中のディレクトリへのフルパスです。
	    これはユーザがログインした時に作業を開始するディレクトリです。
	    一般的な慣習は、すべてのユーザのホームディレクトリを <filename
	      class="directory">/home/<replaceable>username</replaceable></filename><filename
	      class="directory">/usr/home/<replaceable>username</replaceable></filename>
	    の下に置くことです。
	    各ユーザは、個人のファイルやサブディレクトリを、
	    ユーザのホームディレクトリに保存します。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>ユーザシェル</term>

	<listitem>
	  <para>シェルは、
	    ユーザがシステムと対話するデフォルトの環境を提供します。
	    いろいろな種類のシェルがあり、
	    経験を積んだユーザはそれぞれ好みがあり、
	    それをアカウントの設定に反映できます。</para>
	</listitem>
      </varlistentry>
    </variablelist>

    <para>
      アカウントには大きく分けて三種類のものがあります。それは、
      <link linkend="users-superuser">スーパーユーザ (superuser)</link><link linkend="users-system">システムアカウント (system accounts)</link>、
      そして<link linkend="users-user">ユーザアカウント (user accounts)</link> です。
      スーパーユーザのアカウントは通常 <username>root</username> と呼ばれ、
      無制限の特権を持つためにシステムの管理に用いられます。
      また、システムアカウントはサービスの運用に用いられ、
      ユーザアカウントは、
      実際のユーザに割り当てられ、ログインしてシステムを利用するために使われます。</para>

    <sect2 id="users-superuser">
      <title>スーパーユーザアカウント</title>

      <indexterm>
	<primary>アカウント</primary>
	<secondary>スーパーユーザ (root)</secondary>
      </indexterm>
      <para>スーパーユーザアカウントは通常
	<username>root</username> と呼ばれ、
	システム管理を行なうために使われます。
	このアカウントはメールのやりとり、システムの調査、
	プログラミングといった日常的な作業を行なうために使われるべきものではありません。</para>

      <para>その理由は、スーパーユーザが通常のユーザアカウントと異なり、
	操作にまったく制限を受けないことによります。
	そのためスーパーユーザアカウントで操作を間違えると、
	システムに重大な影響を与えてしまう恐れがあるのです。
	ユーザアカウントでは、
	仮に操作を間違えてもシステムを壊してしまうようなことはできないようになっています。
	したがって特権を必要としていないのであれば、
	できるだけいつもユーザアカウントを利用する方が望ましいと言えるでしょう。</para>

      <para>スーパーユーザで実行するコマンドはいつでも、
	二回、三回と確認してください。
	なぜならスペースが多かったり、文字が欠けていたりするだけで、
	取り返しのつかないデータの破壊につながる可能性があるからです。</para>

      <para>常にシステム管理者用にユーザアカウントを作成し、
	一般的な使用においては、そのアカウントを使ってください。
	これはマルチユーザモード、シングルユーザモードを問わず、
	同様にあてはまります。
	この章のうしろの方では、アカウントの追加と通常のユーザから
	スーパーユーザへと移行する手順について扱います。</para>
    </sect2>

    <sect2 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>, <username>news</username> および
	<username>www</username>
	といったものがあります。</para>

      <indexterm>
	<primary>アカウント</primary>
	<secondary><username>nobody</username></secondary>
      </indexterm>
      <para><username>nobody</username>
	ユーザは通常の特権を持たないシステムユーザです。
	しかし、<username>nobody</username>
	を利用するサービスが増えれば増えるほど、
	それに所属するファイルやプロセスも増え、
	その特権も大きくなるということを忘れないようにしてください。</para>
    </sect2>

    <sect2 id="users-user">
      <title>ユーザアカウント</title>

      <indexterm>
	<primary>アカウント</primary>
	<secondary>user</secondary>
      </indexterm>
      <para>ユーザアカウントは、
	主に現実のユーザがシステムにアクセスする手段として用いられるものです。
	このアカウントは利用するユーザとシステム環境を分離します。
	そのため、システムや他のユーザに危害をおよぼす危険性をなくし、また、
	他に影響を与えることなくユーザ自身の環境をカスタマイズすることを可能にしています。</para>

      <para>システムにアクセスするすべてのユーザは、
	それぞれ唯一のユーザアカウントを持つべきです。
	こうすることで管理者は誰が何を行なっているかがわかりますし、
	他の人の設定を壊してしまったり、
	他人のメールを読んでしまうようなことを避けることができます。</para>

      <para>それぞれのユーザは快適にシステムを利用するため、
	シェル、エディタ、キー設定、言語など、
	各自の環境をセットアップすることができます。</para>
    </sect2>
  </sect1>

  <sect1 id="users-modifying">
    <title>アカウント情報の変更</title>

    <indexterm>
      <primary>アカウント</primary>
      <secondary>変更</secondary>
    </indexterm>

    <para>&os; には、
      ユーザアカウントを操作するのにさまざまなコマンドが用意されています。
      もっとも一般的なコマンドを以下に示し、
      それに続いて詳しい使用例を示します。</para>

    <informaltable frame="none" pgwide="1">
      <tgroup cols="2">
	<colspec colwidth="1*"/>
	<colspec colwidth="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>
      <para>&man.adduser.8; は、
        新しいユーザを登録するためのシンプルなプログラムです。
	ユーザを追加すると、
	このプログラムは、<filename>/etc/passwd</filename><filename>/etc/group</filename> を自動的に更新します。
	また、新規ユーザのホームディレクトリを作成し、
	<filename class="directory">/usr/share/skel</filename>
	から、デフォルトで使用される設定ファイルをコピーします。
	また、新しく作成されたユーザに対して、
        ウェルカムメッセージをメールで送信することも可能です。</para>

      <example>
	<title>&os; におけるユーザの追加</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]:
Home directory permissions (Leave empty for default):
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>

      <note>
	<para>入力したパスワードは画面に表示されませんので、
	  ユーザアカウントを作成する際には、
	  パスワードを間違えて入力してしまわないように注意してください。</para>
      </note>
    </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 class="directory">/var/mail</filename>
            から、指定されたユーザの到着メールファイルを削除。</para>
	</step>

	<step>
	  <para><filename class="directory">/tmp</filename>
            のような一時ファイル保存領域から、
            指定されたユーザの所有するファイルを削除。</para>
	</step>

	<step>
	  <para>そして最後に、
            <filename>/etc/group</filename> にある
            すべてのグループから、指定されたユーザを削除します。</para>

	  <note>
	    <para>指定されたユーザと同じ名前のグループで、
	      そのユーザが削除されると空のグループとなる場合は、
	      そのグループ自体が削除されます。
	      これは &man.adduser.8; によってユーザごとに作成される、
	      ユニークなグループに対応するものです。</para>
	  </note>
	</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>スーパユーザでない場合は、
	  エディタを抜けた後にパスワードを聞かれます。</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; も同様です。
          <acronym>NIS</acronym> のサポートは自動的に行なわれますので、
          コマンドの先頭に <literal>yp</literal>
          をつける必要はありません。
	  NIS の設定については、
	  <!--  <xref linkend="network-servers"/> (cf. rev.1.48) -->
	  で説明されています。</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;
	はとても強力な一連のコマンドラインオプションを有しており、
	シェルスクリプトで使うのに向いていますが、新しいユーザは、
	この章で紹介されている他のコマンドに比べて難しいと感じるかもしれません。</para>
      </sect2>

  </sect1>

  <sect1 id="users-limiting">
    <title>ユーザへの制限</title>

    <indexterm><primary>ユーザに対する制限</primary></indexterm>
    <indexterm>
      <primary>アカウント</primary>
      <secondary>制限</secondary>
    </indexterm>
    <para>&os; は、
      個々のユーザが利用できるシステム資源の量を管理者が制限できる方法をいくつも用意しています。
      その種の制限は、ディスククォータ (quota)
      とその他の資源の制限の 2 つの章で説明します。</para>

    <indexterm><primary>クォータ (quotas)</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>
      は、<replaceable>名称</replaceable> に応じて処理される任意の文字列です。
      ログインクラスとケーパビリティを設定するのはどちらかといえば簡単なことで、
      &man.login.conf.5; でも説明されています。</para>

    <note>
      <para>&os; は通常、直接 <filename>/etc/login.conf</filename>
	から設定を読み込まず、
	より速く検索できる
	<filename>/etc/login.conf.db</filename>
	データベースから読み込みます。<filename>/etc/login.conf</filename>
	を編集する時には <filename>/etc/login.conf.db</filename>
	を次のコマンドを実行してアップデートする必要があります。</para>

      <screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen>
    </note>

    <para>リソースの制限は、
      2 つの点で標準的なログインケーパビリティと異なっています。
      第一に、どの制限についても、ソフト (現在の)
      リミットとハードリミットがあります。
      ソフトリミットは、ユーザやアプリケーションが調整できますが、
      ハードリミットを超えることはできません。
      ユーザはハードリミットを下げることはできますが、
      上げることはスーパユーザのみができます。
      第二に、ほとんどのリソースの制限は特定のユーザに対してプロセス毎に適用されるもので、
      そのユーザが利用するリソースの総量を制限するものではありません。
      ただし、この違いは制限を特別扱いすることで実現されるものであり、
      ログインケーパビリティフレームワークの実装によるものではありません。</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 ファイルを自分で生成するわけではなく、
	    削除しないことも多いので、
	    これを設定すれば大きなプログラムが異常終了してもディスクの空きがなくならずに済みます。</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>cputime</primary></indexterm>
	  <indexterm>
	    <primary>ユーザに対する制限</primary>
	    <secondary>cputime</secondary>
	  </indexterm>
	  <para>そのユーザのプロセスが消費できる CPU 時間の上限です。
	    これを超えたプロセスは、カーネルにより終了されます。</para>

	  <note>
	    <para>これは、消費される CPU <emphasis>時間</emphasis>
	      についての制限であって、&man.top.1; や &man.ps.1;
	      のフィールドで表示される
	      CPU の割合に関するものではありません。</para>
	  </note>
	</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>
	    で指定されたシステムの制限を超えることはできません。
	    同時に複数ログインすることや、
	    パイプライン実行することは便利なことが多いので、
	    この値をあまり小さな値に設定すると、
	    そのユーザの生産性が悪化する可能性があります。
	    大きなプログラムをコンパイルする場合のように、
	    タスクによっては複数のプロセスやプリプロセッサが実行されます。</para>
	</listitem>
      </varlistentry>

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

	<listitem>
	  <indexterm><primary>memorylocked</primary></indexterm>
	  <indexterm>
	    <primary>ユーザに対する制限</primary>
	    <secondary>memorylocked</secondary>
	  </indexterm>
	  <para>これは、1 つのプロセスが &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>これは、あるプロセスが開いておける最大のファイル数です。
	    &os; では、ファイルはまた、ソケットや
	    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>これは、あるユーザが消費できるネットワークメモリ
	    (つまり mbuf) の上限の量です。ユーザは、
	    ネットワーク通信を制限するのに使えます。</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><application>&xorg;</application> のユーザには、
	  他のユーザより多くのリソースを与えるべきかもしれません。
	  <application>&xorg;</application>
	  そのものが多くのリソースを使うだけでなく、
	  より多くのプログラムを並行して使うことをユーザに促します。</para>
      </listitem>

      <listitem>
	<para>多くの制限は個々のプロセスにかかるもので、
	  一人のユーザにまとめてかかるものではありません。
	  例えば、<varname>openfiles</varname>50 に設定することは、
	  ユーザが動かすそれぞれのプロセスが最大
	  50 個のファイルを開けるということです。
	  あるユーザが開けるファイルの総数は、
	  <literal>openfiles</literal> の値に <literal>maxproc</literal>
	  をかけたものになります。
	  同じことがメモリ消費量にもあてはまります。</para>
      </listitem>
    </itemizedlist>

    <para>リソースの制限と、ログインクラス、
      ログインケーパビリティ一般についての詳しい情報は、
      &man.cap.mkdb.1;, &man.getrlimit.2; および &man.login.conf.5;
      をご覧ください。</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>グループとは、ユーザを羅列したものです。
      グループは、グループ名と <acronym>GID</acronym> で識別されます。
      &os; では、
      あるプロセスが何かするのを許可するかどうかをカーネルが判断する際に、
      プロセスの <acronym>UID</acronym>
      とそのユーザが所属するグループの一覧を利用します。
      ほとんどの場合、ユーザもしくはプロセスの <acronym>GID</acronym>
      は一覧の最初のグループを指しています。</para>

    <para>グループ名から <acronym>GID</acronym> への写像は
      <filename>/etc/group</filename> にあります。
      これは、コロンで区切られた 4 項目からなるテキストファイルです。
      1 番目の項目はグループ名、
      2 番目は暗号化されたパスワード、
      3 番目が <acronym>GID</acronym>4 番目がカンマで区切られたメンバの一覧です。
      文法についての完全な説明は、&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> という番号は、
      <groupname>teamtwo</groupname><acronym>GID</acronym> です。
      この時点では、<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.pw.8; によるグループへのユーザ追加</title>

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

    <para>この例では、<option>-m</option> の引数は、
      カンマで区切られたグループに追加するユーザの一覧です。
      前の例と異なり、これらのユーザはグループ一覧に追加され、
      グループのユーザ一覧を置き換えることはありません。</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>このコマンドや <filename>/etc/group</filename>
      のフォーマットの詳細については、
      &man.pw.8; および &man.group.5; をご覧ください。</para>
  </sect1>
</chapter>