1 / 12

Защита на файловата система

Защита на файловата система. гл. ас. Моника Филипова ФМИ, Катедра Изчислителни системи. Съдържание. Класове потребители и права на достъп в UNIX и LINUX Код на защита Проверка на правата на процес Системни примитиви за защита. Матрица на достъпа. Класове потребители и права на достъп.

bing
Download Presentation

Защита на файловата система

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Защита на файловата система гл. ас. Моника ФилиповаФМИ, Катедра Изчислителни системи

  2. Съдържание • Класове потребители и права на достъп в UNIX и LINUX • Код на защита • Проверка на правата на процес • Системни примитиви за защита

  3. Матрица на достъпа

  4. Класове потребители и права на достъп Спрямо всеки определен файл потребителите се класифицират в следните класове: • администратор или привилегирован потребител(root) • собственик - потребител, чийто идентификатор е в полето uid на i-node • група - потребители, които не са собственик на файла, но принадлежат на групата в полето gid на i-node • други – потребители, които не са в първите класове • Администраторът има неограничен достъп до цялата файлова система. • За потребителите от останалите три класа се определят типовете разрешен достъп до файла чрез кода на защита на файла в i-node (12 битов низ в mode).

  5. Код на защита 04000 при изпълнение се изменя uid на процеса (set UID) 02000 при изпълнение се изменя gid на процеса (set GID) 01000 Sticky bit 00400 четене за собственика 00200 писане за собственика 00100 изпълнение за собственика 00040 четене за групата 00020 писане за групата 00010 изпълнение за групата 00004 четене за другите 00002 писане за другите 00001 изпълнение за другите

  6. Типове достъп за каталог • Право r - да четем съдържанието на каталога. • Право w - да създаваме или унищожаваме файлове в каталога. • Право x - търсене на файлове в каталога и позициониране в каталога. • Sticky bit осигурава допълнителна защита на файловете в каталога. Ако битът е вдигнат за каталог процес може да унищожи файл ако има право w за каталога и е едно от трите: • собственик на файла • собственик на каталога • принадлежи на привилегирования потребител (root)

  7. Типове достъп за обикновен файл - Право r - да отворим файла за четене, т.е. с флаг O_RDONLY или O_RDWR в open. - Право w - да отворим файла за писане, т.е. с флаг O_WRONLY или O_RDWR в open. - Право x е необходимо за да извикаме файл за изпълнение с примитив exec. Пример: open("/home/ivan/file1", O_RDWR); Трябва да имаме x за /, x за /home, x за /home/ivan, r и w за file1. mkdir("/home/ivan/dir", 0755); Трябва да имаме x за /, x за /home, x и w за ivan. unlink("/home/ivan/file1"); Трябва да имаме x за /, x за /home, x и w за ivan. chdir("/home/mary/prog"); Трябва да имаме x за всички каталози.

  8. Проверка на правата на процес 1. Ако процесът е с правата на root, достъпът се разрешава. 2. Ако процесът е с правата на собственика на файла, то: - ако в кода на защита на файла бита за съответния тип достъп за собственика е вдигнат, достъпът се разрешава - иначе не се разрешава. 3. Ако процесът е с правата на групата на файла, то: - ако в кода на защита на файла бита за съответния тип достъп за групата е вдигнат, достъпът се разрешава - иначе не се разрешава. 4. Ако в кода на защита на файла бита за съответния тип достъп за другите е вдигнат, достъпът се разрешава, иначе не се разрешава.

  9. Системни примитивиumask, chmod, fchmod #include <sys/types.h> #include <sys/stat.h> int umask(int cmask); Връща старото значение на маската. Действителният код на защита при създаване на файлове от процеса е: mode&~cmask. int chmod(const char *filename, mode_t mode); int fchmod(int fd, mode_t mode); Връщат 0 при успех, -1 при грешка.

  10. Пример. Създава файлове с различни маски. #include <sys/stat.h> #include <stdio.h> main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr,"usage: a.out file1 file2\n"); exit(1); } umask(0); if (creat(argv[1], 0664) < 0) { fprintf(stderr, "creat error for %s\n", argv[1]); exit(1); } umask(0066); if (creat(argv[2], 0664) < 0) { fprintf(stderr, "creat error for %s\n", argv[2]); exit(1); } exit(0); }

  11. Резултат от изпълнение на програмата $ umask 0022 $ a.out f1 f2 $ ls -l f1 f2 -rw-rw-r-- 1 moni staff 0 Apr 12 05:23 f1 -rw------- 1 moni staff 0 Apr 12 05:23 f2 $ umask 0022

  12. Системни примитиви chown, fchown, lchown #include <sys/types.h> int chown(const char *filename, uid_t owner,gid_t group); int fchown(int fd, uid_t owner, gid_t group); int lchown(const char *filename, uid_t owner, gid_t group); Връщат 0 при успех, -1 при грешка.

More Related