chown(2) System Calls Manual chown(2) chown, fchown, lchown, fchownat - (libc -lc) #include int chown(const char *path, uid_t owner, gid_t group); int fchown(int fd, uid_t owner, gid_t group); int lchown(const char *path, uid_t owner, gid_t group); #include /* AT_* */ #include int fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags); glibc ( feature_test_macros(7)): fchown(), lchown(): /* glibc 2.12: */ _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 500 || /* glibc <= 2.19: */ _BSD_SOURCE fchownat(): glibc 2.10: _POSIX_C_SOURCE >= 200809L glibc 2.10: _ATFILE_SOURCE . chown() fchown() lchown() : o chown() path . o fchown() fd. o lchown() chown() . (: CAP_CHOWN) . . (: CAP_CHOWN) . owner group -1 . S_ISUID S_ISGID. POSIX chown() 2.2.13 . ( S_IXGRP ) S_ISGID chown(). ( ) . fchownat() fchownat() chown() . path dirfd ( chown() ). path dirfd AT_FDCWD path ( chown()). path dirfd. flags ORing 0 AT_EMPTY_PATH ( 2.6.39) path dirfd ( O_PATH open(2)). dirfd . dirfd AT_FDCWD . _GNU_SOURCE . AT_SYMLINK_NOFOLLOW path : lchown(). ( fchownat() chown().) openat(2) fchownat(). . -1 errno . . chown() . EACCES . ( path_resolution(7).) EBADF (fchown()) fd . EBADF (fchownat()) path dirfd AT_FDCWD . EFAULT path . EINVAL (fchownat()) flags. EIO (fchown()) / inode. ELOOP path. ENAMETOOLONG path . ENOENT . ENOMEM . ENOTDIR . ENOTDIR (fchownat()) path dirfd . EPERM ( ) / . EPERM . ( FS_IOC_SETFLAGS(2const).) EROFS . 4.4BSD ( ). POSIX.1-2024. chown() SVr4, POSIX.1-1988, 4.4BSD. fchown() SVr4 4.4BSD SUSv1 POSIX.1-2001. lchown() SVr4, 4.4BSD, SUSv1, POSIX.1-2001 XSI, POSIX.1-2008. fchownat() POSIX.1-2008. 2.6.16 glibc 2.4. ( open(2) mkdir(2)) . (set-group-ID) . mount(8) -o grpid ( -o bsdgroups) -o nogrpid ( -o sysvgroups) : o -o grpid . o -o nogrpid (set-group-ID) GID . o -o nogrpid (set-group-ID) . Linux 4.12 -o grpid -o nogrpid ext2 ext3 ext4 XFS. -o nogrpid. glibc fchownat() glibc chown() lchown(). path glibc /proc/self/fd dirfd. NFS chown() NFS UID . chown() . . Linux chown() fchown() lchown() 16 . Linux 2.4 chown32() fchown32() lchown32() 32 . glibc chown() fchown() lchown() . Linux 2.1.81 ( 2.1.46) chown() . Linux 2.1.81 chown() lchown() . Linux 2.1.86 ( chown() ) chown() . . ( getpwnam(3) ). #include #include #include #include #include int main(int argc, char *argv[]) { char *endptr; uid_t uid; struct passwd *pwd; if (argc != 3 || argv[1][0] == '\0') { fprintf(stderr, "%s \n", argv[0]); exit(EXIT_FAILURE); } uid = strtol(argv[1], &endptr, 10); /* Allow a numeric string */ if (*endptr != '\0') { /* Was not pure numeric string */ pwd = getpwnam(argv[1]); /* Try getting UID for username */ if (pwd == NULL) { perror("getpwnam"); exit(EXIT_FAILURE); } uid = pwd->pw_uid; } if (chown(argv[2], uid, -1) == -1) { perror("chown"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } chgrp(1) chown(1) chmod(2) flock(2) path_resolution(7) symlink(7) 3 . . : . 6.18 8 2026 chown(2)