(Removed redundant linefeeds for neatness.)
[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 ## Synopsis 
8
9 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.
10
11 After reading this chapter, you will know:
12
13 * The differences between the various user accounts on a DragonFly system.
14
15 * How to add user accounts.
16
17 * How to remove user accounts.
18
19 * How to change account details, such as the user's full name, or preferred shell.
20
21 * 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.
22
23 * How to use groups to make account management easier.
24
25 Before reading this chapter, you should:
26
27 * Understand the basics of UNIX® and DragonFly ([Chapter 3](basics.html)).
28
29 ## Introduction 
30
31 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.
32
33 Every account on a DragonFly system has certain information associated with it to identify the account.
34
35 * 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.
36
37 * 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.
38
39 * 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.
40
41 * Login class: Login classes are an extension to the group mechanism that provide additional flexibility when tailoring the system to different users.
42
43 * 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.
44
45 * 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.
46
47 * 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.
48
49 * 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.
50
51 * 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.
52
53 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.
54
55 ## The Superuser Account 
56
57 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.
58
59 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.
60
61 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.
62
63 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.
64
65 ## System Accounts 
66
67 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.
68
69 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.
70
71 `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.
72
73 ## User Accounts 
74
75 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.
76
77 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.
78
79 Each user can set up their own environment to accommodate their use of the system, by using alternate shells, editors, key bindings, and language.
80
81 ## Modifying Accounts 
82
83 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.
84
85 [[!table  data="""
86 Command | Summary 
87  [adduser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=adduser&section=8) | The recommended command-line application for adding new users. 
88  [rmuser(8)](http://leaf.dragonflybsd.org/cgi/web-man?command=rmuser&section=8) | The recommended command-line application for removing users. 
89  [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1) | A flexible tool to change user database information. 
90  [passwd(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=passwd&section=1) | The simple command-line tool to change user passwords. 
91  [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. |
92
93 """]]
94
95 ### adduser 
96
97 [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.
98
99 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.
100
101  **Example 8-1. Configuring `adduser` and adding a user** 
102
103    
104
105     # adduser -v
106
107     Use option -silent if you don't want to see all warnings and questions.
108
109     Check /etc/shells
110
111     Check /etc/master.passwd
112
113     Check /etc/group
114
115     Enter your default shell: csh date no sh tcsh zsh [sh]: zsh
116
117     Your default shell is: zsh -> /usr/local/bin/zsh
118
119     Enter your default HOME partition: [/home]:
120
121     Copy dotfiles from: /usr/share/skel no [/usr/share/skel]:
122
123     Send message from file: /etc/adduser.message no
124
125     [/etc/adduser.message]: no
126
127     Do not send message
128
129     Use passwords (y/n) [y]: y
130
131     
132
133     Write your changes to /etc/adduser.conf? (y/n) [n]: y
134
135     
136
137     Ok, let's go.
138
139     Don't worry about mistakes. I will give you the chance later to correct any input.
140
141     Enter username [a-z0-9_-]: jru
142
143     Enter full name []: J. Random User
144
145     Enter shell csh date no sh tcsh zsh [zsh]:
146
147     Enter home directory (full path) [/home/jru]:
148
149     Uid [1001]:
150
151     Enter login class: default []:
152
153     Login group jru [jru]:
154
155     Login group is ***jru***. Invite jru into other groups: guest no
156
157     [no]: wheel
158
159     Enter password []:
160
161     Enter password again []:
162
163     
164
165     Name:         jru
166
167     Password: ****
168
169     Fullname: J. Random User
170
171     Uid:          1001
172
173     Gid:          1001 (jru)
174
175     Class:
176
177     Groups:       jru wheel
178
179     HOME:     /home/jru
180
181     Shell:        /usr/local/bin/zsh
182
183     OK? (y/n) [y]: y
184
185     Added user ***jru***
186
187     Copy files from /usr/share/skel to /home/jru
188
189     Add another user? (y/n) [y]: n
190
191     Goodbye!
192
193     #
194
195 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.)
196
197  **Note:** The password you type in is not echoed, nor are asterisks displayed. Make sure you do not mistype the password twice.
198
199  **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.
200
201 ### rmuser 
202
203 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:
204
205   1. Removes the user's [crontab(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=crontab&section=1) entry (if any).
206
207   1. Removes any [at(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=at&section=1) jobs belonging to the user.
208
209   1. Kills all processes owned by the user.
210
211   1. Removes the user from the system's local password file.
212
213   1. Removes the user's home directory (if it is owned by the user).
214
215   1. Removes the incoming mail files belonging to the user from `/var/mail`.
216
217   1. Removes all files owned by the user from temporary file storage areas such as `/tmp`.
218
219   1. Finally, removes the username from all groups to which it belongs in `/etc/group`.
220
221    **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).
222
223 [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.
224
225 By default, an interactive mode is used, which attempts to make sure you know what you are doing.
226
227  **Example 8-2. `rmuser` Interactive Account Removal** 
228
229     
230
231     # rmuser jru
232
233     Matching password entry:
234
235     jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
236
237     Is this the entry you wish to remove? y
238
239     Remove user's home directory (/home/jru)? y
240
241     Updating password file, updating databases, done.
242
243     Updating group file: trusted (removing group jru -- personal group is empty) done.
244
245     Removing user's incoming mail file /var/mail/jru: done.
246
247     Removing files belonging to jru from /tmp: done.
248
249     Removing files belonging to jru from /var/tmp: done.
250
251     Removing files belonging to jru from /var/tmp/vi.recover: done.
252
253     #
254
255 ### chpass 
256
257 [chpass(1)](http://leaf.dragonflybsd.org/cgi/web-man?command=chpass&section=1) changes user database information such as passwords, shells, and personal information.
258
259 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).
260
261 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.
262
263 ***'Example 8-3. Interactive `chpass` by Superuser***'
264
265     
266
267     #Changing user database information for jru.
268
269     Login: jru
270
271     Password: *
272
273     Uid [#]: 1001
274
275     Gid [# or name]: 1001
276
277     Change [month day year]:
278
279     Expire [month day year]:
280
281     Class:
282
283     Home directory: /home/jru
284
285     Shell: /usr/local/bin/zsh
286
287     Full Name: J. Random User
288
289     Office Location:
290
291     Office Phone:
292
293     Home Phone:
294
295     Other information:
296
297 The normal user can change only a small subset of this information, and only for themselves.
298
299  **Example 8-4. Interactive chpass by Normal User** 
300
301     
302
303     #Changing user database information for jru.
304
305     Shell: /usr/local/bin/zsh
306
307     Full Name: J. Random User
308
309     Office Location:
310
311     Office Phone:
312
313     Home Phone:
314
315     Other information:
316
317  **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].
318
319 ### passwd 
320
321 [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.
322
323  **Note:** To prevent accidental or unauthorized changes, the original password must be entered before a new password can be set.
324
325  **Example 8-5. Changing Your Password** 
326
327     
328
329     % passwd
330
331     Changing local password for jru.
332
333     Old password:
334
335     New password:
336
337     Retype new password:
338
339     passwd: updating the database...
340
341     passwd: done
342
343 ***'Example 8-6. Changing Another User's Password as the Superuser***'
344
345     
346
347     # passwd jru
348
349     Changing local password for jru.
350
351     New password:
352
353     Retype new password:
354
355     passwd: updating the database...
356
357     passwd: done
358
359  **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.
360
361 ### pw 
362
363 [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.
364
365 #### Notes 
366
367 [[!table  data="""
368 <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. |
369 | | 
370 """]]
371
372 ## Limiting Users 
373
374 <!-- XXX: check this section, I got the feeling there might be something outdated in it. I'm not familiar with it -->
375
376 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.
377
378 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].
379
380 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.
381
382 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).
383
384 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).
385
386 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)).
387
388 * `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.
389
390 * `cputime`: This is the maximum amount of CPU time a user's process may consume. Offending processes will be killed by the kernel.
391
392  **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.
393
394 * `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.
395
396 * `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).
397
398 * `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.
399
400 * `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.
401
402 * `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).
403
404 * `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.
405
406 * `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.
407
408 There are a few other things to remember when setting resource limits. Following are some general tips, suggestions, and miscellaneous comments.
409
410 * Processes started at system startup by `/etc/rc` are assigned to the `daemon` login class.
411
412 * 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.
413
414 * 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.
415
416 * 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.
417
418 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).
419
420 ## Personalizing Users 
421
422 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).
423
424 ## Groups 
425
426 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.
427
428 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.
429
430 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:
431
432  **Example 8-7. Adding a Group Using pw(8)** 
433
434     
435
436     # pw groupadd teamtwo
437
438     # pw groupshow teamtwo
439
440     teamtwo:*:1100:
441
442 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.
443
444  **Example 8-8. Adding Somebody to a Group Using pw(8)** 
445
446     
447
448     # pw groupmod teamtwo -M jru
449
450     # pw groupshow teamtwo
451
452     teamtwo:*:1100:jru
453
454 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`.
455
456  **Example 8-9. Using id(1) to Determine Group Membership** 
457
458     
459
460     % id jru
461
462     uid#1001(jru) gid1001(jru) groups=1001(jru), 1100(teamtwo)
463
464 As you can see, `jru` is a member of the groups `jru` and `teamtwo`.
465
466 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.
467
468 #SSH Server on DragonFly
469
470 The best way to log in to a Unix machine across the network is with a program known as ssh.
471
472 If you try to ssh to a newly installed dfly from another system you will get this error
473
474     $ ssh root@172.16.50.62
475     ssh: connect to host 172.16.50.62 port 22: Connection refused
476
477 This is because sshd is not up and running on dfly.
478 At this point if you check /etc/ssh you will only have the following files
479
480     # ls /etc/ssh
481     blacklist.DSA-1024      blacklist.RSA-2048      ssh_config
482     blacklist.DSA-2048      blacklist.RSA-4096      sshd_config
483     blacklist.RSA-1024      moduli
484
485 You don't have any SSH host keys generated for the system yet!
486
487 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)
488
489 1) Enable sshd in rc.conf
490
491     #echo "sshd_enable=yes" >> /etc/rc.conf
492
493 2) Start the sshd server using the rc script
494
495     # /etc/rc.d/sshd start
496     Generating public/private rsa1 key pair.
497     Your identification has been saved in /etc/ssh/ssh_host_key.
498     Your public key has been saved in /etc/ssh/ssh_host_key.pub.
499     The key fingerprint is:
500     ........
501     Generating public/private dsa key pair.
502     Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
503     Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
504     The key fingerprint is:
505     ........
506     Starting sshd.
507
508 Now if you go back and look in /etc/ssh you will find the SSH host key files too.
509
510     # ls /etc/ssh
511     blacklist.DSA-1024      moduli                  ssh_host_key.pub
512     blacklist.DSA-2048      ssh_config              ssh_host_rsa_key
513     blacklist.RSA-1024      ssh_host_dsa_key        ssh_host_rsa_key.pub
514     blacklist.RSA-2048      ssh_host_dsa_key.pub    sshd_config
515     blacklist.RSA-4096      ssh_host_key
516
517 At this point if you try to ssh to the dfly you will get the following error
518
519     $ ssh sgeorge@172.16.50.62
520     The authenticity of host '172.16.50.62 (172.16.50.62)' can't be established.
521     RSA key fingerprint is 46:77:28:c2:70:86:93:1a:23:32:5f:01:2c:80:de:de.
522     Are you sure you want to continue connecting (yes/no)? yes
523     Warning: Permanently added '172.16.50.62' (RSA) to the list of known hosts.
524     Permission denied (publickey).
525
526 This is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file.
527
528     # To disable tunneled clear text passwords, change to no here!
529     # We disable cleartext passwords by default
530     PasswordAuthentication no
531
532 Change it to
533
534     PasswordAuthentication yes
535
536 and reload **sshd** configuration
537
538     # /etc/rc.d/sshd reload
539     Reloading sshd config files.
540
541 Nowyou can login to the dragonfly system as a normal user.
542
543     $ ssh sgeorge@172.16.50.62
544     sgeorge at 172.16.50.62's password:
545     Last login: Tue Oct 19 04:17:47 2010
546     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
547             The Regents of the University of California.  All rights reserved.
548
549     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
550
551     ....
552
553 But if you try to login by SSH as root you will get the following error.
554
555     $ ssh root at 172.16.50.62
556     root at 172.16.50.62's password:
557     Permission denied, please try again.
558
559 If you investigate the log of the dragonfly system <b>"/var/log/auth.log"</b> you will find a line similar to
560
561     Oct 19 07:29:36 dfly-vmsrv sshd[17269]: Failed password for root from 172.16.2.0 port 56447 ssh2
562
563 even if you typed the right password for root.
564
565 It is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file
566
567     # only allow root logins via public key pair
568     PermitRootLogin without-password
569
570 which allowes only SSH key based authentication as root.
571
572 If you change it to
573
574     PermitRootLogin yes
575
576 and reload **sshd** configuration
577
578     # /etc/rc.d/sshd reload
579     Reloading sshd config files.
580
581 you can login as **root**
582
583     $ ssh root@172.16.50.62
584     root at 172.16.50.62's password:
585     Last login: Fri Oct  8 12:22:40 2010
586     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
587             The Regents of the University of California.  All rights reserved.
588
589     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
590
591     Welcome to DragonFly!
592     ......
593
594 Now in the **"/var/log/auth.log" ** you will find a line similar to
595
596     Oct 19 07:30:32 dfly-vmsrv sshd[17894]: Accepted password for root from 172.16.2.0 port 56468 ssh2
597
598 ##WARNING :
599 ** 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"****.
600
601     Oct 18 18:54:54 cross sshd[9783]: Invalid user maryse from 218.248.26.6
602     Oct 18 18:54:54 cross sshd[9781]: input_userauth_request: invalid user maryse
603     Oct 18 18:54:54 cross sshd[9783]: Failed password for invalid user maryse from 218.248.26.6 port 34847 ssh2
604     Oct 18 18:54:54 cross sshd[9781]: Received disconnect from 218.248.26.6: 11: Bye Bye
605     Oct 18 18:54:55 cross sshd[27641]: Invalid user may from 218.248.26.6
606     Oct 18 18:54:55 cross sshd[3450]: input_userauth_request: invalid user may
607     Oct 18 18:54:55 cross sshd[27641]: Failed password for invalid user may from 218.248.26.6 port 34876 ssh2
608     Oct 18 18:54:55 cross sshd[3450]: Received disconnect from 218.248.26.6: 11: Bye Bye
609     Oct 18 18:54:56 cross sshd[8423]: Invalid user admin from 218.248.26.6
610     Oct 18 18:54:56 cross sshd[3131]: input_userauth_request: invalid user admin
611     Oct 18 18:54:56 cross sshd[8423]: Failed password for invalid user admin from 218.248.26.6 port 34905 ssh2
612     Oct 18 18:54:56 cross sshd[3131]: Received disconnect from 218.248.26.6: 11: Bye Bye
613     Oct 18 18:54:57 cross sshd[7373]: Invalid user admin from 218.248.26.6
614     Oct 18 18:54:57 cross sshd[28059]: input_userauth_request: invalid user admin
615     Oct 18 18:54:57 cross sshd[7373]: Failed password for invalid user admin from 218.248.26.6 port 34930 ssh2
616     Oct 18 18:54:57 cross sshd[28059]: Received disconnect from 218.248.26.6: 11: Bye Bye
617     Oct 18 18:54:58 cross sshd[12081]: Invalid user admin from 218.248.26.6
618     Oct 18 18:54:58 cross sshd[22416]: input_userauth_request: invalid user admin
619     Oct 18 18:54:58 cross sshd[12081]: Failed password for invalid user admin from 218.248.26.6 port 34958 ssh2
620     Oct 18 18:54:58 cross sshd[22416]: Received disconnect from 218.248.26.6: 11: Bye Bye
621
622 #SSH Server on DragonFly
623
624 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.
625
626 This document is very detailed so that a new user can be familiar with the environment.
627
628 If you try to ssh to a newly installed dfly from another system you will get this error
629
630     $ ssh root@172.16.50.62
631     ssh: connect to host 172.16.50.62 port 22: Connection refused
632
633 This is because sshd is not up and running on dfly.
634 At this point if you check /etc/ssh you will only have the following files
635
636     # ls /etc/ssh
637     blacklist.DSA-1024      blacklist.RSA-2048      ssh_config
638     blacklist.DSA-2048      blacklist.RSA-4096      sshd_config
639     blacklist.RSA-1024      moduli
640
641 You don't have any SSH host keys generated for the system yet!
642
643 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)
644
645 1) Enable sshd in rc.conf
646
647     #echo "sshd_enable=yes" >> /etc/rc.conf
648
649 2) Start the sshd server using the rc script
650
651     # /etc/rc.d/sshd start
652     Generating public/private rsa1 key pair.
653     Your identification has been saved in /etc/ssh/ssh_host_key.
654     Your public key has been saved in /etc/ssh/ssh_host_key.pub.
655     The key fingerprint is:
656     ........
657     Generating public/private dsa key pair.
658     Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
659     Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
660     The key fingerprint is:
661     ........
662     Starting sshd.
663
664 Now if you go back and look in /etc/ssh you will find the SSH host key files too.
665
666     # ls /etc/ssh
667     blacklist.DSA-1024      moduli                  ssh_host_key.pub
668     blacklist.DSA-2048      ssh_config              ssh_host_rsa_key
669     blacklist.RSA-1024      ssh_host_dsa_key        ssh_host_rsa_key.pub
670     blacklist.RSA-2048      ssh_host_dsa_key.pub    sshd_config
671     blacklist.RSA-4096      ssh_host_key
672
673 At this point if you try to ssh to the dfly you will get the following error
674
675     $ ssh sgeorge@172.16.50.62
676     The authenticity of host '172.16.50.62 (172.16.50.62)' can't be established.
677     RSA key fingerprint is 46:77:28:c2:70:86:93:1a:23:32:5f:01:2c:80:de:de.
678     Are you sure you want to continue connecting (yes/no)? yes
679     Warning: Permanently added '172.16.50.62' (RSA) to the list of known hosts.
680     Permission denied (publickey).
681
682 This is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file.
683
684     # To disable tunneled clear text passwords, change to no here!
685     # We disable cleartext passwords by default
686     PasswordAuthentication no
687
688 Change it to
689
690     PasswordAuthentication yes
691
692 and reload **sshd** configuration
693
694     # /etc/rc.d/sshd reload
695     Reloading sshd config files.
696
697 Nowyou can login to the dragonfly system as a normal user.
698
699     $ ssh sgeorge@172.16.50.62
700     sgeorge at 172.16.50.62's password:
701     Last login: Tue Oct 19 04:17:47 2010
702     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
703             The Regents of the University of California.  All rights reserved.
704
705     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
706
707     ....
708
709 But if you try to login by SSH as root you will get the following error.
710
711     $ ssh root at 172.16.50.62
712     root at 172.16.50.62's password:
713     Permission denied, please try again.
714
715 If you investigate the log of the dragonfly system <b>"/var/log/auth.log"</b> you will find a line similar to
716
717     Oct 19 07:29:36 dfly-vmsrv sshd[17269]: Failed password for root from 172.16.2.0 port 56447 ssh2
718
719 even if you typed the right password for root.
720
721 It is because of the following configuration option in the default **"/etc/ssh/sshd_config"** file
722
723     # only allow root logins via public key pair
724     PermitRootLogin without-password
725
726 which allowes only SSH key based authentication as root.
727
728 If you change it to
729
730     PermitRootLogin yes
731
732 and reload **sshd** configuration
733
734     # /etc/rc.d/sshd reload
735     Reloading sshd config files.
736
737 you can login as **root**
738
739     $ ssh root@172.16.50.62
740     root at 172.16.50.62's password:
741     Last login: Fri Oct  8 12:22:40 2010
742     Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
743             The Regents of the University of California.  All rights reserved.
744
745     DragonFly v2.7.3.1283.gfa568-DEVELOPMENT (GENERIC.MP) #3: Thu Oct 14 12:01:24 IST 2010
746
747     Welcome to DragonFly!
748     ......
749
750 Now in the **"/var/log/auth.log" ** you will find a line similar to
751
752     Oct 19 07:30:32 dfly-vmsrv sshd[17894]: Accepted password for root from 172.16.2.0 port 56468 ssh2
753
754 ##WARNING :
755 ** 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"****.
756
757     Oct 18 18:54:54 cross sshd[9783]: Invalid user maryse from 218.248.26.6
758     Oct 18 18:54:54 cross sshd[9781]: input_userauth_request: invalid user maryse
759     Oct 18 18:54:54 cross sshd[9783]: Failed password for invalid user maryse from 218.248.26.6 port 34847 ssh2
760     Oct 18 18:54:54 cross sshd[9781]: Received disconnect from 218.248.26.6: 11: Bye Bye
761     Oct 18 18:54:55 cross sshd[27641]: Invalid user may from 218.248.26.6
762     Oct 18 18:54:55 cross sshd[3450]: input_userauth_request: invalid user may
763     Oct 18 18:54:55 cross sshd[27641]: Failed password for invalid user may from 218.248.26.6 port 34876 ssh2
764     Oct 18 18:54:55 cross sshd[3450]: Received disconnect from 218.248.26.6: 11: Bye Bye
765     Oct 18 18:54:56 cross sshd[8423]: Invalid user admin from 218.248.26.6
766     Oct 18 18:54:56 cross sshd[3131]: input_userauth_request: invalid user admin
767     Oct 18 18:54:56 cross sshd[8423]: Failed password for invalid user admin from 218.248.26.6 port 34905 ssh2
768     Oct 18 18:54:56 cross sshd[3131]: Received disconnect from 218.248.26.6: 11: Bye Bye
769     Oct 18 18:54:57 cross sshd[7373]: Invalid user admin from 218.248.26.6
770     Oct 18 18:54:57 cross sshd[28059]: input_userauth_request: invalid user admin
771     Oct 18 18:54:57 cross sshd[7373]: Failed password for invalid user admin from 218.248.26.6 port 34930 ssh2
772     Oct 18 18:54:57 cross sshd[28059]: Received disconnect from 218.248.26.6: 11: Bye Bye
773     Oct 18 18:54:58 cross sshd[12081]: Invalid user admin from 218.248.26.6
774     Oct 18 18:54:58 cross sshd[22416]: input_userauth_request: invalid user admin
775     Oct 18 18:54:58 cross sshd[12081]: Failed password for invalid user admin from 218.248.26.6 port 34958 ssh2
776     Oct 18 18:54:58 cross sshd[22416]: Received disconnect from 218.248.26.6: 11: Bye Bye
777