Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект 58 страниц 2002.doc
Скачиваний:
91
Добавлен:
15.06.2014
Размер:
4.07 Mб
Скачать

Права доступа к файлу

В операционной системе UNIX существует три базовых класса доступа к файлу, в каждом из которых установлены права доступа к файлу. Эти классы следующие:

  1. класс владельца-пользователя;

  2. класс членов группы, являющейся владельцем файлов;

  3. класс остальных пользователей, кроме суперпользователя.

Поддерживается три типа прав доступа для каждого класса:

  • на чтение (r);

  • на запись (w);

  • на выполнение.(x).

При запуске команды lsl в первом столбце выводится 10 символов:

-r w x r - - r - -

права доступа для остальных пользователей;

права доступа для группы-владельца;

права доступа для владельца файла;

тип файла.

Типы файла:

d  каталог,

c  специальное символьное устройство;

p  поименованный FIFO файл;

-  обычный файл;

b  блоковое устройство.

Значения полей прав доступа:

-  нет доступа по данной категории;

r  на чтение;

w  на запись;

x  на выполнение.

Права доступа к файлу могут быть изменены только владельцем файла или суперпользователем.

Для этого используется команда:

chmod

u

+

r

File1

File2

g

-

w

o

=

x

a

Пример:

chmod a + w t.txt

chmod g + x - w r.out

Команда имеет следующие аргументы.

Первый символ  определение классов доступа:

u  владелец-пользователь;

g  владелец-группа;

o  остальные пользователи;

a  все классы пользователей.

Следующий символ  операция, которую следует произвести:

+  добавить права,

-  удалить права,

=  присвоить права.

Пример программы, определяющей права доступа:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open(const char * pathname,int flags, [mode_t mode]);

int create(const char * pathname, mode_t mode);

fildes=create(“/tmp/fil1”,0644);

fildes=open(“/tmp/fil1”,O_WRONLY|O_CREAT|O_TRUNC,0664);

int chmod(const char * pathname, mode_t newmode);

if(chmod(“/tmp/file1”,0644)= = -1)

{

printf(“Ошибка изменения прав доступа \n”);

}

newmode новый набор прав доступа.

В случае ошибки chmod возвращает -1.

Права на доступ к каталогам имеют специфические особенности. На пример, право чтения каталога позволяет получить лишь имена файлов, находящихся в данном каталоге. Для получения дополнительной информации, например выполняя команду lsl, требуется обращение к индексным дескрипторам файла, что требует наличия прав на выполнение для каталога. Право выполнения каталога требуется и для команды cd (изменение каталога). Права чтения и выполнения для каталогов действуют независимо, т.е. можно задать право на выполнение и запретить право на чтение для каталога. Комбинацией этих прав можно добиться создания “темных каталогов”, файлы которых доступны только в том случае, если пользователь знает заранее их имена, так как получение списка файлов в таких каталогах запрещено.

Особое внимание для каталогов имеет право на запись. Создание и удаление файлов в каталоге требует изменения его содержимого, и следовательно, должно быть установлено право на запись в такой каталог. При этом не учитываются права доступа для самого файла, то есть для удаления файла из каталога не требуется каких-либо прав доступа к файлу, нужно иметь лишь право на запись в каталог, в котором содержится файл.

Операционная система производит проверку прав доступа при создании, открытии для чтения или записи, запуске на выполнение или удалении файлов. При этом выполняются следующие проверки:

- если операция запрашивается суперпользователем, то доступ разрешается, и никакие дополнительные проверки не производятся. Это позволяет администратору иметь неограниченный доступ ко всей файловой системе.

- если операция запрашивается владельцем файла, то если требуемое право доступа определено, доступ разрешается. В противном случае доступ запрещается.

- если операция запрашивается пользователем, являющимся членом группы-владельца файла, то если требуемое право доступа определено, доступ разрешается, в противном случае  запрещается.

-если требуемое право доступа для прочих пользователей установлено, то доступ разрешается, в противном случае доступ запрещается.

Система проводит проверки в организации последовательности. К примеру, если пользователь является владельцем файла, то доступ определяется исключительно из прав доступа владельца. Права владельца группы не проверяются, даже если пользователь является членом владельца-группы.