Файловые системы UNIX-подобных ОС на примере Linux. Изучение принципов организации файловой системы ОС UNIX на примере Linux

Страницы работы

Фрагмент текста работы

всех пользователей есть право читать файл, однако изменять его может только владелец – суперпользователь.

К файлу /etc/shadowнет никакого доступа у обычного пользователя, а у суперпользователя доступ только на чтение – в этом файле система хранит шифрованные пароли и время окончания срока действия учетных записей:

[donvito@vito temp]$ ls -l /etc/shadow

-r--------  1 root root 689 Авг  7 11:25 /etc/shadow

Утилита /usr/bin/passwd позволяет изменить пароль пользователя системы. Однако обычные пользователи могут сменить только свой пароль, суперпользователь может сменить любой пароль. Стоит отметить, что суперпользователь может именно сменить любой пароль, но никак не узнать существующий пароль.

SUID – дополнительный атрибут файлов, означает установить UID процесса при выполнении. Т.е. атрибут позволяет изменить права пользователя при запуске на выполнение файла, имеющего этот атрибут лишь на время выполнения и только в отношении этой программы. Именно благодаря этому атрибуту возможно изменить собственный пароль пользователя, не имея прав на запись файла /etc/passwd.

Запуск passwd от имени обычного пользователя:

[donvito@vito temp]$ passwd

Changing password for user donvito.

Changing password for donvito

(current) UNIX password:

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

Пароль изменен.

Попробуем сменить пароль любого другого пользователя:

[donvito@vito temp]$ passwd test

passwd: Only root can specify a user name.

Таким образом, утилита passwd , запускаемая от обычного пользователя, получает права суперпользователя на запись в файл /etc/passwd.

3.5. Изучить команды изменения прав доступа и владельца chmod, chown на примере специально созданного для этих целей каталога с файлами. Ознакомиться с флагом SUID. Экспериментально установить, как формируются итоговые права на использование файла, если права пользователя и группы, в которую он входит, различны.

chmod– позволяет изменить права доступа на файл/каталог.

Формат запуска: chmod <mode> <file>

Например, создадим новый каталог и уберем для всех право на исполнение (нет возможности сменить текущий каталог на change):

donvito@vito donvito]$ mkdir change

[donvito@vito donvito]$ ls -l ~

итого 84

-rw-r--r--  1 donvito donvito     3 Июл 31 01:57 1.c

drwxr-xr-x  2 donvito donvito  4096 Авг  7 11:39 change/

drwx------  3 donvito donvito  4096 Июл 31 01:51 Desktop/

drwxr-xr-x  2 donvito donvito  4096 Июл 31 02:20 Documents/

...

[donvito@vito donvito]$ chmod a-x change

[donvito@vito donvito]$ ls -l ~

итого 84

-rw-r--r--  1 donvito donvito     3 Июл 31 01:57 1.c

drw-r--r--  2 donvito donvito  4096 Авг  7 11:39 change/

drwx------  3 donvito donvito  4096 Июл 31 01:51 Desktop/

drwxr-xr-x  2 donvito donvito  4096 Июл 31 02:20 Documents/

...

[donvito@vito donvito]$ cd change

bash: cd: change: Permission denied

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

[donvito@vito donvito]$ chmod a+x change

[donvito@vito donvito]$ cd change

[donvito@vito change]$ cat >file

dsafasdgasdg

[donvito@vito change]$ ls -l

итого 4

-rw-r--r--  1 donvito donvito 24 Авг  7 11:43 file

Теперь сделаем права доступа владельца, отличными от прав группы владельца.

[donvito@vito change]$ chmod u-r file

[donvito@vito change]$ ls -l         итого 4

--w-r--r--  1 donvito donvito 24 Авг  7 11:43 file

[donvito@vito change]$ cat file

cat: file: Permission denied

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

[donvito@vito change]$ chmod 604 file

[donvito@vito change]$ ls -l

итого 4

-rw----r--  1 donvito donvito 24 Авг  7 11:43 file

[donvito@vito change]$ cat file

dsafasdgasdg

Здесь у пользователя есть право на чтение файла, а у группы нет.

Попробуем сменить владельца файла file:

[donvito@vito change]$ chown test:test file

chown: изменение владельца `file': Operation not permitted

Только суперпользователь может сменить владельца файла при помощи утилиты chown.

Также стоит отметить, что если у владельца файла нет каких-либо прав доступа к файлу, он всегда сможет их восстановить, т.к. он владелец. Кроме того, только владелец (и, конечно, суперпользователь) может изменить права доступа к файлу.

SUID – дополнительный атрибут файлов, означает установить UID процесса при выполнении. Т.е. атрибут позволяет изменить права пользователя при запуске на выполнение файла, имеющего этот атрибут лишь на время выполнения и только в отношении этой программы. Именно благодаря этому атрибуту возможно изменить собственный пароль пользователя, не имея прав на запись файла /etc/passwd.

3.6. Разработать программу-шлюз для доступа к данным другого пользователя при отсутствии прав на чтение информации (используя флаг SUID).

Пусть у пользователя donvito есть доступ к файлу /tmp/temp, а у пользователя test права на чтение этого файла нет. Тогда, установив атрибут SUID у программы-шлюза, получим доступ к «недоступным данным».

[donvito@vito donvito]$ cat > /tmp/temp

byDonVito

[donvito@vito donvito]$ chmod 660 /tmp/temp

[donvito@vito donvito]$ ls /tmp/temp

/tmp/temp

[donvito@vito donvito]$ ls -l /tmp/temp

-rw-rw----  1 donvito donvito 35 Авг  7 11:54 /tmp/temp

[donvito@vito donvito]$ su test

Password:

[test@vito donvito]$ cat /tmp/temp

cat: /tmp/temp: Permission denied

[test@vito donvito]$ exit

У пользователя test нет права на любую операцию с /tmp/temp.

Программа-шлюз gate.c

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

int main (void)

{

FILE *file_a;

char* buf[10];

//Getting UID and EUID of process

uid_t id = getuid();

uid_t eid = geteuid();

//Switching to effective rights with acsess

setuid( eid );

file_a = fopen( "/tmp/temp", "r+" );

//Switching back to real rights

setuid( id );

if( file_a != 0 )

{

fscanf( file_a, " %9s", &buf);

printf( "%s\n" , buf );

fclose( file_a );

}

else printf( "Can't acsess file /tmp/temp\n" );

return 0;

}

Откомпилируем и разрешим запуск gate_ex для всех:

[donvito@vito temp]$ gcc gate.c -o gate_ex

[donvito@vito temp]$ cp gate_ex /tmp/gate_ex

[donvito@vito temp]$ ls -l /tmp/gate_ex

-rwxr-xr-x  1 donvito donvito 11995 Авг  7 12:24 /tmp/gate_ex

Похожие материалы

Информация о работе