Provided by: manpages-pl-dev_4.21.0-2_all 

NAZWA
chmod, fchmod, fchmodat - zmiana praw do pliku
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode);
int fchmod(int fd, mode_t mode);
#include <fcntl.h> /* Definicja stałych AT_* */
#include <sys/stat.h>
int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):
fchmod():
Since glibc 2.24:
_POSIX_C_SOURCE >= 199309L
glibc 2.19 to glibc 2.23
_POSIX_C_SOURCE
glibc 2.16 to glibc 2.19:
_BSD_SOURCE || _POSIX_C_SOURCE
glibc 2.12 to glibc 2.16:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
|| _POSIX_C_SOURCE >= 200809L
glibc 2.11 and earlier:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
fchmodat():
Od glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Przed glibc 2.10:
_ATFILE_SOURCE
OPIS
The chmod() and fchmod() system calls change a file's mode bits. (The file mode consists of the file
permission bits plus the set-user-ID, set-group-ID, and sticky bits.) These system calls differ only in
how the file is specified:
• chmod() zmienia tryb określonego pliku, którego ścieżka jest podana w pathname, która jest rozwiązana,
jeśli jest to link symboliczny.
• fchmod() zmienia tryb pliku przypisanego do deskryptora otwartego pliku fd.
Tryb nowego pliku jest określony w mode, który jest maską bitową stworzoną przez ORing łącznie zero lub
więcej następujących:
S_ISUID (04000) set-user-ID (ustawia efektywny ID użytkownika procesu na execve(2))
S_ISGID (02000) set-group-ID (ustawia efektywny ID grupy na procesie na execve(2); obowiązkowe
blokowanie, jak opisano w fcntl(2); bierze grupę nowego pliku z katalogu nadrzędnego,
jak opisano w chown(2) i mkdir(2))
S_ISVTX (01000) bit sticky (flaga ograniczonego usuwania, jak opisano w unlink(2))
S_IRUSR (00400) odczyt przez właściciela
S_IWUSR (00200) zapis przez właściciela
S_IXUSR (00100) wykonanie/wyszukiwanie przez właściciela ("wyszukiwanie" dotyczy katalogów, oraz
oznacza możliwość wejścia do katalogu)
S_IRGRP (00040) odczyt przez grupę
S_IWGRP (00020) zapis przez grupę
S_IXGRP (00010) uruchomianie/przeszukiwanie przez grupę
S_IROTH (00004) odczyt przez pozostałych
S_IWOTH (00002) zapis przez pozostałych
S_IXOTH (00001) uruchomianie/przeszukiwanie przez pozostałych
Efektywny UID wywoływanego procesu musi zgadzać się z właścicielem pliku, lub proces musi być
uprzywilejowany (Linux: musi mieć funkcjonalność CAP_FOWNER
Jeśli wywołany proces nie jest uprzywilejowany (Linux: nie ma funkcjonalności CAP_FSETID), oraz grupa
pliku nie zgadza się z efektywnym ID grupy procesu lub jednej z jego dodatkowych ID grupy, S_ISGID
zostanie wyłączony, lecz nie spowoduje to zwrócenia błędu.
Jako wyznacznik bezpieczeństwa, zależnie od systemu plików, bity SUID i SGID mogą zostać wyłączone
podczas zapisywania pliku. (Na Linuxie, zdarza się to jeśli zapisujący proces nie ma funkcjonalności
CAP_FSETID.) Na niektórych systemach plików, tylko superużytkownik może ustawić bit "sticky", który może
mieć specjalne znaczenie. Znaczenie bitów "sticky", SUID i SGID dla katalogów opisano w inode(7).
Na systemach plików NFS, ograniczanie praw będzie miało natychmiastowy wpływ na aktualnie otwarte pliki,
gdyż kontrola dostępu dokonywana jest na serwerze, a otwarte pliki obsługiwane sa przez klienta.
Rozszerzenie uprawnień może zostać udostępnione z opóźnieniem innym klientom, jeśli mają włączone
buforowanie atrybutów.
fchmodat()
Wywołanie systemowe fchmodat() operuje w dokładnie taki sam sposób jak chmod(), z wyjątkiem różnic
opisanych tutaj.
Jeśli ścieżka podana w ścieżka jest względna, wtedy jest ona interpretowana względem katalogu
przypisanego przez deskryptor pliku dirfd (zamiast względem obecnego katalogu roboczego wywołanego
procesu, tak jak dzieje się to w przypadku chmod() dla względnych ścieżek.
Jeśli ścieżka jest względna, a dirdf ma szczególna wartość AT_FDCWD, wtedy ścieżka jest interpretowana
względnie do obecnego katalogu roboczego wywołanego procesu (jak w chmod()).
If ścieżka pathname jest bezwzględna, to dirfd jest ignorowane.
flags mogą być 0 lub zawierać następujące flagi:
AT_SYMLINK_NOFOLLOW
Jeśli pathname jest linkiem symbolicznym, nie rozwiązuje go: w zamian operuje na samym linku. Ta
flaga nie jest obecnie zaimplementowana.
Potrzeba fchmodat() jest wyjaśniona w openat(2)
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane jest errno wskazując
błąd.
BŁĘDY
W zależności od systemu plików, mogą wystąpić błędy nie wymienione poniżej.
Powszechniejsze błędy fchmod są następujące:
EACCES Brak praw do przeszukiwania dla składowej ścieżki. (Patrz także path_resolution(7)).
EBADF (fchmod()) The file descriptor fd is not valid.
EBADF (fchmodat()) pathname is relative but dirfd is neither AT_FDCWD nor a valid file descriptor.
EFAULT pathname wskazuje poza dostępną dla użytkownika przestrzeń adresową.
EINVAL (fchmodat()) Invalid flag specified in flags.
EIO Wystąpił błąd wejścia/wyjścia.
ELOOP Podczas rozwiązywania pathname napotkano zbyt wiele dowiązań symbolicznych.
ENAMETOOLONG
Ścieżka pathname jest zbyt długa.
ENOENT Plik nie istnieje.
ENOMEM Brak pamięci jądra.
ENOTDIR
Składnik ścieżki nie jest katalogiem.
ENOTDIR
(fchmodat()) pathname is relative and dirfd is a file descriptor referring to a file other than a
directory.
ENOTSUP
(fchmodat()) flags specified AT_SYMLINK_NOFOLLOW, which is not supported.
EPERM Efektywny UID nie odpoiwada właścicielowi pliku, a proces nie jest uprzywilejowany (Linux: nie ma
funkcjonalności CAP_FOWNER).
EPERM Plik jest oznaczony jako tylko do odczytu lub tylko do nadpisu. (Sprawdź również ioctl_iflags(2).)
EROFS Podany plik znajduje się na systemie plików przeznaczonym tylko do odczytu.
WERSJE
fchmodat() was added in Linux 2.6.16; library support was added in glibc 2.4.
STANDARDY
chmod(), fchmod(): 4.4BSD, SVr4, POSIX.1-2001i, POSIX.1-2008.
fchmodat(): POSIX.1-2008.
UWAGI
Różnice biblioteki C/jądra
Funkcja wrapper fchmodat() z biblioteki GNU C implementuje określony przez POSIX'a interfejs opisany na
tej stronie. Ten interfejs różni się od zaszytego w Linuxie wywołania systemowego, które nie ma argumentu
flags.
Uwagi dla glibc
Na starszych wersjach jądra Linuxa gdzie fchmodat() nie było dostępne, funkcja wrappera z glibc wraca do
używania chmod(). Kiedy pathname jest względną ścieżką, glibc konstruuje ścieżkę na bazie linku
symbolicznego w /proc/self/fd, który odpowiada argumentowi dirfd.
ZOBACZ TAKŻE
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl> i
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.03 5 lutego 2023 r. chmod(2)