Man page - chmod(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru de

Manual

chmod

NAZWA
BIBLIOTEKA
SKŁADNIA
OPIS
fchmodat()
WARTOŚĆ ZWRACANA
BŁĘDY
WERSJE
Różnice biblioteki C/jądra
Uwagi dla glibc
STANDARDY
HISTORIA
ZOBACZ TAKŻE
TŁUMACZENIE

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

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 .