Provided by: manpages-pl-dev_4.13-4_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():
           Od glibc 2.24:
               _POSIX_C_SOURCE >= 199309L
           Glibc 2.19 do 2.23
               _POSIX_C_SOURCE
           Glibc 2.16 do 2.19:
               _BSD_SOURCE || _POSIX_C_SOURCE
           Glibc 2.12 do 2.16:
               _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
                   _POSIX_C_SOURCE >= 200809L
           Glibc 2.11 oraz wcześniejsze:
               _BSD_SOURCE || _XOPEN_SOURCE >= 500

       fchmodat():
           Od glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Przed glibc 2.10:
               _ATFILE_SOURCE

OPIS

       Wywołania  systemowe chmod() oraz fchmod() modyfikują bity trybu pliku. (Tryb pliku składa
       się z bitów uprawnień do pliku  plus  set-user-ID,  set-group-ID  oraz  sticky  bitu.)  Te
       wywołania systemowe różnią się tylko sposobem określenia pliku:

       * 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 odpowiednio
       ustawiane jest errno.

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)).

       EFAULT pathname wskazuje poza dostępną dla użytkownika przestrzeń adresową.

       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.

       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.

       Ogólne błędy fchmod() to:

       EBADF  Deskryptor pliku fd jest nieprawidłowy.

       EIO    Zobacz wyżej.

       EPERM  Zobacz wyżej.

       EROFS  Zobacz wyżej.

       Błędy,  które  mogą  wystąpić  w  chmod()  mogą również wystąpić w fchmodat(). Następujące
       dodatkowe błędy mogą wystąpić w fchmodat().

       EBADF  dirfd nie jest prawidłowym deskryptorem pliku.

       EINVAL Podano nieprawidłową opcję w flags.

       ENOTDIR
              pathname jest względna a dirfd jest deskryptorem  pliku  odnoszącym  się  do  pliku
              zamiast do katalogu.

       ENOTSUP
              flags określono na AT_SYMLINK_NOFOLLOW, który nie jest wspierany.

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.10  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⟩.