p .Fn fchmodat works the same way as .Fn chmod (or .Fn lchmod if .Dv AT_SYMLINK_NOFOLLOW is set in .Fa flag ) except if .Fa path is relative. In that case, it is looked up from a directory whose file descriptor was passed as .Fa fd . Search permission is required on .Fa fd except if that file descriptor was open with .Dv O_SEARCH option. .Fa fd can be set to .Dv AT_FDCWD in order to specify current directory.
p .Fn chmod verifies that the process owner (user) either owns the file specified by .Fa path (or .Fa fd ) , or is the super-user. A mode is created from .Em or'd permission bit masks defined in n sys/stat.h : d -literal -offset indent -compact #define S_IRWXU 0000700 /* RWX mask for owner */ #define S_IRUSR 0000400 /* R for owner */ #define S_IWUSR 0000200 /* W for owner */ #define S_IXUSR 0000100 /* X for owner */ #define S_IRWXG 0000070 /* RWX mask for group */ #define S_IRGRP 0000040 /* R for group */ #define S_IWGRP 0000020 /* W for group */ #define S_IXGRP 0000010 /* X for group */ #define S_IRWXO 0000007 /* RWX mask for other */ #define S_IROTH 0000004 /* R for other */ #define S_IWOTH 0000002 /* W for other */ #define S_IXOTH 0000001 /* X for other */ #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ #define S_ISVTX 0001000 /* sticky bit */ .Ed
p The mode .Dv ISVTX (the .Sq sticky bit ) can be set on regular files, but has no effect. For historical reasons this can be done only by the super-user.
p If mode .Dv ISVTX (the .Sq sticky bit ) is set on a directory, an unprivileged user may not delete or rename files of other users in that directory. The sticky bit may be set by any user on a directory which the user owns or has appropriate permissions.
p For more information about the history and properties of the sticky bit, see .Xr sticky 7 .
p Changing the owner of a file turns off the set-user-id and set-group-id bits; writing to a file turns off the set-user-id and set-group-id bits unless the user is the super-user. This makes the system somewhat more secure by protecting set-user-id (set-group-id) files from remaining set-user-id (set-group-id) if they are modified, at the expense of a degree of compatibility. .Sh RETURN VALUES Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and .Va errno is set to indicate the error. .Sh ERRORS .Fn chmod and .Fn lchmod will fail and the file mode will be unchanged if: l -tag -width Er t Bq Er EACCES Search permission is denied for a component of the path prefix. t Bq Er EFAULT .Fa path points outside the process's allocated address space. t Bq Er EFTYPE The effective user ID is not the super-user, the .Fa mode includes the sticky bit
q Dv S_ISVTX , and .Fa path does not refer to a directory. t Bq Er EIO An I/O error occurred while reading from or writing to the file system. t Bq Er ELOOP Too many symbolic links were encountered in translating the pathname. t Bq Er ENAMETOOLONG A component of a pathname exceeded rq Dv NAME_MAX characters, or an entire path name exceeded rq Dv PATH_MAX characters. t Bq Er ENOENT The named file does not exist. t Bq Er ENOTDIR A component of the path prefix is not a directory. t Bq Er EPERM The effective user ID does not match the owner of the file and the effective user ID is not the super-user; or the mode includes the setgid bit
q Dv S_ISGID but the file's group is neither the effective group ID nor is it in the group access list. t Bq Er EROFS The named file resides on a read-only file system. .El
p .Fn fchmod will fail if: l -tag -width Er t Bq Er EBADF The descriptor is not valid. t Bq Er EFTYPE The effective user ID is not the super-user, the .Fa mode includes the sticky bit
q Dv S_ISVTX , and .Fa fd does not refer to a directory. t Bq Er EINVAL .Fa fd refers to a socket, not to a file. t Bq Er EIO An I/O error occurred while reading from or writing to the file system. t Bq Er EPERM The effective user ID does not match the owner of the file and the effective user ID is not the super-user; or the mode includes the setgid bit
q Dv S_ISGID but the file's group is neither the effective group ID nor is it in the group access list. t Bq Er EROFS The file resides on a read-only file system. .El .Sh SEE ALSO .Xr chmod 1 , .Xr chflags 2 , .Xr chown 2 , .Xr open 2 , .Xr stat 2 , .Xr getmode 3 , .Xr setmode 3 , .Xr sticky 7 , .Xr symlink 7 .Sh STANDARDS The .Fn chmod function conforms to .St -p1003.1-90 . .Fn fchmodat function conforms to .St -p1003.1-2008 . .Sh HISTORY The .Fn fchmod function call appeared in x 4.2 . The .Fn lchmod function call appeared in .Nx 1.3 .