Provided by: manpages-pl-dev_4.26.0-1_all 

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 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 man-pages 6.9.1 13 czerwca 2024 r. chmod(2)