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  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                                          15 września 2017 r.                                      CHMOD(2)