всех пользователей есть право читать файл, однако изменять его может только владелец – суперпользователь.
К файлу /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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.