Права доступа

Права доступа

Как уже обсуждалось в предыдущей главе, каждый процесс имеет четыре пользовательских идентификатора — UID, GID, EUID и EGID. В то время как UID и GID определяют реального владельца процесса, EUID и EGID определяют права доступа процесса к файлам в процессе выполнения. В общем случае реальные и эффективные идентификаторы эквивалентны. Это значит, что процесс имеет те же привилегии, что и пользователь, запустивший его. Однако, как уже обсуждалось выше, возникают ситуации, когда процесс должен получить дополнительные привилегии, чаще всего — привилегии суперпользователя. Это достигается установкой битов SUID и SGID. Примером такого процесса может служить утилита passwd(1), изменяющая пароль пользователя.

Права доступа к файлу могут быть изменены с помощью системных вызовов chmod(2) и fchmod(2):

#include <sys/types.h>

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);

int fchmod(int fildes, mode_t mode);

Значение аргумента mode определяет устанавливаемые права доступа и дополнительные атрибуты (такие как SUID, SGID и Sticky bit), и создается путем логического объединения различных флагов, представленных в табл. 2.14. Вторая колонка таблицы содержит восьмеричные значения для девяти битов прав доступа (чтение, запись и выполнение для трех классов доступа) и трех битов дополнительных атрибутов.

Таблица 2.14. Флаги аргумента mode

Флаг Биты Значение
S_ISUID 04000 Установить бит SUID
S_ISGID 020#0 Установить бит SGID, если # равно 7, 5, 3 или 1. Установить обязательное блокирование файла, если # равно 6, 4, 2 или 0
S_ISVTX 01000 Установить Sticky bit
S_IRWXU 00700 Установить право на чтение, запись и выполнение для владельца-пользователя
S_IRUSR 00400 Установить право на чтение для владельца-пользователя
S_IWUSR 00200 Установить право на запись для владельца-пользователя
S_IXUSR 00100 Установить право на выполнение для владельца-пользователя
S_IRWXG 00070 Установить право на чтение, запись и выполнение для владельца-группы
S_IRGRP 00040 Установить право на чтение для владельца-группы
S_IWGRP 00020 Установить право на запись для владельца-группы
S_IXGRP 00010 Установить право на выполнение для владельца-группы
S_IRWXO 00007 Установить право на чтение, запись и выполнение для остальных пользователей
S_IROTH 00004 Установить право на чтение для остальных пользователей
S_IWOTH 00002 Установить право на запись для остальных пользователей
S_IXOTH 00001 Установить право на выполнение для остальных пользователей

Некоторые флаги, представленные в таблице, уже являются объединением нескольких флагов. Так, например, флаг S_RWXU эквивалентен S_IRUSR | S_IWUSR | S_IXUSR. Значение флага S_ISGID зависит от того, установлено или нет право на выполнение для группы (S_IXGRP). В первом случае, он будет означать установку SGID, а во втором — обязательное блокирование файла.

Для иллюстрации приведем небольшую программу, создающую файл с полными правами доступа для владельца, а затем изменяющую их. После каждой установки прав доступа в программе вызывается библиотечная функция system(3S), позволяющая запустить утилиту ls(1) и отобразить изменение прав доступа и дополнительных атрибутов.

#include <sys/types.h>

#include <sys/stat.h>

#include <stdlib.h>

main() {

 int fd;

 /* Создадим файл с правами rwx------ */

 fd = creat("my_file", S_IRUSR | S_IWUSR | S_IXUSR);

 system("ls -l my_file");

 /*Добавим флаг SUID */

 fchmod(fd, S_IRWXU | S_ISUID);

 /* Установим блокирование записей файла */

 fchmod(fd, S_IRWXU | S_ISUID | S_ISGID);

 system("ls -l my_file");

 /* Теперь установим флаг SGID */

 fchmod(fd, S_IRWXU | S_ISUID | S_ISGID | S_IXGRP);

 system("ls -l my_file");

}

В результате запуска программы на выполнение, получим следующий вывод:

$ a.out

-rwx------ 1 andy user 0 Jan 6 19:28 my_file

-rws------ 1 andy user 0 Jan 6 19:28 my_file

-rws--1--- 1 andy user 0 Jan 6 19:28 my_file

-rws--s--- 1 andy user 0 Jan 6 19:28 my_file

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

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

Из книги автора

