table of contents
CHMOD(2) | Podręcznik programisty Linuksa | CHMOD(2) |
NAZWA¶
chmod, fchmod - zmiana praw do pliku
SKŁADNIA¶
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *path, mode_t
mode);
int fchmod(int fildes, mode_t mode);
OPIS¶
Zmienione zostają prawa dostępu do pliku określonego przez path lub wskazywanego przez filedes.
Prawa są podawane jako or następujących wartości:
- S_ISUID
- 04000 ustawia ID użytkowinka przy uruchomieniu
- S_ISGID
- 02000 ustawia ID grupy przy uruchomieniu
- S_ISVTX
- 01000 bit "sticky"
- S_IRUSR (S_IREAD)
- 00400 odczyt przez właściciela
- S_IWUSR (S_IWRITE)
- 00200 zapis przez właściciela
- S_IXUSR (S_IEXEC)
- 00100 uruchomianie/przeszukiwanie przez właściciela
- 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 procesu musi być zerem, lub odpowiadać właścicielowi pliku.
Jeśli efektywny UID procesu jest różny od zera, a grupa pliku różni się od efektywnego ID grupy procesu i nie jest też żadną z kego grup dodatkowych, to bit S_ISGID zostanie wyzerowany, ale nie spowoduje to wystąpienia błędu.
Zależnie od systemu plików, bity SUID i SGID mogą zostać wyłączone podczas zapisywania pliku. 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 stat(2).
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.
WARTOŚĆ ZWRACANA¶
Po pomyślnym zakończeniu, zwracane jest zero. W wypadku błędu zwracane jest -1 i odpowiednio ustawiane errno.
BŁĘDY¶
Dla niektórych systemów plików mogą być zwracane inne błędy niż opisane poniżej. Najogólniejsze błędy chmod to:
- EPERM
- Efektywny UID nie odpoiwada właścicielowi pliku i nie jest zerem.
- EROFS
- Podany plik znajduje się na systemie plików przeznaczonym tylko do odczytu.
- EFAULT
- path wskazuje poza dostępną dla użytkownika przestrzeń adresową.
- ENAMETOOLONG
- path jest zbyt długie.
- ENOENT
- Plik nie istnieje.
- ENOMEM
- Brak pamięci jądra.
- ENOTDIR
- Składnik ścieżki nie jest katalogiem.
- EACCES
- Brak praw do przeszukiwania dla składnika ścieżki.
- ELOOP
- Podczas rozwiązywania path napotkano zbyt wiele dowiązań symbolicznych.
- EIO
- Wystąpił błąd wejścia-wyjścia.
Ogólne błędy dla fchmod to:
ZGODNE Z¶
Funkcja chmod jest zgodna z SVr4, SVID, POSIX, X/OPEN, 4.4BSD. SVr4 dokumentuje błędy EINTR, ENOLINK i EMULTIHOP, lecz nie dokumentuje ENOMEM. POSIX.1 nie dokumentuje błędów EFAULT, ENOMEM, ELOOP i EIO, ani makr S_IREAD, S_IWRITE i S_IEXEC.
Funkcja fchmod jest zgodna z 4.4BSD i SVr4. SVr4 dokumentuje dodatkowe błędy EINTR i ENOLINK. POSIX wymaga funkcji fchmod, gdy zdefiniowane jest co najmniej jedno z _POSIX_MAPPED_FILES i _POSIX_SHARED_MEMORY_OBJECTS oraz dokumentuje dodatkowe błędy ENOSYS i EINVAL, ale nie dokumentuje EIO.
POSIX i X/OPEN nie dokumentują bitu "sticky".
ZOBACZ TAKŻE¶
1997-12-10 | Linux 2.0.32 |