MFV: xz 5.2.9
[freebsd.git] / sbin / devfs / devfs.8
1 .\"
2 .\" Copyright (c) 2002 Dima Dorfman.
3 .\" All rights reserved.
4 .\"
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
7 .\" are met:
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\"    notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\"    notice, this list of conditions and the following disclaimer in the
12 .\"    documentation and/or other materials provided with the distribution.
13 .\"
14 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 .\" SUCH DAMAGE.
25 .\"
26 .\" $FreeBSD$
27 .\"
28 .Dd December 1, 2020
29 .Dt DEVFS 8
30 .Os
31 .Sh NAME
32 .Nm devfs
33 .Nd "DEVFS control"
34 .Sh SYNOPSIS
35 .Nm
36 .Op Fl m Ar mount-point
37 .Ar keyword
38 .Ar argument ...
39 .Sh DESCRIPTION
40 The
41 .Nm
42 utility provides an interface to manipulate properties of
43 .Xr devfs 5
44 mounts.
45 .Pp
46 The rules, by default as configured by
47 .Pa /etc/rc.conf ,
48 are loaded at boot via the devfs
49 .Xr service 8 .
50 The rules can be reloaded by running the command:
51 .Bd -literal -offset indent
52 service devfs restart
53 .Ed
54 .Pp
55 The
56 .Ar keyword
57 argument determines the context for
58 the rest of the arguments.
59 For example,
60 most of the commands related to the rule subsystem must be preceded by the
61 .Cm rule
62 keyword.
63 The following flags are common to all keywords:
64 .Bl -tag -width 15n
65 .It Fl m Ar mount-point
66 Operate on
67 .Ar mount-point ,
68 which is expected to be a
69 .Xr devfs 5
70 mount.
71 If this option is not specified,
72 .Nm
73 operates on
74 .Pa /dev .
75 .El
76 .Ss Rule Subsystem
77 The
78 .Xr devfs 5
79 rule subsystem provides a way for the administrator of a system to control
80 the attributes of DEVFS nodes.
81 .\" XXX devfs node?  entry?  what?
82 Each DEVFS mount-point has a
83 .Dq ruleset ,
84 or a list of rules,
85 associated with it.
86 When a device driver creates a new node,
87 all the rules in the ruleset associated with each mount-point are applied
88 (see below) before the node becomes visible to the userland.
89 This permits the administrator to change the properties,
90 including the visibility,
91 of certain nodes.
92 For example, one might want to hide all disk nodes in a
93 .Xr jail 2 Ns 's
94 .Pa /dev .
95 .Ss Rule Manipulation
96 Rule manipulation commands follow the
97 .Cm rule
98 keyword.
99 The following flags are common to all of the rule manipulation commands:
100 .Bl -tag -width 15n
101 .It Fl s Ar ruleset
102 Operate on the ruleset with the number
103 .Ar ruleset .
104 If this is not specified,
105 the commands operate on the ruleset currently associated with the
106 specified mount-point.
107 .El
108 .Pp
109 The following commands are recognized:
110 .Bl -tag -width 15n
111 .It Cm rule add Oo Ar rulenum Oc Ar rulespec
112 Add the rule described by
113 .Ar rulespec
114 (defined below)
115 to the ruleset.
116 The rule has the number
117 .Ar rulenum
118 if it is explicitly specified;
119 otherwise, the rule number is automatically determined by the kernel.
120 .It Cm rule apply Ar rulenum | rulespec
121 Apply rule number
122 .Ar rulenum
123 or the rule described by
124 .Ar rulespec
125 to the mount-point.
126 Rules that are
127 .Dq applied
128 have their conditions checked against all nodes
129 in the mount-point and the actions taken if they match.
130 .It Cm rule applyset
131 Apply all the rules in the ruleset to the mount-point
132 (see above for the definition of
133 .Dq apply ) .
134 .It Cm rule del Ar rulenum
135 Delete rule number
136 .Ar rulenum
137 from the ruleset.
138 .It Cm rule delset
139 Delete all rules from the ruleset.
140 .It Cm rule show Op Ar rulenum
141 Display the rule number
142 .Ar rulenum ,
143 or all the rules in the ruleset.
144 The output lines (one line per rule) are expected to be valid
145 .Ar rulespec Ns s .
146 .It Cm rule showsets
147 Report the numbers of existing rulesets.
148 .It Cm ruleset Ar ruleset
149 Set ruleset number
150 .Ar ruleset
151 as the current ruleset for the mount-point.
152 .El
153 .Ss Rule Specification
154 Rules have two parts: the conditions and the actions.
155 The conditions determine which DEVFS nodes the rule matches
156 and the actions determine what should be done when a rule matches a node.
157 For example, a rule can be written that sets the GID to
158 .Dq Li operator
159 for all devices of type tape.
160 If the first token of a rule specification is a single dash
161 .Pq Sq Fl ,
162 rules are read from the standard input and the rest of the specification
163 is ignored.
164 .Pp
165 The following conditions are recognized.
166 Conditions are ANDed together when matching a device;
167 if OR is desired, multiple rules can be written.
168 .Bl -tag -width 15n
169 .It Cm path Ar pattern
170 Matches any node with a path that matches
171 .Ar pattern ,
172 which is interpreted as a
173 .Xr glob 3 Ns -style
174 pattern.
175 .It Cm type Ar devtype
176 Matches any node that is of type
177 .Ar devtype .
178 Valid types are
179 .Cm disk , mem , tape
180 and
181 .Cm tty .
182 .El
183 .Pp
184 The following actions are recognized.
185 Although there is no explicit delimiter between conditions and actions,
186 they may not be intermixed.
187 .Bl -tag -width 15n
188 .It Cm group Ar gid
189 Set the GID of the node to
190 .Ar gid ,
191 which may be a group name
192 (looked up in
193 .Pa /etc/group )
194 or number.
195 .It Cm hide
196 Hide the node.
197 Nodes may later be revived manually with
198 .Xr mknod 8
199 or with the
200 .Cm unhide
201 action.
202 Hiding a directory node effectively hides all of its child nodes.
203 .It Cm include Ar ruleset
204 Apply all the rules in ruleset number
205 .Ar ruleset
206 to the node.
207 This does not necessarily result in any changes to the node
208 (e.g., if none of the rules in the included ruleset match).
209 Include commands in the referenced
210 .Ar ruleset
211 are not resolved.
212 .It Cm mode Ar filemode
213 Set the file mode to
214 .Ar filemode ,
215 which is interpreted as in
216 .Xr chmod 1 .
217 .It Cm user Ar uid
218 Set the UID to
219 .Ar uid ,
220 which may be a user name
221 (looked up in
222 .Pa /etc/passwd )
223 or number.
224 .It Cm unhide
225 Unhide the node.
226 If the node resides in a subdirectory,
227 all parent directory nodes must be visible to be able to access the node.
228 .El
229 .Sh IMPLEMENTATION NOTES
230 Rulesets are created by the kernel at the first reference
231 and destroyed when the last reference disappears.
232 E.g., a ruleset is created when a rule is added to it or when it is set
233 as the current ruleset for a mount-point, and
234 a ruleset is destroyed when the last rule in it is deleted
235 and no other references to it exist
236 (i.e., it is not included by any rules and it is not the current ruleset
237 for any mount-point).
238 .Pp
239 Ruleset number 0 is the default ruleset for all new mount-points.
240 It is always empty, cannot be modified or deleted, and does not show up
241 in the output of
242 .Cm showsets .
243 .Pp
244 Rules and rulesets are unique to the entire system,
245 not a particular mount-point.
246 I.e., a
247 .Cm showsets
248 will return the same information regardless of the mount-point specified with
249 .Fl m .
250 The mount-point is only relevant when changing what its current ruleset is
251 or when using one of the apply commands.
252 .Sh FILES
253 .Bl -tag -width "Pa /usr/share/examples/etc/devfs.conf" -compact
254 .It Pa /etc/defaults/devfs.rules
255 Default
256 .Nm
257 configuration file.
258 .It Pa /etc/devfs.rules
259 Local
260 .Nm
261 configuration file.
262 Rulesets in here override those in
263 .Pa /etc/defaults/devfs.rules
264 with the same ruleset number, otherwise the two files are effectively merged.
265 .It Pa /etc/devfs.conf
266 Boot-time
267 .Nm
268 configuration file.
269 .It Pa /usr/share/examples/etc/devfs.conf
270 Example boot-time
271 .Nm
272 configuration file.
273 .El
274 .Sh EXAMPLES
275 When the system boots,
276 the only ruleset that exists is ruleset number 0;
277 since the latter may not be modified, we have to create another ruleset
278 before adding rules.
279 Note that since most of the following examples do not specify
280 .Fl m ,
281 the operations are performed on
282 .Pa /dev
283 (this only matters for things that might change the properties of nodes).
284 .Pp
285 Specify that ruleset 10 should be the current ruleset for
286 .Pa /dev
287 (if it does not already exist, it is created):
288 .Pp
289 .Dl "devfs ruleset 10"
290 .Pp
291 Add a rule that causes all nodes that have a path that matches
292 .Dq Li speaker
293 (this is only
294 .Pa /dev/speaker )
295 to have the file mode 666 (read and write for all).
296 Note that if any such nodes already exist, their mode will not be changed
297 unless this rule (or ruleset) is explicitly applied (see below).
298 The mode
299 .Em will
300 be changed if the node is created
301 .Em after
302 the rule is added
303 (e.g., the
304 .Pa atspeaker
305 module is loaded after the above rule is added):
306 .Pp
307 .Dl "devfs rule add path speaker mode 666"
308 .Pp
309 Apply all the rules in the current ruleset to all the existing nodes.
310 E.g., if the below rule was added after
311 .Pa /dev/speaker
312 was created,
313 this command will cause its file mode to be changed to 666
314 as prescribed by the rule:
315 .Pp
316 .Dl "devfs rule applyset"
317 .Pp
318 For all devices with a path that matches
319 .Dq Li snp* ,
320 set the file mode to 660 and the GID to
321 .Dq Li snoopers .
322 This permits users in the
323 .Dq Li snoopers
324 group to use the
325 .Xr snp 4
326 devices
327 (quoting the argument to
328 .Cm path
329 is often necessary to disable the shell's globbing features):
330 .Pp
331 .Dl devfs rule add path "snp*" mode 660 group snoopers
332 .Pp
333 Add a rule to ruleset number 20.
334 Since this ruleset is not the current ruleset for any mount-points,
335 this rule is never applied automatically (unless ruleset 20 becomes
336 a current ruleset for some mount-point at a later time):
337 .Pp
338 .Dl "devfs rule -s 20 add type disk group wheel"
339 .Pp
340 Explicitly apply all rules in ruleset number 20 to the DEVFS mount on
341 .Pa /my/jail/dev .
342 It does not matter that ruleset 20 is not the current ruleset for that
343 mount-point; the rules are still applied:
344 .Pp
345 .Dl "devfs -m /my/jail/dev rule -s 20 applyset"
346 .Pp
347 Since the following rule has no conditions, the action
348 .Pq Cm hide
349 will be applied to all nodes:
350 .Pp
351 .Dl "devfs rule apply hide"
352 .Pp
353 Since hiding all nodes is not very useful, we can undo it.
354 The following applies
355 .Cm unhide
356 to all the nodes,
357 causing them to reappear:
358 .Pp
359 .Dl "devfs rule apply unhide"
360 .Pp
361 Add all the rules from the file
362 .Pa my_rules
363 to ruleset 10:
364 .Pp
365 .Dl "devfs rule -s 10 add - < my_rules"
366 .Pp
367 The below copies all the rules from ruleset 20 into ruleset 10.
368 The rule numbers are preserved,
369 but ruleset 10 may already have rules with non-conflicting numbers
370 (these will be preserved).
371 Since
372 .Cm show
373 outputs valid rules,
374 this feature can be used to copy rulesets:
375 .Pp
376 .Dl "devfs rule -s 20 show | devfs rule -s 10 add -"
377 .Sh SEE ALSO
378 .Xr chmod 1 ,
379 .Xr jail 2 ,
380 .Xr glob 3 ,
381 .Xr devfs 5 ,
382 .Xr devfs.conf 5 ,
383 .Xr devfs.rules 5 ,
384 .Xr chown 8 ,
385 .Xr jail 8 ,
386 .Xr mknod 8 ,
387 .Xr service 8
388 .Sh HISTORY
389 The
390 .Nm
391 utility first appeared in
392 .Fx 5.0 .
393 .Sh AUTHORS
394 .An Dima Dorfman