Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       chmod, fchmod, fchmodat - zmienia prawa 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():
           Od glibc 2.24:
               _POSIX_C_SOURCE >= 199309L
           glibc 2.19 do glibc 2.23
               _POSIX_C_SOURCE
           glibc 2.16 do glibc 2.19:
               _BSD_SOURCE || _POSIX_C_SOURCE
           glibc 2.12 do glibc 2.16:
               _BSD_SOURCE || _XOPEN_SOURCE >= 500
                   || _POSIX_C_SOURCE >= 200809L
           glibc 2.11 i 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  bitu  lepkości).  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ązywana, jeśli jest to dowiązanie symboliczne.

       •  fchmod() zmienia tryb pliku przypisanego do deskryptora otwartego pliku fd.

       Tryb nowego pliku jest określony w mode, który  jest  maską  bitową  stworzoną  jako  suma
       logiczna (OR) zera 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 lepkości (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ć przywilej (ang. capability) CAP_FOWNER).

       Jeśli wywołany proces nie jest uprzywilejowany (Linux: nie ma przywileju 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 Linuksie, zdarza się to  jeśli  zapisujący  proces
       nie  ma przywileju CAP_FSETID). Na niektórych systemach plików, tylko superużytkownik może
       ustawić bit lepkości, który może mieć specjalne znaczenie. Znaczenie bitów lepkości,  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   są   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ólną wartość AT_FDCWD,  wtedy  ścieżka  jest
       interpretowana  względnie  do  obecnego  katalogu  roboczego  wywołanego  procesu  (jak  w
       chmod()).

       Jeśli ścieżka pathname jest bezwzględna, to dirfd jest ignorowane.

       flags mogą być 0 lub zawierać następujące znaczniki:

       AT_SYMLINK_NOFOLLOW
              Jeśli pathname jest dowiązaniem symbolicznym, nie rozwiązuje go: w  zamian  operuje
              na samym dowiązaniu. Ten znacznik nie jest obecnie zaimplementowany.

       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
       errno, wskazując błąd.

BŁĘDY

       W zależności od systemu plików, mogą wystąpić błędy niewymienione poniżej.

       Powszechniejsze błędy fchmod są następujące:

       EACCES Brak praw do przeszukiwania dla składowej ścieżki (zob. także path_resolution(7)).

       EBADF  (fchmod())  Deskryptor pliku fd jest nieprawidłowy.

       EBADF  (fchmodat())  pathname jest względne, lecz dirfd nie wynosi ani AT_FDCWD,  ani  nie
              jest prawidłowym deskryptorem pliku.

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

       EINVAL (fchmodat())  Podano nieprawidłowy znacznik w 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ładowa ścieżki nie jest katalogiem.

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

       ENOTSUP
              (fchmodat())  flags określono na AT_SYMLINK_NOFOLLOW, który nie jest obsługiwany.

       EPERM  Efektywny UID nie odpowiada właścicielowi pliku, a proces nie jest  uprzywilejowany
              (Linux: nie ma przywileju CAP_FOWNER).

       EPERM  Plik  jest  oznaczony  jako  tylko  do  odczytu  lub tylko do nadpisu (zob. również
              ioctl_iflags(2)).

       EROFS  Podany plik znajduje się na systemie plików przeznaczonym tylko do odczytu.

WERSJE

   Różnice biblioteki C/jądra
       Funkcja opakowująca fchmodat() z biblioteki GNU C implementuje określony w POSIX interfejs
       opisany  na  tej  stronie.  Ten  interfejs  różni  się  od  zaszytego w Linuksie 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 opakowująca
       z  glibc wraca do używania chmod(). Kiedy pathname jest względną ścieżką, glibc konstruuje
       ścieżkę na bazie dowiązania symbolicznego w  /proc/self/fd,  który  odpowiada  argumentowi
       dirfd.

STANDARDY

       POSIX.1-2008.

HISTORIA

       chmod()
       fchmod()
              4.4BSD, SVr4, POSIX.1-2001.

       fchmodat()
              POSIX.1-2008.  Linux 2.6.16, glibc 2.4.

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>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i  Michał  Kułach
       <michal.kulach@gmail.com>

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