No commit message specified.
[ikiwiki.git] / docs / newhandbook / Users / index.mdwn
1 # Users and Basic Account Management 
2
3 ***Contributed by Neil Blakey-Milner. ***
4
5 [[!toc  levels=3]]
6
7
8 ## Synopsis 
9
10
11
12 Unix, including DragonFly BSD is, as previously explained, a multi-user, multi-tasking system.  It is therefore possible, and in fact very common, to have a situation where many users are logged on to one computer, and every one of these users is running many different jobs.  Although only one user can physically sit at the computer and use the monitor, keyboard, and mouse connected thereto, others can get their work done by logging  in through the network.
13
14
15 After reading this chapter, you will know:
16
17
18 * The differences between the various user accounts on a DragonFly system.
19
20
21 * How to add user accounts.
22
23
24 * How to remove user accounts.
25
26
27 * How to change account details, such as the user's full name, or preferred shell.
28
29
30 * How to set limits on a per-account basis, to control the resources such as memory and CPU time that accounts and groups of accounts are allowed to access.
31
32
33 * How to use groups to make account management easier.
34
35
36
37 Before reading this chapter, you should:
38
39
40
41
42 * Understand the basics of UNIX® and DragonFly ([Chapter 3](basics.html)).
43
44
45
46 ## Introduction 
47
48
49
50 All access to the system is achieved via accounts, and all processes are run by users, so user and account management are of integral importance on DragonFly systems.
51
52
53
54 Every account on a DragonFly system has certain information associated with it to identify the account.
55
56
57
58 * User name: The user name as it would be typed at the login: prompt. User names must be unique across the computer; you may not have two users with the same user name. There are a number of rules for creating valid user names, documented in [passwd(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=passwd&section=5); you would typically use user names that consist of eight or fewer all lower case characters.Password:: Each account has a password associated with it. The password may be blank, in which case no password will be required to access the system. This is normally a very bad idea; every account should have a password.
59
60 * User ID (UID): The UID is a number, traditionally from 0 to 65535[(1)](#FTN.USERS-LARGEUIDGID), used to uniquely identify the user to the system. Internally, DragonFly uses the UID to identify users--any DragonFly commands that allow you to specify a user name will convert it to the UID before working with it. This means that you can have several accounts with different user names but the same UID. As far as DragonFly is concerned, these accounts are one user. It is unlikely you will ever need to do this.
61
62 * Group ID (GID): The GID is a number, traditionally from 0 to 65535[users-introduction.html#FTN.USERS-LARGEUIDGID (1)], used to uniquely identify the primary group that the user belongs to. Groups are a mechanism for controlling access to resources based on a user's GID rather than their UID. This can significantly reduce the size of some configuration files. A user may also be in more than one group.
63
64 * Login class: Login classes are an extension to the group mechanism that provide additional flexibility when tailoring the system to different users.
65
66 * Password change time: By default DragonFly does not force users to change their passwords periodically. You can enforce this on a per-user basis, forcing some or all of your users to change their passwords after a certain amount of time has elapsed.
67
68 * Account expiry time: By default DragonFly does not expire accounts. If you are creating accounts that you know have a limited lifespan, for example, in a school where you have accounts for the students, then you can specify when the account expires. After the expiry time has elapsed the account cannot be used to log in to the system, although the account's directories and files will remain.
69
70 * User's full name: The user name uniquely identifies the account to DragonFly, but does not necessarily reflect the user's real name. This information can be associated with the account.
71
72 * Home directory: The home directory is the full path to a directory on the system in which the user will start when logging on to the system. A common convention is to put all user home directories under `/home/`***username***. The user would store their personal files in their home directory, and any directories they may create in there.
73
74 * User shell: The shell provides the default environment users use to interact with the system. There are many different kinds of shells, and experienced users will have their own preferences, which can be reflected in their account settings.
75
76
77
78 There are three main types of accounts: the Superuser, system users and user accounts. The Superuser account, usually called `root`, is used to manage the system with no limitations on privileges. System users run services. Finally, user accounts are used by real people, who log on, read mail, and so forth.
79
80
81
82 ## The Superuser Account 
83
84
85
86 The superuser account, usually called `root`, comes preconfigured to facilitate system administration, and should not be used for day-to-day tasks like sending and receiving mail, general exploration of the system, or programming.
87
88
89
90 This is because the superuser, unlike normal user accounts, can operate without limits, and misuse of the superuser account may result in spectacular disasters. User accounts are unable to destroy the system by mistake, so it is generally best to use normal user accounts whenever possible, unless you especially need the extra privilege.
91
92
93
94 You should always double and triple-check commands you issue as the superuser, since an extra space or missing character can mean irreparable data loss.
95
96
97
98 So, the first thing you should do after reading this chapter is to create an unprivileged user account for yourself for general usage if you have not already. This applies equally whether you are running a multi-user or single-user machine. Later in this chapter, we discuss how to create additional accounts, and how to change between the normal user and superuser.
99
100
101
102
103
104
105
106 ## System Accounts 
107
108
109
110 System users are those used to run services such as DNS, mail, web servers, and so forth. The reason for this is security; if all services ran as the superuser, they could act without restriction.
111
112
113
114 Examples of system users are `daemon`, `operator`, `bind` (for the Domain Name Service), and `news`. Often sysadmins create `httpd` to run web servers they install.
115
116
117
118 `nobody` is the generic unprivileged system user. However, it is important to keep in mind that the more services that use `nobody`, the more files and processes that user will become associated with, and hence the more privileged that user becomes.
119
120
121
122
123
124
125
126
127
128
129
130 ## User Accounts 
131
132
133
134 User accounts are the primary means of access for real people to the system, and these accounts insulate the user and the environment, preventing the users from damaging the system or other users, and allowing users to customize their environment without affecting others.
135
136
137
138 Every person accessing your system should have a unique user account. This allows you to find out who is doing what, prevent people from clobbering each others' settings or reading each others' mail, and so forth.
139
140
141
142 Each user can set up their own environment to accommodate their use of the system, by using alternate shells, editors, key bindings, and language.
143
144
145
146
147
148
149
150 ## Modifying Accounts 
151
152
153
154 There are a variety of different commands available in the UNIX® environment to manipulate user accounts. The most common commands are summarized below, followed by more detailed examples of their usage.
155
156
157
158 [[!table  data="""
159 Command | Summary 
160  [adduser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=adduser&section=8) | The recommended command-line application for adding new users. 
161  [rmuser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=rmuser&section=8) | The recommended command-line application for removing users. 
162  [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1) | A flexible tool to change user database information. 
163  [passwd(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=passwd&section=1) | The simple command-line tool to change user passwords. 
164  [pw(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=pw&section=8) | A powerful and flexible tool to modify all aspects of user accounts. |
165
166 """]]
167
168 ### adduser 
169
170
171
172 [adduser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=adduser&section=8) is a simple program for adding new users. It creates entries in the system `passwd` and `group` files. It will also create a home directory for the new user, copy in the default configuration files (***dotfiles***) from `/usr/share/skel`, and can optionally mail the new user a welcome message.
173
174
175
176 To create the initial configuration file, use `adduser -s -config_create`. Next, we configure [adduser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=adduser&section=8) defaults, and create our first user account, since using `root` for normal usage is evil and nasty.
177
178
179
180  **Example 8-1. Configuring `adduser` and adding a user** 
181
182    
183
184     # adduser -v
185
186     Use option -silent if you don't want to see all warnings and questions.
187
188     Check /etc/shells
189
190     Check /etc/master.passwd
191
192     Check /etc/group
193
194     Enter your default shell: csh date no sh tcsh zsh [sh]: zsh
195
196     Your default shell is: zsh -> /usr/local/bin/zsh
197
198     Enter your default HOME partition: [/home]:
199
200     Copy dotfiles from: /usr/share/skel no [/usr/share/skel]:
201
202     Send message from file: /etc/adduser.message no
203
204     [/etc/adduser.message]: no
205
206     Do not send message
207
208     Use passwords (y/n) [y]: y
209
210     
211
212     Write your changes to /etc/adduser.conf? (y/n) [n]: y
213
214     
215
216     Ok, let's go.
217
218     Don't worry about mistakes. I will give you the chance later to correct any input.
219
220     Enter username [a-z0-9_-]: jru
221
222     Enter full name []: J. Random User
223
224     Enter shell csh date no sh tcsh zsh [zsh]:
225
226     Enter home directory (full path) [/home/jru]:
227
228     Uid [1001]:
229
230     Enter login class: default []:
231
232     Login group jru [jru]:
233
234     Login group is ***jru***. Invite jru into other groups: guest no
235
236     [no]: wheel
237
238     Enter password []:
239
240     Enter password again []:
241
242     
243
244     Name:         jru
245
246     Password: ****
247
248     Fullname: J. Random User
249
250     Uid:          1001
251
252     Gid:          1001 (jru)
253
254     Class:
255
256     Groups:       jru wheel
257
258     HOME:     /home/jru
259
260     Shell:        /usr/local/bin/zsh
261
262     OK? (y/n) [y]: y
263
264     Added user ***jru***
265
266     Copy files from /usr/share/skel to /home/jru
267
268     Add another user? (y/n) [y]: n
269
270     Goodbye!
271
272     #
273
274
275
276 In summary, we changed the default shell to  **zsh**  (an additional shell found in pkgsrc®), and turned off the sending of a welcome mail to added users. We then saved the configuration, created an account for `jru`, and made sure `jru` is in `wheel` group (so that she may assume the role of `root` with the [su(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=su&section=1) command.)
277
278
279  **Note:** The password you type in is not echoed, nor are asterisks displayed. Make sure you do not mistype the password twice.
280
281
282  **Note:** Just use [adduser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=adduser&section=8) without arguments from now on, and you will not have to go through changing the defaults. If the program asks you to change the defaults, exit the program, and try the `-s` option.
283
284
285
286 ### rmuser 
287
288
289
290 You can use [rmuser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=rmuser&section=8) to completely remove a user from the system. [rmuser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=rmuser&section=8) performs the following steps:
291
292
293
294   1. Removes the user's [crontab(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=crontab&section=1) entry (if any).
295
296   1. Removes any [at(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=at&section=1) jobs belonging to the user.
297
298   1. Kills all processes owned by the user.
299
300   1. Removes the user from the system's local password file.
301
302   1. Removes the user's home directory (if it is owned by the user).
303
304   1. Removes the incoming mail files belonging to the user from `/var/mail`.
305
306   1. Removes all files owned by the user from temporary file storage areas such as `/tmp`.
307
308   1. Finally, removes the username from all groups to which it belongs in `/etc/group`.
309
310    **Note:** If a group becomes empty and the group name is the same as the username, the group is removed; this complements the per-user unique groups created by [adduser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=adduser&section=8).
311
312
313
314 [rmuser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=rmuser&section=8) cannot be used to remove superuser accounts, since that is almost always an indication of massive destruction.
315
316
317
318 By default, an interactive mode is used, which attempts to make sure you know what you are doing.
319
320
321
322  **Example 8-2. `rmuser` Interactive Account Removal** 
323
324
325
326     
327
328     # rmuser jru
329
330     Matching password entry:
331
332     jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
333
334     Is this the entry you wish to remove? y
335
336     Remove user's home directory (/home/jru)? y
337
338     Updating password file, updating databases, done.
339
340     Updating group file: trusted (removing group jru -- personal group is empty) done.
341
342     Removing user's incoming mail file /var/mail/jru: done.
343
344     Removing files belonging to jru from /tmp: done.
345
346     Removing files belonging to jru from /var/tmp: done.
347
348     Removing files belonging to jru from /var/tmp/vi.recover: done.
349
350     #
351
352
353
354
355
356 ### chpass 
357
358
359
360 [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1) changes user database information such as passwords, shells, and personal information.
361
362
363 Only system administrators, as the superuser, may change other users' information and passwords with [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1).
364
365
366 When passed no options, aside from an optional username, [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1) displays an editor containing user information. When the user exists from the editor, the user database is updated with the new information.
367
368
369
370 ***'Example 8-3. Interactive `chpass` by Superuser***'
371
372
373
374     
375
376     #Changing user database information for jru.
377
378     Login: jru
379
380     Password: *
381
382     Uid [#]: 1001
383
384     Gid [# or name]: 1001
385
386     Change [month day year]:
387
388     Expire [month day year]:
389
390     Class:
391
392     Home directory: /home/jru
393
394     Shell: /usr/local/bin/zsh
395
396     Full Name: J. Random User
397
398     Office Location:
399
400     Office Phone:
401
402     Home Phone:
403
404     Other information:
405
406
407
408
409
410 The normal user can change only a small subset of this information, and only for themselves.
411
412
413
414  **Example 8-4. Interactive chpass by Normal User** 
415
416     
417
418     #Changing user database information for jru.
419
420     Shell: /usr/local/bin/zsh
421
422     Full Name: J. Random User
423
424     Office Location:
425
426     Office Phone:
427
428     Home Phone:
429
430     Other information:
431
432
433
434
435
436  **Note:** [chfn(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chfn&section=1) and [chsh(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chsh&section=1) are just links to [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1), as are [ypchpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=ypchpass&section=1), [ypchfn(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=ypchfn&section=1), and [ypchsh(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=ypchsh&section=1). NIS support is automatic, so specifying the `yp` before the command is not necessary. If this is confusing to you, do not worry, NIS will be covered in [advanced-networking.html Chapter 19].
437
438
439
440 ### passwd 
441
442
443
444 [passwd(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=passwd&section=1) is the usual way to change your own password as a user, or another user's password as the superuser.
445
446
447
448  **Note:** To prevent accidental or unauthorized changes, the original password must be entered before a new password can be set.
449
450
451
452  **Example 8-5. Changing Your Password** 
453
454
455
456     
457
458     % passwd
459
460     Changing local password for jru.
461
462     Old password:
463
464     New password:
465
466     Retype new password:
467
468     passwd: updating the database...
469
470     passwd: done
471
472
473
474
475
476 ***'Example 8-6. Changing Another User's Password as the Superuser***'
477
478
479
480     
481
482     # passwd jru
483
484     Changing local password for jru.
485
486     New password:
487
488     Retype new password:
489
490     passwd: updating the database...
491
492     passwd: done
493
494
495
496
497
498  **Note:** As with [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1), [yppasswd(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=yppasswd&section=1) is just a link to [passwd(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=passwd&section=1), so NIS works with either command.
499
500
501
502 ### pw 
503
504
505
506 [pw(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=pw&section=8) is a command line utility to create, remove, modify, and display users and groups. It functions as a front end to the system user and group files. [pw(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=pw&section=8) has a very powerful set of command line options that make it suitable for use in shell scripts, but new users may find it more complicated than the other commands presented here.
507
508
509
510 #### Notes 
511
512
513
514 [[!table  data="""
515 <tablestyle#"width:100%"> The `-s` makes [adduser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=adduser&section=8) default to quiet. We use `-v` later when we want to change defaults. |
516 | | 
517 """]]
518
519
520 ## Limiting Users 
521
522 <!-- XXX: check this section, I got the feeling there might be something outdated in it. I'm not familiar with it -->
523
524 If you have users, the ability to limit their system use may have come to mind. DragonFly provides several ways an administrator can limit the amount of system resources an individual may use. These limits are divided into two sections: disk quotas, and other resource limits.
525
526
527
528 Disk quotas limit disk usage to users, and they provide a way to quickly check that usage without calculating it every time. Quotas are discussed in [quotas.html Section 12.12].
529
530
531
532 The other resource limits include ways to limit the amount of CPU, memory, and other resources a user may consume. These are defined using login classes and are discussed here.
533
534
535
536 Login classes are defined in `/etc/login.conf`. The precise semantics are beyond the scope of this section, but are described in detail in the [login.conf(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=login.conf&section=5) manual page. It is sufficient to say that each user is assigned to a login class (`default` by default), and that each login class has a set of login capabilities associated with it. A login capability is a `name=value` pair, where `name` is a well-known identifier and `value` is an arbitrary string processed accordingly depending on the name. Setting up login classes and capabilities is rather straight-forward and is also described in [login.conf(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=login.conf&section=5).
537
538
539
540 Resource limits are different from plain vanilla login capabilities in two ways. First, for every limit, there is a soft (current) and hard limit. A soft limit may be adjusted by the user or application, but may be no higher than the hard limit. The latter may be lowered by the user, but never raised. Second, most resource limits apply per process to a specific user, not the user as a whole. Note, however, that these differences are mandated by the specific handling of the limits, not by the implementation of the login capability framework (i.e., they are not ***really*** a special case of login capabilities).
541
542
543
544 And so, without further ado, below are the most commonly used resource limits (the rest, along with all the other login capabilities, may be found in [login.conf(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=login.conf&section=5)).
545
546
547
548
549 * `coredumpsize`: The limit on the size of a core file generated by a program is, for obvious reasons, subordinate to other limits on disk usage (e.g., `filesize`, or disk quotas). Nevertheless, it is often used as a less-severe method of controlling disk space consumption: since users do not generate core files themselves, and often do not delete them, setting this may save them from running out of disk space should a large program (e.g.,  **emacs** ) crash.
550
551
552 * `cputime`: This is the maximum amount of CPU time a user's process may consume. Offending processes will be killed by the kernel.
553
554  **Note:** This is a limit on CPU ***time*** consumed, not percentage of the CPU as displayed in some fields by [top(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=top&section=1) and [ps(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=ps&section=1). A limit on the latter is, at the time of this writing, not possible, and would be rather useless: legitimate use of a compiler, for instance, can easily use almost 100% of a CPU for some time.
555
556
557 * `filesize`: This is the maximum size of a file the user may possess. Unlike [quotas.html disk quotas], this limit is enforced on individual files, not the set of all files a user owns.
558
559
560 * `maxproc`: This is the maximum number of processes a user may be running. This includes foreground and background processes alike. For obvious reasons, this may not be larger than the system limit specified by the `kern.maxproc` [sysctl(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=sysctl&section=8). Also note that setting this too small may hinder a user's productivity: it is often useful to be logged in multiple times or execute pipelines. Some tasks, such as compiling a large program, also spawn multiple processes (e.g., [make(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=make&section=1), [cc(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=cc&section=1), and other intermediate preprocessors).
561
562
563 * `memorylocked`: This is the maximum amount a memory a process may have requested to be locked into main memory (e.g., see [mlock(2)](http://leaf.dragonflybsd.org/cgi/web-man?command=mlock&section2)). Some system-critical programs, such as [amd(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=amd&section=8), lock into main memory such that in the event of being swapped out, they do not contribute to a system's trashing in time of trouble.
564
565
566 * `memoryuse`: This is the maximum amount of memory a process may consume at any given time. It includes both core memory and swap usage. This is not a catch-all limit for restricting memory consumption, but it is a good start.
567
568
569 * `openfiles`: This is the maximum amount of files a process may have open. In DragonFly, files are also used to represent sockets and IPC channels; thus, be careful not to set this too low. The system-wide limit for this is defined by the `kern.maxfiles` [sysctl(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=sysctl&section=8).
570
571
572 * `sbsize`: This is the limit on the amount of network memory, and thus mbufs, a user may consume. This originated as a response to an old DoS attack by creating a lot of sockets, but can be generally used to limit network communications.
573
574
575 * `stacksize`: This is the maximum size a process' stack may grow to. This alone is not sufficient to limit the amount of memory a program may use; consequently, it should be used in conjunction with other limits.
576
577
578
579 There are a few other things to remember when setting resource limits. Following are some general tips, suggestions, and miscellaneous comments.
580
581
582
583
584 * Processes started at system startup by `/etc/rc` are assigned to the `daemon` login class.
585
586
587 * Although the `/etc/login.conf` that comes with the system is a good source of reasonable values for most limits, only you, the administrator, can know what is appropriate for your system. Setting a limit too high may open your system up to abuse, while setting it too low may put a strain on productivity.
588
589
590 * Users of the X Window System (X11) should probably be granted more resources than other users. X11 by itself takes a lot of resources, but it also encourages users to run more programs simultaneously.
591
592
593 * Remember that many limits apply to individual processes, not the user as a whole. For example, setting `openfiles` to 50 means that each process the user runs may open up to 50 files. Thus, the gross amount of files a user may open is the value of `openfiles` multiplied by the value of `maxproc`. This also applies to memory consumption.
594
595
596
597 For further information on resource limits and login classes and capabilities in general, please consult the relevant manual pages: [cap_mkdb(1)](http://leaf.dragonflybsd.org/cgi/web-man?command#cap_mkdb&section1), [getrlimit(2)](http://leaf.dragonflybsd.org/cgi/web-man?command=getrlimit&section=2), [login.conf(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=login.conf&section=5).
598
599
600
601
602
603
604
605
606 ## Personalizing Users 
607
608
609
610 Localization is an environment set up by the system administrator or user to accommodate different languages, character sets, date and time standards, and so on. This is discussed in [this chapter](l10n.html).
611
612
613
614 ## Groups 
615
616
617
618 A group is simply a list of users. Groups are identified by their group name and GID (Group ID). In DragonFly (and most other UNIX® like systems), the two factors the kernel uses to decide whether a process is allowed to do something is its user ID and list of groups it belongs to. Unlike a user ID, a process has a list of groups associated with it. You may hear some things refer to the ***group ID*** of a user or process; most of the time, this just means the first group in the list.
619
620
621
622 The group name to group ID map is in `/etc/group`. This is a plain text file with four colon-delimited fields. The first field is the group name, the second is the encrypted password, the third the group ID, and the fourth the comma-delimited list of members. It can safely be edited by hand (assuming, of course, that you do not make any syntax errors!). For a more complete description of the syntax, see the [group(5)](http://leaf.dragonflybsd.org/cgi/web-man?command#group&section5) manual page.
623
624
625
626 If you do not want to edit `/etc/group` manually, you can use the [pw(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#pw&section8) command to add and edit groups. For example, to add a group called `teamtwo` and then confirm that it exists you can use:
627
628
629
630  **Example 8-7. Adding a Group Using pw(8)** 
631
632
633
634     
635
636     # pw groupadd teamtwo
637
638     # pw groupshow teamtwo
639
640     teamtwo:*:1100:
641
642
643
644
645
646 The number `1100` above is the group ID of the group `teamtwo`. Right now, `teamtwo` has no members, and is thus rather useless. Let's change that by inviting `jru` to the `teamtwo` group.
647
648
649
650  **Example 8-8. Adding Somebody to a Group Using pw(8)** 
651
652
653
654     
655
656     # pw groupmod teamtwo -M jru
657
658     # pw groupshow teamtwo
659
660     teamtwo:*:1100:jru
661
662
663
664
665
666 The argument to the `-M` option is a comma-delimited list of users who are members of the group. From the preceding sections, we know that the password file also contains a group for each user. The latter (the user) is automatically added to the group list by the system; the user will not show up as a member when using the `groupshow` command to [pw(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#pw&section8), but will show up when the information is queried via [id(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=id&section=1) or similar tool. In other words, [pw(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=pw&section=8) only manipulates the `/etc/group` file; it will never attempt to read additionally data from `/etc/passwd`.
667
668
669
670  **Example 8-9. Using id(1) to Determine Group Membership** 
671
672
673
674     
675
676     % id jru
677
678     uid#1001(jru) gid1001(jru) groups=1001(jru), 1100(teamtwo)
679
680
681
682
683
684 As you can see, `jru` is a member of the groups `jru` and `teamtwo`.
685
686
687
688 For more information about [pw(8)](http://leaf.dragonflybsd.org/cgi/web-man?command#pw&section8), see its manual page, and for more information on the format of `/etc/group`, consult the [group(5)](http://leaf.dragonflybsd.org/cgi/web-man?command=group&section=5) manual page.
689
690
691
692
693 #SSH Server on DragonFly
694
695 The best way to log in to a Unix machine across the network is with a program known as ssh.
696
697 If you try to ssh to a newly installed dfly from another system you will get this error
698
699
700     $ ssh root@172.16.50.62
701     ssh: connect to host 172.16.50.62 port 22: Connection refused
702
703 This is because sshd is not up and running on dfly.
704 At this point if you check /etc/ssh you will only have the following files
705
706
707     # ls /etc/ssh
708     blacklist.DSA-1024      blacklist.RSA-2048      ssh_config
709     blacklist.DSA-2048      blacklist.RSA-4096      sshd_config
710     blacklist.RSA-1024      moduli
711
712 You don't have any SSH host keys generated for the system yet!
713
714 When you start sshd for the first time it is best to start it through the <b>"/etc/rc.d/sshd"</b> script which will automatically generate the host keys. For this to work right you need to do the following steps (these steps are not essential for DragonFly 2.8.2 since sshd is already enabled in rc.conf)
715
716 1) Enable sshd in rc.conf
717
718     #echo "sshd_enable=yes" >> /etc/rc.conf
719
720 2) Start the sshd server using the rc script
721
722
723     # /etc/rc.d/sshd start
724     Generating public/private rsa1 key pair.
725     Your identification has been saved in /etc/ssh/ssh_host_key.
726     Your public key has been saved in /etc/ssh/ssh_host_key.pub.
727     The key fingerprint is:
728     ........
729     Generating public/private dsa key pair.
730     Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
731     Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
732     The key fingerprint is:
733     ........
734     Starting sshd.
735
736 Now if you go back and look in /etc/ssh you will find the SSH host key files too.
737
738
739     # ls /etc/ssh
740     blacklist.DSA-1024      moduli                  ssh_host_key.pub
741     blacklist.DSA-2048      ssh_config              ssh_host_rsa_key
742     blacklist.RSA-1024      ssh_host_dsa_key        ssh_host_rsa_key.pub
743     blacklist.RSA-2048      ssh_host_dsa_key.pub    sshd_config
744     blacklist.RSA-4096      ssh_host_key
745
746
747 At this point if you try to ssh to the dfly you will get the following error
748
749
750     $ ssh sgeorge@172.16.50.62
751     The authenticity of host '172.16.50.62 (172.16.50.62)' can't be established.
752     RSA key fingerprint is 46:77:28:c2:70:86:93:1a:23:32:5f:01:2c:80:de:de.
753     Are you sure you want to continue connecting (yes/no)? yes
754     Warning: Permanently added '172.16.50.62' (RSA) to the list of known hosts.
755     Permission denied (publickey).
756
757 This is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file.
758
759
760     # To disable tunneled clear text passwords, change to no here!
761     # We disable cleartext passwords by default
762     PasswordAuthentication no
763
764 Change it to
765
766
767     PasswordAuthentication yes
768
769
770 and reload **sshd** configuration
771
772
773     # /etc/rc.d/sshd reload
774     Reloading sshd config files.
775
776 Nowyou can login to the dragonfly system as a normal user.
777
778     $ ssh sgeorge@172.16.50.62
779     sgeorge at 172.16.50.62's password:
780     Last login: Tue Oct 19 04:17:47 2010
781     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
782             The Regents of the University of California.  All rights reserved.
783
784     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
785
786     ....
787
788 But if you try to login by SSH as root you will get the following error.
789
790     $ ssh root at 172.16.50.62
791     root at 172.16.50.62's password:
792     Permission denied, please try again.
793
794 If you investigate the log of the dragonfly system <b>"/var/log/auth.log"</b> you will find a line similar to
795
796
797     Oct 19 07:29:36 dfly-vmsrv sshd[17269]: Failed password for root from 172.16.2.0 port 56447 ssh2
798
799 even if you typed the right password for root.
800
801 It is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file
802
803     # only allow root logins via public key pair
804     PermitRootLogin without-password
805
806 which allowes only SSH key based authentication as root.
807
808 If you change it to
809
810
811     PermitRootLogin yes
812
813 and reload **sshd** configuration
814
815     # /etc/rc.d/sshd reload
816     Reloading sshd config files.
817
818 you can login as **root**
819
820     $ ssh root@172.16.50.62
821     root at 172.16.50.62's password:
822     Last login: Fri Oct  8 12:22:40 2010
823     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
824             The Regents of the University of California.  All rights reserved.
825
826     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
827
828     Welcome to DragonFly!
829     ......
830
831 Now in the **"/var/log/auth.log" ** you will find a line similar to
832
833
834     Oct 19 07:30:32 dfly-vmsrv sshd[17894]: Accepted password for root from 172.16.2.0 port 56468 ssh2
835
836
837 ##WARNING :
838 ** It is not advisable to allow Root Login with password especially if your System is connected to the Internet unless you use Very Strong Passwords. You could be a victim of [ssh password based brute force attacks](http://en.wikipedia.org/wiki/Password_cracking#Brute_force_attack). If you are victim of one such attack you can find entries like the following in your** ****"/var/log/auth.log file"****.
839
840     Oct 18 18:54:54 cross sshd[9783]: Invalid user maryse from 218.248.26.6
841     Oct 18 18:54:54 cross sshd[9781]: input_userauth_request: invalid user maryse
842     Oct 18 18:54:54 cross sshd[9783]: Failed password for invalid user maryse from 218.248.26.6 port 34847 ssh2
843     Oct 18 18:54:54 cross sshd[9781]: Received disconnect from 218.248.26.6: 11: Bye Bye
844     Oct 18 18:54:55 cross sshd[27641]: Invalid user may from 218.248.26.6
845     Oct 18 18:54:55 cross sshd[3450]: input_userauth_request: invalid user may
846     Oct 18 18:54:55 cross sshd[27641]: Failed password for invalid user may from 218.248.26.6 port 34876 ssh2
847     Oct 18 18:54:55 cross sshd[3450]: Received disconnect from 218.248.26.6: 11: Bye Bye
848     Oct 18 18:54:56 cross sshd[8423]: Invalid user admin from 218.248.26.6
849     Oct 18 18:54:56 cross sshd[3131]: input_userauth_request: invalid user admin
850     Oct 18 18:54:56 cross sshd[8423]: Failed password for invalid user admin from 218.248.26.6 port 34905 ssh2
851     Oct 18 18:54:56 cross sshd[3131]: Received disconnect from 218.248.26.6: 11: Bye Bye
852     Oct 18 18:54:57 cross sshd[7373]: Invalid user admin from 218.248.26.6
853     Oct 18 18:54:57 cross sshd[28059]: input_userauth_request: invalid user admin
854     Oct 18 18:54:57 cross sshd[7373]: Failed password for invalid user admin from 218.248.26.6 port 34930 ssh2
855     Oct 18 18:54:57 cross sshd[28059]: Received disconnect from 218.248.26.6: 11: Bye Bye
856     Oct 18 18:54:58 cross sshd[12081]: Invalid user admin from 218.248.26.6
857     Oct 18 18:54:58 cross sshd[22416]: input_userauth_request: invalid user admin
858     Oct 18 18:54:58 cross sshd[12081]: Failed password for invalid user admin from 218.248.26.6 port 34958 ssh2
859     Oct 18 18:54:58 cross sshd[22416]: Received disconnect from 218.248.26.6: 11: Bye Bye
860
861 #SSH Server on DragonFly
862
863 Unix, including DragonFly BSD is, as previously explained, a multi-user, multi-tasking system.  It is therefore possible, and in fact very common, to have a situation where many users are logged on to one computer, and every one of these users is running many different jobs.  Although only one user can physically sit at the computer and use the monitor, keyboard, and mouse connected thereto, others can log in through the network.
864
865 This document is very detailed so that a new user can be familiar with the environment.
866
867 If you try to ssh to a newly installed dfly from another system you will get this error
868
869
870     $ ssh root@172.16.50.62
871     ssh: connect to host 172.16.50.62 port 22: Connection refused
872
873 This is because sshd is not up and running on dfly.
874 At this point if you check /etc/ssh you will only have the following files
875
876
877     # ls /etc/ssh
878     blacklist.DSA-1024      blacklist.RSA-2048      ssh_config
879     blacklist.DSA-2048      blacklist.RSA-4096      sshd_config
880     blacklist.RSA-1024      moduli
881
882 You don't have any SSH host keys generated for the system yet!
883
884 When you start sshd for the first time it is best to start it through the <b>"/etc/rc.d/sshd"</b> script which will automatically generate the host keys. For this to work right you need to do the following steps (these steps are not essential for DragonFly 2.8.2 since sshd is already enabled in rc.conf)
885
886 1) Enable sshd in rc.conf
887
888     #echo "sshd_enable=yes" >> /etc/rc.conf
889
890 2) Start the sshd server using the rc script
891
892
893     # /etc/rc.d/sshd start
894     Generating public/private rsa1 key pair.
895     Your identification has been saved in /etc/ssh/ssh_host_key.
896     Your public key has been saved in /etc/ssh/ssh_host_key.pub.
897     The key fingerprint is:
898     ........
899     Generating public/private dsa key pair.
900     Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
901     Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
902     The key fingerprint is:
903     ........
904     Starting sshd.
905
906 Now if you go back and look in /etc/ssh you will find the SSH host key files too.
907
908
909     # ls /etc/ssh
910     blacklist.DSA-1024      moduli                  ssh_host_key.pub
911     blacklist.DSA-2048      ssh_config              ssh_host_rsa_key
912     blacklist.RSA-1024      ssh_host_dsa_key        ssh_host_rsa_key.pub
913     blacklist.RSA-2048      ssh_host_dsa_key.pub    sshd_config
914     blacklist.RSA-4096      ssh_host_key
915
916
917 At this point if you try to ssh to the dfly you will get the following error
918
919
920     $ ssh sgeorge@172.16.50.62
921     The authenticity of host '172.16.50.62 (172.16.50.62)' can't be established.
922     RSA key fingerprint is 46:77:28:c2:70:86:93:1a:23:32:5f:01:2c:80:de:de.
923     Are you sure you want to continue connecting (yes/no)? yes
924     Warning: Permanently added '172.16.50.62' (RSA) to the list of known hosts.
925     Permission denied (publickey).
926
927 This is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file.
928
929
930     # To disable tunneled clear text passwords, change to no here!
931     # We disable cleartext passwords by default
932     PasswordAuthentication no
933
934 Change it to
935
936
937     PasswordAuthentication yes
938
939
940 and reload **sshd** configuration
941
942
943     # /etc/rc.d/sshd reload
944     Reloading sshd config files.
945
946 Nowyou can login to the dragonfly system as a normal user.
947
948     $ ssh sgeorge@172.16.50.62
949     sgeorge at 172.16.50.62's password:
950     Last login: Tue Oct 19 04:17:47 2010
951     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
952             The Regents of the University of California.  All rights reserved.
953
954     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
955
956     ....
957
958 But if you try to login by SSH as root you will get the following error.
959
960     $ ssh root at 172.16.50.62
961     root at 172.16.50.62's password:
962     Permission denied, please try again.
963
964 If you investigate the log of the dragonfly system <b>"/var/log/auth.log"</b> you will find a line similar to
965
966
967     Oct 19 07:29:36 dfly-vmsrv sshd[17269]: Failed password for root from 172.16.2.0 port 56447 ssh2
968
969 even if you typed the right password for root.
970
971 It is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file
972
973     # only allow root logins via public key pair
974     PermitRootLogin without-password
975
976 which allowes only SSH key based authentication as root.
977
978 If you change it to
979
980
981     PermitRootLogin yes
982
983 and reload **sshd** configuration
984
985     # /etc/rc.d/sshd reload
986     Reloading sshd config files.
987
988 you can login as **root**
989
990     $ ssh root@172.16.50.62
991     root at 172.16.50.62's password:
992     Last login: Fri Oct  8 12:22:40 2010
993     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
994             The Regents of the University of California.  All rights reserved.
995
996     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
997
998     Welcome to DragonFly!
999     ......
1000
1001 Now in the **"/var/log/auth.log" ** you will find a line similar to
1002
1003
1004     Oct 19 07:30:32 dfly-vmsrv sshd[17894]: Accepted password for root from 172.16.2.0 port 56468 ssh2
1005
1006
1007 ##WARNING :
1008 ** It is not advisable to allow Root Login with password especially if your System is connected to the Internet unless you use Very Strong Passwords. You could be a victim of [ssh password based brute force attacks](http://en.wikipedia.org/wiki/Password_cracking#Brute_force_attack). If you are victim of one such attack you can find entries like the following in your** ****"/var/log/auth.log file"****.
1009
1010     Oct 18 18:54:54 cross sshd[9783]: Invalid user maryse from 218.248.26.6
1011     Oct 18 18:54:54 cross sshd[9781]: input_userauth_request: invalid user maryse
1012     Oct 18 18:54:54 cross sshd[9783]: Failed password for invalid user maryse from 218.248.26.6 port 34847 ssh2
1013     Oct 18 18:54:54 cross sshd[9781]: Received disconnect from 218.248.26.6: 11: Bye Bye
1014     Oct 18 18:54:55 cross sshd[27641]: Invalid user may from 218.248.26.6
1015     Oct 18 18:54:55 cross sshd[3450]: input_userauth_request: invalid user may
1016     Oct 18 18:54:55 cross sshd[27641]: Failed password for invalid user may from 218.248.26.6 port 34876 ssh2
1017     Oct 18 18:54:55 cross sshd[3450]: Received disconnect from 218.248.26.6: 11: Bye Bye
1018     Oct 18 18:54:56 cross sshd[8423]: Invalid user admin from 218.248.26.6
1019     Oct 18 18:54:56 cross sshd[3131]: input_userauth_request: invalid user admin
1020     Oct 18 18:54:56 cross sshd[8423]: Failed password for invalid user admin from 218.248.26.6 port 34905 ssh2
1021     Oct 18 18:54:56 cross sshd[3131]: Received disconnect from 218.248.26.6: 11: Bye Bye
1022     Oct 18 18:54:57 cross sshd[7373]: Invalid user admin from 218.248.26.6
1023     Oct 18 18:54:57 cross sshd[28059]: input_userauth_request: invalid user admin
1024     Oct 18 18:54:57 cross sshd[7373]: Failed password for invalid user admin from 218.248.26.6 port 34930 ssh2
1025     Oct 18 18:54:57 cross sshd[28059]: Received disconnect from 218.248.26.6: 11: Bye Bye
1026     Oct 18 18:54:58 cross sshd[12081]: Invalid user admin from 218.248.26.6
1027     Oct 18 18:54:58 cross sshd[22416]: input_userauth_request: invalid user admin
1028     Oct 18 18:54:58 cross sshd[12081]: Failed password for invalid user admin from 218.248.26.6 port 34958 ssh2
1029     Oct 18 18:54:58 cross sshd[22416]: Received disconnect from 218.248.26.6: 11: Bye Bye
1030