Изучение принципов организации файловой системы ОС UNIX на примере QNX, страница 6

$ passwd

changing password for gr40812_9

Current Password:

New password:

Retype new password:

$ passwd

changing password for gr40812_9

Current Password:

Sorry!

$ passwd root

passwd: sorry, only root may change another user's password

$ passwd gr4081/1

passwd: sorry, only root may change another user's password

Суперпользователь может назначать пароль любому пользователю, при этом знания старого пароля не требуется.

# passwd mary

changing password for mary

New password:

Retype new password:

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

Информация о флаге SUID будет приведена в п.3.7.

$ ls

for_mode.txt       myfile

$ ls -l

total 1

-rw--w-r--  1 mary      100               7 Dec 08 21:47 for_mode.txt

-rw-rw-r--  1 mary      100               0 Dec 09 04:49 myfile

Лишим пользователя права на чтение.

$ chmod u-r myfile

$ ls -l

total 1

-rw--w-r--  1 mary      100               7 Dec 08 21:47 for_mode.txt

--w-rw-r--  1 mary      100               0 Dec 09 04:49 myfile

Добавим пользователю, группе и остальным право на запись.

$ chmod g+x,u+r,o+w myfile

$ ls -l

total 1

-rw--w-r--  1 mary      100               7 Dec 08 21:47 for_mode.txt

-rw-rwxrw-  1 mary      100               0 Dec 09 04:49 myfile

Установим для группы права: право на чтение.

$ chmod g=r myfile

$ ls -l

total 1

-rw--w-r--  1 mary      100               7 Dec 08 21:47 for_mode.txt

-rw-r--rw-  1 mary      100               0 Dec 09 04:49 myfile

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

Атрибут (флаг) SUID позволяет изменить права пользователя при запуске на выполнение файла с установленным SUID. При этом привилегии будут изменены (обычно расширены) лишь на время выполнения и только в отношении этой программы.

Обычно запускаемая программа получает права доступа к системным ресурсам на основе прав доступа пользователя, запустившего программу. Установка флага SUID  изменяет это правило, назначая права доступа исходя из прав доступа владельца файла.

Ниже приведен текст программы-шлюза, позволяющей увидеть содержимое файла.

#include <stdio.h>

main (int argc, char *argv[])

{

      FILE *file_stream;

      int end_f, for_close;

      char  buf;

      if (argc>1)

      {

            file_stream=fopen(argv[1],"r");

            if (file_stream==NULL)

                  printf ("Can't open file %s.\n", argv[1]);

            else

            {

                  printf ("File %s is opened.\n", argv[1]);

                  while(1)

                  {

                        end_f=fscanf(file_stream, "%c", &buf);

                        if (end_f!=EOF)

                             printf ("%c", buf);

                        else

                             break;

                  }

                  for_close=fclose(file_stream);

                  if (for_close!=0)

                        printf ("Can't close file %s.\n", argv[1]);

                  else

                        printf ("\nFile %s closed.\n", argv[1]);