tests: fix inconsistent use of getlimits_
[coreutils.git] / doc / perm.texi
blobfbb81c9cdfbb8daf6d48e49dade6607e277d1912
1 @c File mode bits
3 @c Copyright (C) 1994--2024 Free Software Foundation, Inc.
5 @c Permission is granted to copy, distribute and/or modify this document
6 @c under the terms of the GNU Free Documentation License, Version 1.3 or
7 @c any later version published by the Free Software Foundation; with no
8 @c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
9 @c Texts.  A copy of the license is included in the ``GNU Free
10 @c Documentation License'' file as part of this distribution.
12 Each file has a set of @dfn{file mode bits} that control the kinds of
13 access that users have to that file.  They can be represented either in
14 symbolic form or as an octal number.
16 @menu
17 * Mode Structure::              Structure of file mode bits.
18 * Symbolic Modes::              Mnemonic representation of file mode bits.
19 * Numeric Modes::               File mode bits as octal numbers.
20 * Operator Numeric Modes::      ANDing, ORing, and setting modes octally.
21 * Directory Setuid and Setgid:: Set-user-ID and set-group-ID on directories.
22 @end menu
24 @node Mode Structure
25 @section Structure of File Mode Bits
27 The file mode bits have two parts: the @dfn{file permission bits},
28 which control ordinary access to the file, and @dfn{special mode
29 bits}, which affect only some files.
31 There are three kinds of permissions that a user can have for a file:
33 @enumerate
34 @item
35 @cindex read permission
36 permission to read the file.  For directories, this means permission to
37 list the contents of the directory.
38 @item
39 @cindex write permission
40 permission to write to (change) the file.  For directories, this means
41 permission to create and remove files in the directory.
42 @item
43 @cindex execute/search permission
44 permission to execute the file (run it as a program).  For directories,
45 this means permission to access files in the directory.
46 @end enumerate
48 There are three categories of users who may have different permissions
49 to perform any of the above operations on a file:
51 @enumerate
52 @item
53 the file's owner;
54 @item
55 other users who are in the file's group;
56 @item
57 everyone else.
58 @end enumerate
60 @cindex owner, default
61 @cindex group owner, default
62 Files are given an owner and group when they are created.  Usually the
63 owner is the current user and the group is the group of the directory
64 the file is in, but this varies with the operating system, the
65 file system the file is created on, and the way the file is created.  You
66 can change the owner and group of a file by using the @command{chown} and
67 @command{chgrp} commands.
69 In addition to the three sets of three permissions listed above, the
70 file mode bits have three special components, which affect only
71 executable files (programs) and, on most systems, directories:
73 @table @asis
74 @item The @dfn{set-user-ID bit} (@dfn{setuid bit}).
75 @cindex set-user-ID
76 @cindex setuid
77 On execution, set the process's effective user ID to that of the file.
78 For directories on a few systems, give files created in the directory
79 the same owner as the directory, no matter who creates them, and set
80 the set-user-ID bit of newly-created subdirectories.
82 @item The @dfn{set-group-ID bit} (@dfn{setgid bit}).
83 @cindex set-group-ID
84 @cindex setgid
85 On execution, set the process's effective group ID to that of the file.
86 For directories on most systems, give files created in the directory
87 the same group as the directory, no matter what group the user who
88 creates them is in, and set the set-group-ID bit of newly-created
89 subdirectories.
91 @item The @dfn{restricted deletion flag} or @dfn{sticky bit}.
92 @cindex sticky
93 @cindex swap space, saving text image in
94 @cindex text image, saving in swap space
95 @cindex restricted deletion flag
96 Prevent unprivileged users from removing or renaming a file in a directory
97 unless they own the file or the directory; this is commonly
98 found on world-writable directories like @file{/tmp}.
99 For regular files on some older systems, save the program's text image on the
100 swap device so it will load more quickly when run, so that the image
101 is ``sticky''.
102 @end table
104 In addition to the file mode bits listed above, there may be file attributes
105 specific to the file system, e.g., access control lists (ACLs), whether a
106 file is compressed, whether a file can be modified (immutability), and whether
107 a file can be dumped.  These are usually set using programs
108 specific to the file system.  For example:
109 @c should probably say a lot more about ACLs... someday
111 @table @asis
112 @item ext2
113 On GNU and GNU/Linux the file attributes specific to
114 the ext2 file system are set using @command{chattr}.
116 @item FFS
117 On FreeBSD the file flags specific to the FFS
118 file system are set using @command{chflags}.
119 @end table
121 Even if a file's mode bits allow an operation on that file,
122 that operation may still fail, because:
124 @itemize
125 @item
126 the file-system-specific attributes or flags do not permit it; or
128 @item
129 the file system is mounted as read-only.
130 @end itemize
132 For example, if the immutable attribute is set on a file,
133 it cannot be modified, regardless of the fact that you
134 may have just run @code{chmod a+w FILE}.
136 @node Symbolic Modes
137 @section Symbolic Modes
139 @cindex symbolic modes
140 @dfn{Symbolic modes} represent changes to files' mode bits as
141 operations on single-character symbols.  They allow you to modify either
142 all or selected parts of files' mode bits, optionally based on
143 their previous values, and perhaps on the current @code{umask} as well
144 (@pxref{Umask and Protection}).
146 The format of symbolic modes is:
148 @example
149 @r{[}ugoa@dots{}@r{][}-+=@r{]}@var{perms}@dots{}@r{[},@dots{}@r{]}
150 @end example
152 @noindent
153 where @var{perms} is either zero or more letters from the set
154 @samp{rwxXst}, or a single letter from the set @samp{ugo}.
156 The following sections describe the operators and other details of
157 symbolic modes.
159 @menu
160 * Setting Permissions::          Basic operations on permissions.
161 * Copying Permissions::          Copying existing permissions.
162 * Changing Special Mode Bits::   Special mode bits.
163 * Conditional Executability::    Conditionally affecting executability.
164 * Multiple Changes::             Making multiple changes.
165 * Umask and Protection::              The effect of the umask.
166 @end menu
168 @node Setting Permissions
169 @subsection Setting Permissions
171 The basic symbolic operations on a file's permissions are adding,
172 removing, and setting the permission that certain users have to read,
173 write, and execute or search the file.  These operations have the following
174 format:
176 @example
177 @var{users} @var{operation} @var{permissions}
178 @end example
180 @noindent
181 The spaces between the three parts above are shown for readability only;
182 symbolic modes cannot contain spaces.
184 The @var{users} part tells which users' access to the file is changed.
185 It consists of one or more of the following letters (or it can be empty;
186 @pxref{Umask and Protection}, for a description of what happens then).  When
187 more than one of these letters is given, the order that they are in does
188 not matter.
190 @table @code
191 @item u
192 @cindex owner of file, permissions for
193 the user who owns the file;
194 @item g
195 @cindex group, permissions for
196 other users who are in the file's group;
197 @item o
198 @cindex other permissions
199 all other users;
200 @item a
201 all users; the same as @samp{ugo}.
202 @end table
204 The @var{operation} part tells how to change the affected users' access
205 to the file, and is one of the following symbols:
207 @table @code
208 @item +
209 @cindex adding permissions
210 to add the @var{permissions} to whatever permissions the @var{users}
211 already have for the file;
212 @item -
213 @cindex removing permissions
214 @cindex subtracting permissions
215 to remove the @var{permissions} from whatever permissions the
216 @var{users} already have for the file;
217 @item =
218 @cindex setting permissions
219 to make the @var{permissions} the only permissions that the @var{users}
220 have for the file.
221 @end table
223 The @var{permissions} part tells what kind of access to the file should
224 be changed; it is normally zero or more of the following letters.  As with the
225 @var{users} part, the order does not matter when more than one letter is
226 given.  Omitting the @var{permissions} part is useful only with the
227 @samp{=} operation, where it gives the specified @var{users} no access
228 at all to the file.
230 @table @code
231 @item r
232 @cindex read permission, symbolic
233 the permission the @var{users} have to read the file;
234 @item w
235 @cindex write permission, symbolic
236 the permission the @var{users} have to write to the file;
237 @item x
238 @cindex execute/search permission, symbolic
239 the permission the @var{users} have to execute the file,
240 or search it if it is a directory.
241 @end table
243 For example, to give everyone permission to read and write a regular file,
244 but not to execute it, use:
246 @example
247 a=rw
248 @end example
250 To remove write permission for all users other than the file's
251 owner, use:
253 @example
254 go-w
255 @end example
257 @noindent
258 The above command does not affect the access that the owner of
259 the file has to it, nor does it affect whether other users can
260 read or execute the file.
262 To give everyone except a file's owner no permission to do anything with
263 that file, use the mode below.  Other users could still remove the file,
264 if they have write permission on the directory it is in.
266 @example
268 @end example
270 @noindent
271 Another way to specify the same thing is:
273 @example
274 og-rwx
275 @end example
277 @node Copying Permissions
278 @subsection Copying Existing Permissions
280 @cindex copying existing permissions
281 @cindex permissions, copying existing
282 You can base a file's permissions on its existing permissions.  To do
283 this, instead of using a series of @samp{r}, @samp{w}, or @samp{x}
284 letters after the
285 operator, you use the letter @samp{u}, @samp{g}, or @samp{o}.  For
286 example, the mode
288 @example
290 @end example
292 @noindent
293 adds the permissions for users who are in a file's group to the
294 permissions that other users have for the file.  Thus, if the file
295 started out as mode 664 (@samp{rw-rw-r--}), the above mode would change
296 it to mode 666 (@samp{rw-rw-rw-}).  If the file had started out as mode
297 741 (@samp{rwxr----x}), the above mode would change it to mode 745
298 (@samp{rwxr--r-x}).  The @samp{-} and @samp{=} operations work
299 analogously.
301 @node Changing Special Mode Bits
302 @subsection Changing Special Mode Bits
304 @cindex changing special mode bits
305 In addition to changing a file's read, write, and execute/search permissions,
306 you can change its special mode bits.  @xref{Mode Structure}, for a
307 summary of these special mode bits.
309 To change the file mode bits to set the user ID on execution, use
310 @samp{u} in the @var{users} part of the symbolic mode and
311 @samp{s} in the @var{permissions} part.
313 To change the file mode bits to set the group ID on execution, use
314 @samp{g} in the @var{users} part of the symbolic mode and
315 @samp{s} in the @var{permissions} part.
317 To set both user and group ID on execution, omit the @var{users} part
318 of the symbolic mode (or use @samp{a}) and use @samp{s} in the
319 @var{permissions} part.
321 To change the file mode bits to set the restricted deletion flag or sticky bit,
322 omit the @var{users} part of the symbolic mode (or use @samp{a}) and use
323 @samp{t} in the @var{permissions} part.
325 For example, to set the set-user-ID mode bit of a program,
326 you can use the mode:
328 @example
330 @end example
332 To remove both set-user-ID and set-group-ID mode bits from
333 it, you can use the mode:
335 @example
337 @end example
339 To set the restricted deletion flag or sticky bit, you can use
340 the mode:
342 @example
344 @end example
346 The combination @samp{o+s} has no effect.  On GNU systems
347 the combinations @samp{u+t} and @samp{g+t} have no effect, and
348 @samp{o+t} acts like plain @samp{+t}.
350 The @samp{=} operator is not very useful with special mode bits.
351 For example, the mode:
353 @example
355 @end example
357 @noindent
358 does set the restricted deletion flag or sticky bit, but it also
359 removes all read, write, and execute/search permissions that users not in the
360 file's group might have had for it.
362 @xref{Directory Setuid and Setgid}, for additional rules concerning
363 set-user-ID and set-group-ID bits and directories.
365 @node Conditional Executability
366 @subsection Conditional Executability
368 @cindex conditional executability
369 There is one more special type of symbolic permission: if you use
370 @samp{X} instead of @samp{x}, execute/search permission is affected only if the
371 file is a directory or already had execute permission.
373 For example, this mode:
375 @example
377 @end example
379 @noindent
380 gives all users permission to search directories, or to execute files if
381 anyone could execute them before.
383 @node Multiple Changes
384 @subsection Making Multiple Changes
386 @cindex multiple changes to permissions
387 The format of symbolic modes is actually more complex than described
388 above (@pxref{Setting Permissions}).  It provides two ways to make
389 multiple changes to files' mode bits.
391 The first way is to specify multiple @var{operation} and
392 @var{permissions} parts after a @var{users} part in the symbolic mode.
394 For example, the mode:
396 @example
397 og+rX-w
398 @end example
400 @noindent
401 gives users other than the owner of the file read permission and, if
402 it is a directory or if someone already had execute permission
403 to it, gives them execute/search permission; and it also denies them write
404 permission to the file.  It does not affect the permission that the
405 owner of the file has for it.  The above mode is equivalent to
406 the two modes:
408 @example
409 og+rX
410 og-w
411 @end example
413 The second way to make multiple changes is to specify more than one
414 simple symbolic mode, separated by commas.  For example, the mode:
416 @example
417 a+r,go-w
418 @end example
420 @noindent
421 gives everyone permission to read the file and removes write
422 permission on it for all users except its owner.  Another example:
424 @example
425 u=rwx,g=rx,o=
426 @end example
428 @noindent
429 sets all of the permission bits for the file explicitly.  (It
430 gives users who are not in the file's group no permission at all for
431 it.)
433 The two methods can be combined.  The mode:
435 @example
436 a+r,g+x-w
437 @end example
439 @noindent
440 gives all users permission to read the file, and gives users who are in
441 the file's group permission to execute/search it as well, but not permission
442 to write to it.  The above mode could be written in several different
443 ways; another is:
445 @example
446 u+r,g+rx,o+r,g-w
447 @end example
449 @node Umask and Protection
450 @subsection The Umask and Protection
452 @cindex umask and modes
453 @cindex modes and umask
454 If the @var{users} part of a symbolic mode is omitted, it defaults to
455 @samp{a} (affect all users), except that any permissions that are
456 @emph{set} in the system variable @code{umask} are @emph{not affected}.
457 The value of @code{umask} can be set using the
458 @code{umask} command.  Its default value varies from system to system.
460 @cindex giving away permissions
461 Omitting the @var{users} part of a symbolic mode is generally not useful
462 with operations other than @samp{+}.  It is useful with @samp{+} because
463 it allows you to use @code{umask} as an easily customizable protection
464 against giving away more permission to files than you intended to.
466 As an example, if @code{umask} has the value 2, which removes write
467 permission for users who are not in the file's group, then the mode:
469 @example
471 @end example
473 @noindent
474 adds permission to write to the file to its owner and to other users who
475 are in the file's group, but @emph{not} to other users.  In contrast,
476 the mode:
478 @example
480 @end example
482 @noindent
483 ignores @code{umask}, and @emph{does} give write permission for
484 the file to all users.
486 @node Numeric Modes
487 @section Numeric Modes
489 @cindex numeric modes
490 @cindex file mode bits, numeric
491 @cindex octal numbers for file modes
492 As an
493 alternative to giving a symbolic mode, you can give an octal (base 8)
494 number that represents the mode.
496 The permissions granted to the user,
497 to other users in the file's group,
498 and to other users not in the file's group each require three
499 bits: one bit for read, one for write, and one for execute/search permission.
500 These three bits are represented as one octal digit;
501 for example, if all three are present, the resulting 111 (in binary)
502 is represented as the digit 7 (in octal).  The three special
503 mode bits also require one bit each, and they are as a group
504 represented as another octal digit.  Here is how the bits are arranged,
505 starting with the highest valued bit:
507 @example
508 Value in  Corresponding
509 Mode      Mode Bit
511           Special mode bits:
512 4000      Set user ID
513 2000      Set group ID
514 1000      Restricted deletion flag or sticky bit
516           The file's owner:
517  400      Read
518  200      Write
519  100      Execute/search
521           Other users in the file's group:
522   40      Read
523   20      Write
524   10      Execute/search
526           Other users not in the file's group:
527    4      Read
528    2      Write
529    1      Execute/search
530 @end example
532 For example, numeric mode @samp{4751} corresponds to symbolic mode
533 @samp{u=srwx,g=rx,o=x}, and numeric mode @samp{664} corresponds to symbolic mode
534 @samp{ug=rw,o=r}.  Numeric mode @samp{0} corresponds to symbolic mode
535 @samp{a=}.
537 A numeric mode is usually shorter than the corresponding symbolic
538 mode, but it is limited in that normally it cannot take into account the
539 previous file mode bits; it can only set them absolutely.
540 The set-user-ID and set-group-ID bits of directories are an exception
541 to this general limitation.  @xref{Directory Setuid and Setgid}.
542 Also, operator numeric modes can take previous file mode bits into
543 account.  @xref{Operator Numeric Modes}.
545 Numeric modes are always interpreted in octal; you do not have to add a
546 leading @samp{0}, as you do in C@.  Mode @samp{0055} is the same as
547 mode @samp{55}.  However, modes of five digits or more, such as
548 @samp{00055}, are sometimes special (@pxref{Directory Setuid and Setgid}).
550 @node Operator Numeric Modes
551 @section Operator Numeric Modes
553 An operator numeric mode is a numeric mode that is prefixed by a
554 @samp{-}, @samp{+}, or @samp{=} operator, which has the same
555 interpretation as in symbolic modes.  For example, @samp{+440} enables
556 read permission for the file's owner and group, @samp{-1} disables
557 execute permission for other users, and @samp{=600} clears all
558 permissions except for enabling read-write permissions for the file's
559 owner.  Operator numeric modes can be combined with symbolic modes by
560 separating them with a comma; for example, @samp{=0,u+r} clears all
561 permissions except for enabling read permission for the file's owner.
563 The commands @samp{chmod =755 @var{dir}} and @samp{chmod 755
564 @var{dir}} differ in that the former clears the directory @var{dir}'s
565 setuid and setgid bits, whereas the latter preserves them.
566 @xref{Directory Setuid and Setgid}.
568 Operator numeric modes are a GNU extension.
570 @node Directory Setuid and Setgid
571 @section Directories and the Set-User-ID and Set-Group-ID Bits
573 On most systems, if a directory's set-group-ID bit is set, newly
574 created subfiles inherit the same group as the directory, and newly
575 created subdirectories inherit the set-group-ID bit of the parent
576 directory.  On a few systems, a directory's set-user-ID bit has a
577 similar effect on the ownership of new subfiles and the set-user-ID
578 bits of new subdirectories.  These mechanisms let users share files
579 more easily, by lessening the need to use @command{chmod} or
580 @command{chown} to share new files.
582 These convenience mechanisms rely on the set-user-ID and set-group-ID
583 bits of directories.  If commands like @command{chmod} and
584 @command{mkdir} routinely cleared these bits on directories, the
585 mechanisms would be less convenient and it would be harder to share
586 files.  Therefore, a command like @command{chmod} does not affect the
587 set-user-ID or set-group-ID bits of a directory unless the user
588 specifically mentions them in a symbolic mode, or uses an operator
589 numeric mode such as @samp{=755}, or sets them in a numeric mode, or
590 clears them in a numeric mode that has five or more octal digits.
591 For example, on systems that support
592 set-group-ID inheritance:
594 @example
595 # These commands leave the set-user-ID and
596 # set-group-ID bits of the subdirectories alone,
597 # so that they retain their default values.
598 mkdir A B C
599 chmod 755 A
600 chmod 0755 B
601 chmod u=rwx,go=rx C
602 mkdir -m 755 D
603 mkdir -m 0755 E
604 mkdir -m u=rwx,go=rx F
605 @end example
607 If you want to try to set these bits, you must mention them
608 explicitly in the symbolic or numeric modes, e.g.:
610 @example
611 # These commands try to set the set-user-ID
612 # and set-group-ID bits of the subdirectories.
613 mkdir G
614 chmod 6755 G
615 chmod +6000 G
616 chmod u=rwx,go=rx,a+s G
617 mkdir -m 6755 H
618 mkdir -m +6000 I
619 mkdir -m u=rwx,go=rx,a+s J
620 @end example
622 If you want to try to clear these bits, you must mention them
623 explicitly in a symbolic mode, or use an operator numeric mode, or
624 specify a numeric mode with five or more octal digits, e.g.:
626 @example
627 # These commands try to clear the set-user-ID
628 # and set-group-ID bits of the directory D.
629 chmod a-s D
630 chmod -6000 D
631 chmod =755 D
632 chmod 00755 D
633 @end example
635 This behavior is a GNU extension.  Portable scripts should
636 not rely on requests to set or clear these bits on directories, as
637 POSIX allows implementations to ignore these requests.
638 The GNU behavior with numeric modes of four or fewer digits
639 is intended for scripts portable to systems that preserve these bits;
640 the behavior with numeric modes of five or more digits is for scripts
641 portable to systems that do not preserve the bits.