Provided by: manpages-pl-dev_4.15.0-9_all bug

NAZWA

       chmod, fchmod, fchmodat - zmiana praw do pliku

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 2.23
               _POSIX_C_SOURCE
           Glibc 2.16 to 2.19:
               _BSD_SOURCE || _POSIX_C_SOURCE
           Glibc 2.12 to 2.16:
               _BSD_SOURCE || _XOPEN_SOURCE >= 500
                   || _POSIX_C_SOURCE >= 200809L
           Glibc 2.11 and earlier:
               _BSD_SOURCE || _XOPEN_SOURCE >= 500

       fchmodat():
           Since glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Before 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

       On  success, zero is returned.  On error, -1 is returned, and errno is set to indicate the
       error.

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()  został dodany do jądra Linuxa w wersji 2.6.16; wsparcie dla biblioteki zostało
       dodane do glibc w wersji 2.4.

ZGODNE Z

       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)

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  5.13  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.