11.1.1. Права доступа к файлу Каждый из этих трех разрядов доступа представляет права для разных классов пользователей. Первый разряд — это права владельца файла, второй — права пользователей, входящих в группу, к которой относится файл, а последний разряд представляет


Права доступа к объектам

Из книги автора

Права доступа к объектам К каждому объекту AS/400 может быть предоставлено восемь видов доступа, а именно:•право на оперирование объектом разрешает просматривать описание объекта и использовать объект соответственно имеющимся у пользователя правам[ 57 ];право на


Права доступа

Из книги автора

Права доступа Как уже обсуждалось в предыдущей главе, каждый процесс имеет четыре пользовательских идентификатора — UID, GID, EUID и EGID. В то время как UID и GID определяют реального владельца процесса, EUID и EGID определяют права доступа процесса к файлам в процессе выполнения. В


4.1. Права доступа

Из книги автора

4.1. Права доступа Давайте вспомним команду ls -al. Она возвращает список файлов в следующем виде:drwx------ 3 Flenov FlenovG 4096 Nov 26 16:10 .drwxr-xr-x 5 root   root    4096 Nov 26 16:21 ..-rwxr-xr-- 1 Flenov FlenovG   24 Nov 26 16:10 testКак мы уже знаем, первая колонка (занимает 10 символов) — это права доступа. Давайте рассмотрим,


4.1.5. Права доступа к ссылкам

Из книги автора

4.1.5. Права доступа к ссылкам В разд. 3.1.3 мы рассматривали жесткие и символьные ссылки на файлы. Для начала вспомним права на жесткие ссылки:913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 1.txt913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 link.txtКак видите, права абсолютно идентичны. Я надеюсь, что вы другого и не ожидали,


7.3. Права доступа

Из книги автора

7.3. Права доступа В данном разделе нам предстоит познакомиться с основными параметрами файла конфигурации /etc/httpd/conf/httpd.conf. Они отвечают за права доступа, относящиеся к директориям, и имеют следующий вид:<Directory /var/www/html> Order allow,deny Allow from all</Directory>или, например:<Location


8.4.3. Права доступа

Из книги автора

8.4.3. Права доступа Ни один сервис в ОС не должен работать от имени администратора root. Если в коде программы будет найдена лазейка, позволяющая запускать команды, то можно считать систему потерянной, потому что директивы будут выполняться с правами root. Опытные пользователи


9.4. Права доступа к squid

Из книги автора

9.4. Права доступа к squid Это самая больная тема для любого администратора. Да, и в squid тоже есть права доступа, и они также описываются в конфигурационном файле /etc/squid/squid.conf. Но мы рассматриваем права отдельно, потому что основной упор делаем на безопасность. Именно поэтому


Владелец файла и права доступа

Из книги автора

Владелец файла и права доступа Средства защиты Linux базируются на понятиях принадлежности файла определенному владельцу и правах доступа к нему, принятых в системе UNIX. Однако SMB/CIFS использует те же признаки несколько по-другому. Средства SMB/CIFS регистрируют пользователей,


4.5. Права доступа к файлам и каталогам

Из книги автора

4.5. Права доступа к файлам и каталогам Поскольку Linux - система многопользовательская, вопрос об организации разграничения доступа к файлам и каталогам является одним из существенных вопросов, которые должна решать операционная система. Механизмы разграничения доступа,


4.12. Права доступа

Из книги автора

4.12. Права доступа Для каждого файла и каталога в ОС Linux задаются права доступа. Права доступа определяют, кто имеет доступ к объекту и какие операции над объектом он может выполнять. Под объектом следует понимать файл или каталог. Выполнять можно три основных операции:


15.2 Права доступа в Linux

Из книги автора

15.2 Права доступа в Linux Любой файл и каталог в Linux имеет пользователя-владельца и группу-владельца. То есть любой файл и каталог принадлежит какому-то пользователю системы и какой-то группе. Кроме того, у любого файла и каталога есть три группы прав доступа: одна для


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

Из книги автора

1.3. Права доступа к файлам Давайте создадим файл, используя команду touch:$ touch myfileТеперь выполним команду ls -1:$ ls -1 myfile-rw?r--r-- 1 dave admin 0 Feb 19 22:05 myfileМы получили пустой файл, и, как и ожидалось, первый символ в строке режима свидетельствует о том, что это обычный файл. В результате