plucky (2) chmod.2.gz

Provided by: manpages-pl-dev_4.25.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ż
              FS_IOC_SETFLAGS(2const)).

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