Права доступа к файлам в 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 - -
Указание прав доступа с помощью числовой нотации
Выразить права доступа к файлу можно не только с помощью букв. Если принять, что положительное значение права (доступ есть) обозначать единицей, а отрицательное (доступа нет) — нулем, то можно получить примерно следующую картину для файла, описанного выше:1 1 0 1 0 0 1 0 0
Именно с помощью нулей и единиц хранятся данные в памяти компьютера, в том числе и права доступа. Под права выделяются 9 бит в атрибутах файла, каждый бит хранит ноль или единицу.
Однако запись из девяти символов достаточно длинная. Чтобы ее сократить используют преобразование двоичных чисел в восьмеричные. Триады нулей и единиц двоичной системы как раз составляют значения от 0 до 7 в восьмеричной системе счисления.
Особенности доступа к каталогам
Каталог — это особый тип файла. Его содержание — это список других файлов.Каталоги имеют те же «биты прав», что и остальные файлы. Однако то, что эти права означают может быть не таким простым для понимания.
Если каталог можно читать (r), то это означает, что разрешено только узнать список файлов, содержащихся в этом каталоге. Только список файлов, но не их свойства (размер, права доступа и др.).
Если каталог можно исполнять (x), то это означает, что в него можно заходить и просматривать содержимое файлов (доступ к которым разрешен для данной категории), узнавать свойства (атрибуты) файлов. Можно изменить содержимое файла (если его разрешено менять), но не имя файла.
Если каталог можно изменять (w), то это означает, что в нем можно изменять файлы, их имена, удалять их. Опасность! Это можно делать даже с файлами, доступ к которым запрещен для данной категории. Лечение! Вводят дополнительный t-бит. При его наличии пользователь может изменять только свои файлы.
Следует понимать, что ...
- доступ к конкретному файлу также зависит от наличия доступа на исполнение к каталогам на протяжении всего пути;
- изменять существующие файлы можно, не имея доступа на запись в каталог, достаточно иметь доступ на запись самого файла.
Изменение прав доступа к файлам. Команда chmod
Команда chmod (change file mode — сменить режим файла) предназначена для смены/установки значений прав доступа к файлам в Unix-подобных операционных системах.
Синтаксис команды:
1.
В первом случае права устанавливаются с использованием трех групп символов.
В первой группе указывается, кому будет предоставляться или запрещаться доступ: владельцу (u), группе (g), другим (o) или всем (a). Можно указать как одну, так сразу несколько категорий.
Вторая группа всегда состоит из одного символа (-, + или =), который обозначает, что конкретно будет делаться со значениями прав (запрещаться, разрешаться или назначаться).
В третьей группе перечисляются права, значения которых подвергаются изменениям: чтение (r), запись (w), исполнение (x). Можно указывать сразу несколько прав.
Примеры использования команды chmod:
2.
Чаще используется второй способ использования команды chmod, когда предоставляемые права выражаются одной цифрой для каждой категории граждан. Цифры обозначают следующее:
7 — разрешено чтение, запись и исполнение
6 — разрешены только чтение и запись
5 — разрешены только чтение и исполнение
4 — разрешено только чтение
0 — ничего не разрешено
Почему используются именно такие цифры можно узнать здесь: числовой способ записи прав доступа к файлам в Linux.
Примеры использования команды chmod:
Синтаксис команды:
команда установка_значений имя_файла
Установка значений прав командой 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 (группе и всем остальным устанавливаются разрешения на чтение и запись)
Чаще используется второй способ использования команды chmod, когда предоставляемые права выражаются одной цифрой для каждой категории граждан. Цифры обозначают следующее:
7 — разрешено чтение, запись и исполнение
6 — разрешены только чтение и запись
5 — разрешены только чтение и исполнение
4 — разрешено только чтение
0 — ничего не разрешено
Почему используются именно такие цифры можно узнать здесь: числовой способ записи прав доступа к файлам в Linux.
Примеры использования команды chmod:
chmod 660 hello.c (только владелец и группа могут читать и изменять файл) chmod 555 a.out (для всех категорий возможно только чтение и исполнение) chmod 777 docu.odt (для всех всё разрешено)
Подготовка к уроку
Под администратором системы сделать следующее:- Создать двух новых пользователей, если в системе их недостаточно. Потребуется три пользователя. Например: sv, pupil7, test.
- Создать новую группу. Например: real.
groupadd real
- Добавить двух пользователей в только что созданную группу.
gpasswd -a sv real gpasswd -a pupil7 real
- Создать общедоступный разделяемый каталог в каталоге /home. Например lesson.
mkdir /home/lesson chmod a+wt /home/lesson
- Перейти в каталог
cd /home/lesson
- В каталоге /home/lesson/ создать файл hello.c
vim hello.c
Нажать клавишу Insert. И ввести программный код:
#include <stdio.h> main() { printf("hello world!\n"); }
Нажать Esc. Затем комбинацию :wq (двоеточие и две буквы). Нажать Enter. - Скомпилировать файл.
gcc hello.c
В результате в каталоге должен появиться исполняемый файл a.out - Изменить пользователя и группу файлов.
chown sv:real hello.c chown sv:real a.out
Инструкционная карта ученика
Примечание: данную инструкционную карту необходимо отредактировать в соответствие с пользователями в вашей системе.- Перейдите в текстовый режим (терминал tty2). Войдите в систему под пользователем sv. Перейдите в каталог /home/lesson.
cd /home/lesson
- Сделайте тоже самое для пользователей pupil7 и test (терминалы соответственно tty3 и tty4).
- Вернитесь к пользователю sv.
- sv. Просмотрите содержимое каталога:
ls -l
Опишите кто является владельцем файлов a.out и hello.c, какой группе они принадлежат.
_____________________________________________________
_____________________________________________________ - sv. Запретите «остальным» исполнять файл a.out:
chmod o-x a.out
- pupil7. Выполните файл a.out:
./a.out
- test. Попытайтесь выполнить файл a.out также. Что произошло?
Объясните разницу между пользователями test и pupil7 по отношению к
данному файлу.
Что произошло?_________________________________________
Причина: ______________________________________________ - pupil7. Попытайтесь переименовать файл hello.c:
mv hello.c hi.c
Что произошло? ________________________________________
Причина: ______________________________________________ - pupil7. Попытайтесь установить разрешение на изменение файла hello.c для группы:
chmod g+w hello.c
Что произошло? ________________________________________ - sv. Выполните предыдущую команду в роли данного пользователя. Почему
пользователь sv может менять значения прав файла hello.c, а pupil7 —
нет?
_______________________________________________________ - pupil7. Переименуйте файл hello.c:
mv hello.c hi.c
- test. Создайте файл:
cat > filetest
Напишите несколько строчек, затем нажмите Ctrl + C. - test. Просмотрите каталог:
ls -l
Просмотрите файл:
cat filetest
- test. Разрешите запись группе и запретите всё для «остальных»:
chmod 660 filetest
- sv. Попытайтесь прочитать файл:
cat filetest
Почему отказано в доступе? ____