20 авг. 2000 г.

Азы linux (для детей) урок 9

Права доступа к файлам в Unix-подобных операционных системах (GNU/Linux)


Категории по отношению к файлам

GNU/Linux как истинная Unix-подобная операционная система является многопользовательской. Это значит, что в системе могут работать несколько (или множество) пользователей. Одновременно или по очереди — не важно. Каждый пользователь должен иметь собственное «файловое пространство», к которому доступ других пользователей может быть запрещен или ограничен. Конкретный пользователь по отношению к его собственным файлам выступает как их владелец (u - user).
С другой стороны, очевидно, что в любой системе есть программы и данные, которые должны быть доступны всем пользователям или только определенной группе пользователей. Поэтому у каждого файла есть еще и группа (g - group), к которой он принадлежит.
Файл может быть доступен абсолютно всем. Поэтому в его атрибутах должны содержаться значения, запрещающие или разрешающие доступ всем другим (o - other), кто не вошел в группу и не является владельцем.

Возможные действия над файлом

Что можно делать с файлом после его создания? В первую очередь просматривать, или читать (r - read).
Во вторую очередь, файл можно изменить (дописать, исправить, переименовать, переместить). Таким образом, мы можем говорить о возможности записи (w - write) в файл.
Если файл является программой, то его содержимое представляет собой команды для процессора, выполнение которых приводит к тому или иному желаемому (мы надеемся) эффекту. Другими словами, некоторые файлы можно исполнять (x - execution).

Указание прав доступа с помощью буквенной нотации

Поскольку имеется три категории, претендующие на доступ к файлу (владелец, группа и остальные), и три возможных действия над файлом (чтение, запись и исполнение), то получается, что в атрибутах файла должно быть девять записей о правах, указывающих на то, кто и что может делать с этим файлом. Первые три записи — это права владельца, вторые три записи — права группы, последняя тройка — права по отношению к файлу всех остальных.
r w x r w x r w x
Если значение какого-либо права отрицательно для определенной категории, то вместо буквы ставится тире. Например, в примере ниже, все могут читать файл, но никто не может исполнить, и только один владелец может изменять файл:
r w - r - - r - -
Права доступа к файлам (rwx)

Указание прав доступа с помощью числовой нотации

Выразить права доступа к файлу можно не только с помощью букв. Если принять, что положительное значение права (доступ есть) обозначать единицей, а отрицательное (доступа нет) — нулем, то можно получить примерно следующую картину для файла, описанного выше:
1 1 0 1 0 0 1 0 0
Именно с помощью нулей и единиц хранятся данные в памяти компьютера, в том числе и права доступа. Под права выделяются 9 бит в атрибутах файла, каждый бит хранит ноль или единицу.
Однако запись из девяти символов достаточно длинная. Чтобы ее сократить используют преобразование двоичных чисел в восьмеричные. Триады нулей и единиц двоичной системы как раз составляют значения от 0 до 7 в восьмеричной системе счисления.
Права доступа к файлам в ОС GNU/Linux (числовой способ записи)

Особенности доступа к каталогам

Каталог — это особый тип файла. Его содержание — это список других файлов.
Каталоги имеют те же «биты прав», что и остальные файлы. Однако то, что эти права означают может быть не таким простым для понимания.
Если каталог можно читать (r), то это означает, что разрешено только узнать список файлов, содержащихся в этом каталоге. Только список файлов, но не их свойства (размер, права доступа и др.).
Если каталог можно исполнять (x), то это означает, что в него можно заходить и просматривать содержимое файлов (доступ к которым разрешен для данной категории), узнавать свойства (атрибуты) файлов. Можно изменить содержимое файла (если его разрешено менять), но не имя файла.
Если каталог можно изменять (w), то это означает, что в нем можно изменять файлы, их имена, удалять их. Опасность! Это можно делать даже с файлами, доступ к которым запрещен для данной категории. Лечение! Вводят дополнительный t-бит. При его наличии пользователь может изменять только свои файлы.
Следует понимать, что ...
  • доступ к конкретному файлу также зависит от наличия доступа на исполнение к каталогам на протяжении всего пути;
  • изменять существующие файлы можно, не имея доступа на запись в каталог, достаточно иметь доступ на запись самого файла.

 

Изменение прав доступа к файлам. Команда chmod



