- Права доступа к файлам Linux
- Понятие права доступа к файлу
- Расшифровка прав доступа
- Зависимость прав доступа
- Изменение прав доступа
- Явное указание на предоставление или лишение прав
- Примеры правильных команд:
- Цифровое представление прав
- Дискреционное разграничение доступа Linux
- Субъекты разграничения прав доступа: пользователи и псевдопользователи
- Владельцы и режим доступа к файлам
- Владельцы файлов
- Назначение владельцев файлов
- Смена владельцев файлов
Права доступа к файлам Linux
Поскольку Linux — система многопользовательская, вопрос об организации разграничения доступа к файлам и каталогам является одним из существенных вопросов, решаемых операционной системой.
Механизмы разграничения доступа, разработанные для системы UNIX в 70-х годах оказались настолько эффективными, что и по сей день успешно выполняют стоящие перед ними задачи.
Понятие права доступа к файлу
В основе механизмов разграничения прав доступа лежат имена пользователей и имена групп пользователей. В Linux каждый пользователь имеет уникальное имя, под которым он входит в систему (логируется). Кроме того, в системе создается некоторое число групп пользователей, причем каждый пользователь может быть включен в одну или несколько групп.
Создает и удаляет группы системный администратор (суперпользователь), он же может изменять состав участников той или иной группы. Члены разных групп могут иметь разные права по доступу к файлам Linux.
Права доступа подразделяются на три типа:
- чтение — r (сокращение от read);
- запись — w (сокращение от write);
- выполнение — x (сокращение от execute).
Эти типы прав доступа могут быть предоставлены трем классам пользователей: владельцу файла, группе, в которую входит владелец, и всем (прочим) пользователям. Владельца и группу файла в дальнейшем можно поменять с помощью команд chown и chgrp .
Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов — просматривать перечень имен файлов в каталоге (используя, например, команду ls ).
Разрешение на запись позволяет пользователю писать в файл и изменять его. Для каталогов это дает право создавать в каталоге новые файлы и каталоги, или удалять файлы в этом каталоге.
Разрешение на выполнение позволяет пользователю выполнять файлы (как бинарные программы, так и командные файлы). Разрешение на выполнение применительно к каталогам означает возможность выполнять команды, например, cd .
Расшифровка прав доступа
Рассмотрим пример, иллюстрирующий права доступа к файлам Linux. Для того, чтобы команда ls -l не выводила на экран длинный листинг, зададим ей в качестве дополнительного параметра имя конкретного файла:
$ ls -l /etc/wvdial.conf -rw-rw-r-- 1 root dialout 377 May 15 16:20 /etc/wvdial.conf
Третье поле в примере указывает на владельца файла ( root ), четвёртое поле указывает на группу, которая владеет этим файлом ( dialout ), последнее поле — имя файла ( file ).
Первое поле в представленном примере определяет тип файла и права доступа к нему. Это поле представлено цепочкой символов -rw-rw-r— , которые условно можно разделить на 4 группы.
Первая группа, состоящая из единственного символа, определяет тип файла. Этот символ может принимать следующие значения:
- — — обычный файл;
- d — каталог;
- b — файл блочного устройства;
- c — файл символьного устройства;
- s — доменное гнездо (socket);
- p — именованный канал (pipe);
- l — символическая ссылка (link).
Далее следуют 3 группы по 3 символа, определяющие права доступа к файлу соответственно для владельца файла, для группы пользователей, и для всех остальных пользователей системы. Замена любого из этих символов прочерком будет означать, что пользователь лишается соответствующего права. В нашем примере права доступа для владельца определены как rw- , что означает, что владелец ( root ) имеет право читать файл ( r ), производить запись в этот файл ( w ), но он не имеет права на выполнение, так как символ ( x ) заменен прочерком ( — ). Из этого же примера следует, что аналогичные права имеют члены группы dialout , остальные пользователи имеют право лишь на чтение файла ( r— ).
Исполняемый файл в Linux может и не иметь никакого расширения, так как все определяется установкой атрибута „исполняемый“, причем право на исполнение может быть предоставлено не всем.
Зависимость прав доступа
Предоставление прав доступа к файлу также зависит от прав доступа к каталогу, в котором находится файл. Например, если пользователь oleg хочет ограничить доступ ко всем своим файлам, он может установить права доступа к своему домашнему каталогу /home/oleg как drwx—— , а не устанавливать отдельные права доступа к каждому его файлу и подкаталогу.
Изменение прав доступа
Команда chmod используется для установки прав доступа к файлу (только собственник файла может изменять права доступа к этому файлу). Команду chmod можно использовать в 2-x вариантах.
Явное указание на предоставление или лишение прав
Синтаксис команды: chmod filenames.
Сначала после имени команды ставится один или несколько из следующих символов: a (сокращение от all), u (сокращение от use), g (сокращение от group), или o (сокращение от other). Затем точно определяется, добавляются ( + ) или убираются ( — ) права. Наконец, пишется один или несколько символов из следующего набора: r , w , x .
Примеры правильных команд:
Даёт всем пользователям право на чтение файла.
Аналогично предыдущему примеру. Если никакие из набора символов a , u , g или o не указаны, то это эквивалентно указанию символа a .
Лишает всех пользователей, кроме собственника, права на исполнение файла.
Разрешает собственнику читать, изменять и исполнять файл.
Запрещает читать, записывать и исполнять файл всем пользователям, кроме собственника файла и пользователей из группы.
Цифровое представление прав
Кодируем символ r цифрой 4 , символ w — 2 , символ x — 1 . Для предоставления пользователям какой-либо набора прав, надо сложить соответствующие цифры. Получив, таким образом, нужные цифровые значения для владельца файла, для группы файла и для всех остальных пользователей, задаем эти три цифры в качестве аргумента команды chmod (ставим эти цифры после имени команды перед вторым аргументом, который задает имя файла). Например, если надо дать все права владельцу (4+2+1=7), право на чтение и запись — группе (4+2=6), и не давать никаких прав остальным, то следует дать такую команду:
Дискреционное разграничение доступа Linux
В Linux, как и в любой многопользовательской системе, абсолютно естественным образом возникает задача разграничения доступа субъектов — пользователей к объектам — файлам дерева каталогов.
Один из подходов к разграничению доступа — так называемый дискреционный (от англ, discretion — чье-либо усмотрение) — предполагает назначение владельцев объектов, которые по собственному усмотрению определяют права доступа субъектов (других пользователей) к объектам (файлам), которыми владеют.
Дискреционные механизмы разграничения доступа используются для разграничения прав доступа процессов как обычных пользователей, так и для ограничения прав системных программ в (например, служб операционной системы), которые работают от лица псевдопользовательских учетных записей.
В примере из листинга ниже при помощи команды ps проиллюстрированы процессы операционной системы, выполняющиеся от лица разных учетных записей.
Субъекты разграничения прав доступа: пользователи и псевдопользователи
[email protected]:~$ ps axfu
USER PID %CPU МЕМ VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S Nov03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Nov03 0:03 \_ [ksoftirqd/0]
. . . . . . . . .
root 1 0.0 0.0 3672 2018 ? Ss Nov03 0:01 /sbin/init
syslog 999 0.0 0.0 31064 1528 ? Sl Nov03 0:02 rsyslogd -c5
messageb 1064 0.0 0.0 4244 2024 ? Ss Nov03 0:06 dbus-daemon —system
. . . . . . . . .
avahi 1154 0.0 0.0 3576 1748 ? S Nov03 0:00 avahi-daemon: running…
. . . . . . . . .
daemon 1218 0.0 0.0 2472 348 ? Ss. Nov03 0:00 atd
nobody 8077 0.0 0.0 6820 1088 ? S 09:36 0:01 \_ /usr/sbin/dnsmasq…
. . . . . . . . .
whoopsie 1279 0.0 0.0 26244 4548 ? Ssl Nov03 0:01 whoopsie
root 1847 0.0 0.0 5080 1384 ? Ss Nov03 0:00 /usr/lib/postfix/master
postfix 1852 0.0 0.0 4936 1188 ? S Nov03 0:00 \_ qmgr -l -t fifo -u
postfix 17763 0.0 0.0 4888 1204 ? S 14:34 0:00 \_ pickup -l -t fifo -u ,-c
. . . . . . . . .
root 1226 0.0 0.0 34040 7204 ? Ssl Nov03 0:00 lightdm
root 1274 1.5 0.2 81988 17512 tty7 Ss+ Nov03 14:41 \_ /usr/bin/Х :0 -auth …
root 1641 0.0 0.0 16644 3348 ? Sl Nov03 0:00 \_ lightdn -session-child 12 19
john 2000 0.0 0.1 52980 9448 ? Ssl Nov03 0:01 \_ gnome-session …
john 2048 0.0 0.0 4080 208 ? Ss Nov03 0:00 \_ /usr/bin/ssh-agent …
john 2132 1.2 1.0 392140 83672 ? Sl Nov03 11:40 \_ compiz
Владельцы и режим доступа к файлам
В рамках дискреционного разграничения доступа каждому файлу назначен пользователь-владелец и группа-владелец файла.
Владельцы файлов
[email protected]:~$ ls -la /etc/profile .profile
-rw-r-/-r— 1 root root 665 марта 8 2018 /etc/profile
-rw-r—r— 1 john john 677 марта 23 12:33 .profile
. . . . . . . . .
Доступ: (0644/-rw-r—r—) Uid: ( 1000/ john) Gid: ( 1000/ john)
Назначаются владельцы файлов при их создании — обычно пользователем — владельцем файла становится пользователь, создавший файл, а группой — владельцем файла становится его первичная группа.
Назначение владельцев файлов
uid=1000(fjohn) gid=1000(john) группы=1000(john),4(adm),20(dialout),…,110(admin)
-rw-rw-r— 1 john john 4 марта 27 23:26 README
Изменяются пользователь — владелец файлов только суперпользователем root при помощи команды chown, а группа-владелец — владельцем файла в при помощи команды chgrp, но только на ту, к которой он сам принадлежит.
Смена владельцев файлов
-rw-rw-r— 1 john john 4 марта 27 23:26 README
[email protected]:~$ chown mike README
chown: изменение владельца «README»: Операция не позволяется
uid=1000(john) gid=1000(john) группы=1000(john),4(adm),20(dialout),…,110(admin)
[email protected]:~$ chgrp admin README
-rw-rw-r— 1 john admin 4 марта 27 23:26 README
[email protected]:~$ chgrp daemon README
chgrp: изменение группы для «README»: Операция не позволяется
[email protected]:~$ sudo chown mike README
-rw-rw-r— 1 mike admin 4 марта 27 23:26 README
В примере из листинга «специальные файлы терминалов» из статьи специальные файлы устройств Linux стоит обратить внимание на владельцев специальных файлов устройств виртуальных терминалов — ими назначены пользователи, совершившие вход в систему.
Специальный файл устройства терминалов, на которых вход не осуществлен, принадлежит суперпользователю root, например как в случае с терминалом /dev/tty9.
Такие назначения естественным образом делаются при входе пользователей в систему и для того, чтобы они могли распоряжаться правами устройства терминала, через который осуществили вход