NAME
chown, fchown, lchown - change ownership of a file
SYNOPSIS
#include <sys/types.h>
#include <unistd.h>
I int chown(const char * path , uid_t owner , gid_t group );
I int fchown(int fd , uid_t owner , gid_t group );
I int lchown(const char * path , uid_t owner , gid_t group );
DESCRIPTION
These system calls change the owner and group of the file specified by
path
or by
R fd .
Only a privileged process (Linux: one with the
CAP_CHOWN
capability) may change the owner of a file.
The owner of a file may change the group of the file
to any group of which that owner is a member.
A privileged process (Linux: with
R CAP_CHOWN )
may change the group arbitrarily.
If the
owner
or
group
is specified as -1, then that ID is not changed.
When the owner or group of an executable file are changed by a non-superuser,
the
S_ISUID
and
S_ISGID
mode bits are cleared.
POSIX does not specify whether
this also should happen when root does the
R chown ();
the Linux behavior depends on the kernel version.
In case of a non-group-executable file (with clear
S_IXGRP
bit)
the
S_ISGID
bit indicates mandatory locking, and is not cleared by a
R chown ().
RETURN VALUE
On success, zero is returned.
On error, -1 is returned, and
errno
is set appropriately.
ERRORS
Depending on the file system, other errors can be returned.
The more general errors for
R chown ()
are listed below.
EACCES
Search permission is denied on a component of the path prefix.
(See also
path_resolution(7).)
EFAULT
path
points outside your accessible address space.
ELOOP
Too many symbolic links were encountered in resolving
R path .
ENAMETOOLONG
path
is too long.
ENOENT
The file does not exist.
ENOMEM
Insufficient kernel memory was available.
ENOTDIR
A component of the path prefix is not a directory.
EPERM
The calling process did not have the required permissions
(see above) to change owner and/or group.
EROFS
The named file resides on a read-only file system.
The general errors for
R fchown ()
are listed below:
EBADF
The descriptor is not valid.
EIO
A low-level I/O error occurred while modifying the inode.
CONFORMING TO
4.4BSD, SVr4, POSIX.1-2001.
The 4.4BSD version can only be
used by the superuser (that is, ordinary users cannot give away files).
NOTES
The
R chown ()
semantics are deliberately violated on NFS file systems
which have UID mapping enabled.
Additionally, the semantics of all system
calls which access the file contents are violated, because
R chown ()
may cause immediate access revocation on already open files.
Client side
caching may lead to a delay between the time where ownership have
been changed to allow access for a user and the time where the file can
actually be accessed by the user on other clients.
In versions of Linux prior to 2.1.81 (and distinct from 2.1.46),
R chown ()
did not follow symbolic links.
Since Linux 2.1.81,
R chown ()
does follow symbolic links, and there is a new system call
R lchown ()
that does not follow symbolic links.
Since Linux 2.1.86, this new call (that has the same semantics
as the old
R chown ())
has got the same syscall number, and
R chown ()
got the newly introduced number.
The prototype for
R fchown ()
is only available if
_BSD_SOURCE
is defined.
SEE ALSO