Изменение прав доступа к файлам. Команда chmodКоманда chmod (change file mode — сменить режим файла) предназначена для смены/установки значений прав доступа к файлам в Unix-подобных операционных системах.
Синтаксис команды:
команда установка_значений имя_файла
Установка значений прав командой chmod может осуществляться двумя способами.
1.
В первом случае права устанавливаются с использованием трех групп символов.
В первой группе указывается, кому будет предоставляться или запрещаться доступ: владельцу (u), группе (g), другим (o) или всем (a). Можно указать как одну, так сразу несколько категорий.
Вторая группа всегда состоит из одного символа (-, + или =), который обозначает, что конкретно будет делаться со значениями прав (запрещаться, разрешаться или назначаться).
В третьей группе перечисляются права, значения которых подвергаются изменениям: чтение (r), запись (w), исполнение (x). Можно указывать сразу несколько прав.
Примеры использования команды chmod:
chmod g+w hello.c  (группе разрешается изменять файл)
chmod a-wx a.out  (всем запрещается изменять и выполнять файл)
chmod go=rw docu.odt  (группе и всем остальным устанавливаются разрешения на чтение и запись)
2.
Чаще используется второй способ использования команды chmod, когда предоставляемые права выражаются одной цифрой для каждой категории граждан. Цифры обозначают следующее:
7 — разрешено чтение, запись и исполнение
6 — разрешены только чтение и запись
5 — разрешены только чтение и исполнение
4 — разрешено только чтение
0 — ничего не разрешено
Почему используются именно такие цифры можно узнать здесь: числовой способ записи прав доступа к файлам в Linux.
Примеры использования команды chmod:
chmod 660 hello.c  (только владелец и группа могут читать и изменять файл)
chmod 555 a.out  (для всех категорий возможно только чтение и исполнение)
chmod 777 docu.odt  (для всех всё разрешено)

Подготовка к уроку

Под администратором системы сделать следующее:
  1. Создать двух новых пользователей, если в системе их недостаточно. Потребуется три пользователя. Например: sv, pupil7, test.
  2. Создать новую группу. Например: real.
    groupadd real
  3. Добавить двух пользователей в только что созданную группу.
    gpasswd -a sv real
    gpasswd -a pupil7 real
  4. Создать общедоступный разделяемый каталог в каталоге /home. Например lesson.
    mkdir /home/lesson
    chmod a+wt /home/lesson
  5. Перейти в каталог
    cd /home/lesson
  6. В каталоге /home/lesson/ создать файл hello.c
    vim hello.c

    Нажать клавишу Insert. И ввести программный код:
    #include <stdio.h>
    main()
    {
         printf("hello world!\n");
    }

    Нажать Esc. Затем комбинацию :wq (двоеточие и две буквы). Нажать Enter.
  7. Скомпилировать файл.
    gcc hello.c

    В результате в каталоге должен появиться исполняемый файл a.out
  8. Изменить пользователя и группу файлов.
    chown sv:real hello.c
    chown sv:real a.out

Инструкционная карта ученика

Примечание: данную инструкционную карту необходимо отредактировать в соответствие с пользователями в вашей системе.
  1. Перейдите в текстовый режим (терминал tty2). Войдите в систему под пользователем sv. Перейдите в каталог /home/lesson.
    cd /home/lesson
  2. Сделайте тоже самое для пользователей pupil7 и test (терминалы соответственно tty3 и tty4).
  3. Вернитесь к пользователю sv.
  4. sv. Просмотрите содержимое каталога:
    ls -l

    Опишите кто является владельцем файлов a.out и hello.c, какой группе они принадлежат.
    _____________________________________________________
    _____________________________________________________
  5. sv. Запретите «остальным» исполнять файл a.out:
    chmod o-x a.out
  6. pupil7. Выполните файл a.out:
    ./a.out
  7. test. Попытайтесь выполнить файл a.out также. Что произошло? Объясните разницу между пользователями test и pupil7 по отношению к данному файлу.
    Что произошло?_________________________________________
    Причина: ______________________________________________
  8. pupil7. Попытайтесь переименовать файл hello.c:
    mv hello.c hi.c

    Что произошло? ________________________________________
    Причина: ______________________________________________
  9. pupil7. Попытайтесь установить разрешение на изменение файла hello.c для группы:
    chmod g+w hello.c

    Что произошло? ________________________________________
  10. sv. Выполните предыдущую команду в роли данного пользователя. Почему пользователь sv может менять значения прав файла hello.c, а pupil7 — нет?
    _______________________________________________________
  11. pupil7. Переименуйте файл hello.c:
    mv hello.c hi.c
  12. test. Создайте файл:
    cat > filetest

    Напишите несколько строчек, затем нажмите Ctrl + C.
  13. test. Просмотрите каталог:
    ls -l

    Просмотрите файл:
    cat filetest
  14. test. Разрешите запись группе и запретите всё для «остальных»:
    chmod 660 filetest
  15. sv. Попытайтесь прочитать файл:
    cat filetest

    Почему отказано в доступе? ____