| chmod(2) | System Calls Manual | chmod(2) |
NAVN¶
chmod, fchmod, fchmodat - ændre rettigheder for en fil
BIBLIOTEK¶
C-standardbibliotek (libc, -lc)
SYNOPSIS¶
#include <sys/stat.h>
int chmod(const char *sti, mode_t tilstand); int fchmod(int fd, mode_t tilstand);
#include <fcntl.h> /* Definition af AT_*-konstanter */ #include <sys/stat.h>
int fchmodat(int dirfd, const char *sti, mode_t tilstand, int flag);
fchmod():
Siden glibc 2.24:
_POSIX_C_SOURCE >= 199309L
glibc 2.19 til glibc 2.23
_POSIX_C_SOURCE
glibc 2.16 til glibc 2.19:
_BSD_SOURCE || _POSIX_C_SOURCE
glibc 2.12 til glibc 2.16:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
|| _POSIX_C_SOURCE >= 200809L
glibc 2.11 og tidligere:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
fchmodat():
Siden glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Før glibc 2.10:
_ATFILE_SOURCE
BESKRIVELSE¶
Systemkaldende chmod() og fchmod() ændrer en fils tilstandsdele. (Filtilstanden består af filrettighedsdele samt set-user-ID, set-group-ID og klæbende dele). Disse systemkald er kun forskellige ved hvordan filen er angivet:
- •
- chmod() ændrer tilstanden for den angivne fil hvis stinavn er angivet i sti, hvor referencen fjernes, hvis det er en symbolsk henvisning.
- •
- fchmod() ændrer tilstanden for filen refereret til af den åbne fildeskriptor fd.
Den nye filtilstand er angivet i tilstand, der er en bit-maske oprettet af ORing sammen med nul eller flere af de følgende:
- S_ISUID (04000)
- set-user-ID (angiv proceseffektiv bruger-id på execve(2))
- S_ISGID (02000)
- set-group-ID (angive proceseffektiv gruppe-id på execve(2); obligatorisk låsning, som beskrevet i fcntl(2); tag en nye fils gruppe fra overmappen, som beskrevet i chown(2) og mkdir(2))
- S_ISVTX (01000)
- sticky bit (klæbende del) (begrænset sletningsflag, som beskrevet i unlink(2))
- S_IRUSR (00400)
- læst af ejer
- S_IWUSR (00200)
- skrevet af ejer
- S_IXUSR (00100)
- kør/søg efter efter (»søg« gælder for mapper, og betyder at elementer i mappen kan tilgås)
- S_IRGRP (00040)
- læst af gruppe
- S_IWGRP (00020)
- skrevet af gruppe
- S_IXGRP (00010)
- kør/søg efter gruppe
- S_IROTH (00004)
- læst af andre
- S_IWOTH (00002)
- skrevet af andre
- S_IXOTH (00001)
- kør/søg af andre
Den effektive UID for den kaldende proces skal matche ejeren af filen, eller processen skal være privilegeret (Linux: skal have funktionaliteten CAP_FOWNER).
Hvis den kaldende proces ikke er privilegeret (Linux: har ikke funktionaliteten CAP_FSETID) og filgruppen ikke matcher det effektive gruppe-id for processen eller en af dennes supplementære gruppe-id'er, så vil delen S_ISGID blive slukket, men der bliver ikke sendt en fejl retur.
Som en sikkerhedsforanstaltning, afhængig af filsystemet, kan afviklingsdelene set-user-ID og set-group-ID slukkes hvis en fil skrives. (På Linux opstår dette hvis skriveprocessen ikke har funktionaliteten CAP_FSETID). På nogle filsystemer kan kun superbrugeren angive sticky bit (klæbende del), der kan have en speciel betydning. For sticky bit og for delene set-user-ID og set-group-ID på mapper, se inode(7).
På NFS-filsystemer, vil begrænsning af rettighederne straks påvirke allerede åbne filer, da adgangskontrollen udføres på serveren, mens åbne filer vedligeholdes af klienten. Udvidelse af rettighederne kan blive forsinket for andre klienter hvis attribut-mellemlagring er aktiveret på dem.
fchmodat()¶
Systemkaldet fchmodat() fungerer på præcis den samme måde som chmod(), undtagen for forskellene beskrevet her.
Hvis sti er relativ, så fortolkes den relativt til mappen refereret til af fildeskriptoren dirfd (frem for relativt til den nuværende arbejdsmappe for den kaldende proces, som gøres af chmod() for et relativt stinavn).
Hvis sti er relativ og dirfd er den specielle værdi AT_FDCWD, så fortolkes sti relativt til den nuværende arbejdsmappe for den kaldende proces (som chmod()).
Hvis sti er forældet, så ignoreres dirfd.
flag kan enten være 0, eller inkludere de følgende flag:
- AT_EMPTY_PATH (siden Linux 6.6)
- Hvis sti er en tom streng, arbejd på filen refereret til af dirfd (der kan være indhentet via open(2) O_PATH-flaget). I dette tilfælde kan dirfd referere til enhver filtype, ikke kun en mappe. Hvis dirfd er AT_FDCWD fungerer kaldet på den nuværende arbejdsmappe. Dette er flag er specifikt for Linux; definer _GNU_SOURCE for at hente dets definition.
- AT_SYMLINK_NOFOLLOW
- Hvis sti er en symbolsk henvisning, så fjern den ikke: i stedet arbejdes på selve henvisningen.
Se openat(2) for en forklaring på behovet for fchmodat().
RETURVÆRDI¶
Ved succes returneres nul. Ved fejl returneres -1 og errno angives for at indikere fejlen.
FEJL¶
Afhængig af filsystemet kan fejl, udover dem vist nedenfor, returneres.
De mere generelle fejl for chmod() er vist nedenfor:
- EACCES
- Søgerettighed er nægtet på en komponent for stipræfikset. (Se også path_resolution(7).)
- EBADF
- (fchmod()) Fildeskriptoren fd er ikke gyldig.
- EBADF
- (fchmodat()) sti er relativ men dirfd er hverken AT_FDCWD eller en gyldig fildeskriptor.
- EFAULT
- sti peger uden for dit tilgængelige adresserum.
- EINVAL
- (fchmodat()) Ugyldigt flag angivet i flag.
- EIO
- Der opstod en I/O-fejl.
- ELOOP
- Der var for mange symbolske henvisninger i forhold til sti.
- ENAMETOOLONG
- sti er for lang.
- ENOENT
- Filen findes ikke.
- ENOMEM
- Utilstrækkelig kernehukommelse var tilgængelig.
- ENOTDIR
- En komponent i stipræfikset er ikke en mappe.
- ENOTDIR
- (fchmodat()) sti er relativ og dirfd er en fildeskriptor, der refererer til en fil, der ikke er en mappe.
- ENOTSUP
- (fchmodat()) flag specificerede AT_SYMLINK_NOFOLLOW, hvilket ikke er understøttet.
- EPERM
- Den effektive UID matcher ikke filejeren, og processen er ikke privilegeret (Linux: har ikke funktionaliteten CAP_FOWNER).
- EPERM
- Filen er markeret uforanderlig eller tilføj-kun. (se FS_IOC_SETFLAGS(2const).)
- EROFS
- Den navngivne fil befinder sig på et skrivebeskyttet filsystem.
VERSIONER¶
C-bibliotek/kerne-forskelle¶
Omslagsfunktione for GNU C-biblioteket fchmodat() implementerer den POSIX-angivne grænseflade beskrevet på denne side. Denne grænseflade er forskellig fra det underliggende Linux-systemkald, der ikke har et flag-argument.
Glibc-noter¶
På ældre kerner hvor fchmodat() er utilgængelig, falder glibc-omslagsfunktionskaldene tilbage til at bruge chmod(). Når sti er et relativt stinavn konstruerer glibc et stinavn baseret på den symbolske henvisning i /proc/self/fd der svarer til dirfd-argumentet.
STANDARDER¶
POSIX.1-2024.
HISTORIK¶
- chmod()
- SVr4, POSIX.1-1988, 4.4BSD.
- fchmod()
- SVr4, 4.4BSD, SUSv1, POSIX.1-1996.
- fchmodat()
- POSIX.1-2008. Linux 2.6.16, glibc 2.4.
- AT_SYMLINK_NOFOLLOW
- POSIX.1-2008, glibc 2.32, Linux 6.5.
SE OGSŶ
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)
OVERSÆTTELSE¶
Oversættere af denne manual til dansk Joe Hansen <joedalton2@yahoo.dk>
Denne oversættelse er gratis dokumentation; læs GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR.
Hvis du støder på fejl i oversættelsen af denne vejledning, skal du sende en besked til debian-l10n-danish@lists.debian.org.
| 8. februar 2026 | Linux man-pages 6.17 |