chmod, fchmod, fchmodat
zmienia prawa do pliku
- Provided by: manpages-pl-dev (Version: 1:4.29.1-1)
- Source: manpages-l10n
- Report a bug
zmienia prawa do pliku
Standardowa biblioteka C (libc, -lc)
#include <sys/stat.h>
int chmod(const char *path, 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 *path, mode_t mode, int flags);
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
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:
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:
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.
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 path 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 path jest względna a dirfd ma wartość specjalną AT_FDCWD, to path jest interpretowana w odniesieniu do bieżącego katalogu roboczego procesu wywołującego (jak chmod()).
Jeśli ścieżka path jest bezwzględna, to dirfd jest ignorowane.
flags mogą być 0 lub zawierać następujące znaczniki:
Potrzeba fchmodat() jest wyjaśniona w openat(2)
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując błąd.
W zależności od systemu plików, mogą wystąpić błędy niewymienione poniżej.
Powszechniejsze błędy fchmod są następujące:
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.
Na starszych wersjach jądra Linuxa gdzie fchmodat() nie było dostępne, funkcja opakowująca z glibc wraca do używania chmod(). Kiedy path jest względną ścieżką, glibc konstruuje ścieżkę na bazie dowiązania symbolicznego w /proc/self/fd, który odpowiada argumentowi dirfd.
POSIX.1-2024.
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)
Tłumaczenie niniejszej strony podręcznika: 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.