Права доступа к файлам в GNU/Linux #
Васильев Андрей Михайлович, 2022
Версии презентации
Истоки требований UNIX #
Первоначально UNIX разрабатывался для больших мейнфремов:
- Большой и мощный вычислитель располагался в выделенном здании
- Пользователи получали доступ к нему с помощью небольших клиентов — терминалов
Необходимо было обеспечить, чтобы большое количество пользователей одновременно могли выполнять свои задачи
Истоки DOS #
DOS разрабатывался как ОС для использования на персональном компьютере, для которого не нужны сложности, связанные с поддержкой работы нескольких пользователей одновременно, да и центральный процессор был упрощён
Многозадачная многопользовательская ОС #
Многопользовательская ОС #
Позволяет запускать процессы нескольким пользователям одновременно
- Локальный пользователь с графическим интерфейсом
- Удалённые пользователи с текстовым интерфейсом
- Системные пользователи для работы служб
Многозадачная ОС #
ОС позволяет выполнять или эмитировать выполнение нескольких задач одновременно с помощью одного процессора
- Достигается за счёт переключения процессора между активными задачами, быстрее чем человек может воспринять
- У задач может быть приоритет в зависимости от которого происходит выбор очередной задачи для исполнения
- Переключение контекста между задачами де-факто снижает эффективность работы вычислительной системы
Требования к многопользовательской ОС #
В многопользовательской среде необходимо решить следующие задачи
- Каждый пользователь должен управлять своими данными, другие пользователи по умолчанию не должны иметь возможность их изменять
- Данные пользователя в оперативной памяти также должны быть защищены от стороннего наблюдателя
- Обычный пользователь не должен иметь возможности влиять на настройку системы, т.к. это может повредить другим пользователям этой системы
- Пользователи должны иметь возможность работать над общими данными
- В современном мире добавляется задача по защите данных в оперативной памяти от других процессов
Сфера разграничения прав #
Требования необходимо обеспечить для:
- Файлов на файловой системе
- Данных процессов в оперативной памяти
Проверка прав доступа обычного пользователя #
Проверка возможности чтения данных из файла
$ file /etc/shadow
/etc/shadow: regular file, no read permission
$ file /etc/passwd
/etc/passwd: ASCII textПроверка возможности изменения содержимого файла
$ touch /etc/shadow
touch: невозможно выполнить touch для '/etc/shadow': Отказано в доступе
$ touch /tmp/dataМодель безопасности файлов #
В UNIX-мире для формирования модели безопасности используются
- User ID, уникальный идентификатор пользователя
- Group ID, уникальный идентификатор группы
Пользователь #
- Каждому пользователю обязательно назначается его уникальный идентификатор, который не может быть передан другим пользователям
- Каждому пользователю обязательно назначается «группа по умолчанию»
- Пользователь также может входить в произвольное количество групп
Файл на жёстком диске #
- Файл принадлежит конкретному пользователю, его уникальному идентификатору
- Файл относится к конкретной группе, её уникальному идентификатору
Процессы #
- Каждый процесс, запущенный в рамках GNU/Linux, запускается от имени конкретного пользователя
- Процесс обладает теми же возможностями, что и обычный пользователь
- Де-факто человек всегда запускает новые процессы, чтобы реализовать возможности компьютерного пользователя, с правами конкретной учётной записи (account)
- Процесс может взаимодействовать только с теми файлами, для которых есть доступ у соответствующего пользователя
Права текущего пользователя #
Для определения прав пользователя можно использовать приложение id
$ id --help
Использование: id [КЛЮЧ]… [ПОЛЬЗОВАТЕЛЬ]
Выводит информацию о пользователе и группе для заданного
ПОЛЬЗОВАТЕЛЯ, или о текущем пользователе (если ничего не указано).$ id
uid=1001(andrey) gid=1001(andrey) группы=1001(andrey),27(sudo)uid— уникальный идентификатор текущего пользователя и назначенное ему имяgid— уникальный идентификатор основной группы пользователя и её имяgroups— список дополнительных групп, которым принадлежит пользователь
Информация о пользователях #
Система получает информацию о пользователях через подсистемы NSS (Name Service Switch) и PAM (Pluggable Authencitation Modules). Первый описывает источники данных для имён (пользователей, групп, доменных имён и т.д.), а второй предоставляет инфраструктуру для авторизации пользователей
Настройка источников данных для NSS находится в файле /etc/nsswitch.conf
Информация о пользователях для локальной установки содержится в файлах
/etc/passwdсодержит описание локальных пользователей/etc/groupсодержит список групп и входящих в них пользователей/etc/shadowсодержит пароли локальных пользователей
Для наполнения информационных баз могут быть использованы сетевые службы, например LDAP (Lightweight Directory Access Protocol), NIS (Network Information Services) или AD (Active Directory)
Права доступа к файлам #
Создадим файл и проверим права доступа
$ touch test
$ ls -l test
-rw-r--r-- 1 andrey andrey 0 окт 5 14:55 test- первый столбец описывает атрибуты файла
- второй столбец — количество физических ссылок
- третий столбец — владелец файла
- четвёртый столбец — группа файла
Атрибуты файлов #
- первый элемент описывает тип файлов
- далее группами по 3 символа описываются права доступа к файлу
Типы файлов #
-— обыкновенный файлb— специальный файл блочного устройства, например жёсткого дискаc— специальный файл символьного устройства, например клавиатуры или терминалаd— каталогl— символическая ссылка, не имеет собственных прав доступаn— сетевой файлp— файл FIFO для организации взаимодействия потоковs— файл socket для организации псевдосетевого взаимодействия
Права доступа #
Последняя часть атрибутов описывает права доступа
Права для файлов #
rпозволяет читать содержимое файловwпозволяет переписывать содержимое файлов, но не позволяет их удалять или переименовыватьxпозволяет выполнять запуск файла, скриптовые файлы должны быть также доступны на чтение
Права для каталогов #
rпросматривать содержимое каталогов, если ещё установлен флагxwпозволяет создавать, удалять, переименовывать файлы в каталоге, если ещё установлен флагxxпозволяет пользователю заходить внутрь каталога
Порядок прав #
Права записываются в порядке: владелец-группа-остальные
-rw-r--r--rw-, владелец может читать и записывать в файлr--, группа может считывать из файлаr--, все остальные могут считывать из файла
-rwx------rwx, владелец может выполнять любые операции---, все остальные, включая группу не могут ничего делать с файлом
lrwxrwxrwx— файл является ссылкой, которую могут прочитать все, но работа с файлом будет происходит по его эффективным разрешениям
Вычисление конкретных прав #
- Если UID у пользователя и файла совпадают, тогда применяются права владельца
- Если пользователь принадлежит к группе, к которой принадлежит и файл, то применяются права группы
- Если ничего выше не сработало, то применяются права для остальных
Изменение прав доступа #
- Для изменения прав доступа к файлу или каталогу применяется приложение
chmod - Изменить права на файл может только его владелец
- Для описания прав можно воспользоваться цифровой или буквенной нотацией
Использование цифровой нотации #
| Восьмеричное | Бинарное | Режим |
|---|---|---|
| 0 | 000 | — |
| 1 | 001 | –x |
| 2 | 010 | -w- |
| 3 | 011 | -wx |
| 4 | 100 | r– |
| 5 | 101 | r-x |
| 6 | 110 | rw- |
| 7 | 111 | rwx |
Применение восьмеричных чисел #
С помощью трёх восьмеричных чисел можно описать права для владельца, группы и остальных
$ > test
$ ls -l test
-rw-r--r-- 1 andrey andrey 0 окт 5 15:46 test
$ chmod 600 test
$ ls -l test
-rw------- 1 andrey andrey 0 окт 5 15:46 testС помощью одной команды мы забрали права у группы и остальных, а также удостоверились, что владелец может читать и записывать в файл
Наиболее часто используемые цифры: 7, 6, 5, 4 и 0
Буквенная нотация #
При описании буквенной нотации надо придерживаться следующего формата:
[ugoa...][[-+=][perms...]...- На первом месте указывается для кого надо применить права. Если не указать, то применяется для всех
- Затем указывается что мы хотим сделать с правами
-убрать права+выдать права=установить права
- В конце указывается список разрешений
- Можно указать несколько изменений через запятую
Изменение прав с буквенной нотацией #
$ > words
$ ls -l words
-rw-r--r-- 1 andrey andrey 0 окт 5 16:03 words
$ chmod u+x words
$ ls -l words
-rwxr--r-- 1 andrey andrey 0 окт 5 16:03 words
$ chmod go-r words
$ ls -l words
-rwx------ 1 andrey andrey 0 окт 5 16:03 words- Числовая нотация обычно короче
- Числовая нотация непонятна «неинициированным»
- Буквенная нотация позволяет изменять только лишь нужные части прав доступа, не изменяя остальные
Права файлов по умолчанию #
Пользователь и владелец #
Создаваемому файлу присваивается UID пользователя, от имени которого была создан данный файл
Группой создаваемого файла становится GID группы пользователя по умолчанию
Права по умолчанию #
Права файла зависят от режима, который контролируется с помощью umask
$ help umask
umask: umask [-p] [-S] [режим]
Отображение или указание маски режима для файлов.Режим описывается с помощью четырёх восьмибитных цифр
Формат режима umask
#
- Первая цифра описывает специальные права
- Вторая по четвёртую цифру описывает права для владельца, группы и остальных
$ umask
0022
$ > test
$ ls -l test
-rw-r--r-- 1 andrey andrey 0 окт 5 16:24 test
$ umask 0002
$ > test-two
$ ls -l test-two
-rw-rw-r-- 1 andrey andrey 0 окт 5 16:24 test-twoРежим де-факто описывает битовую маску, которая указывает какие биты следует отбросить из режимов
- Для файла базовым режимом является
666 - Для каталогов базовым режимом является
777
Создание нового файла по шагам #
Предположим, что пользователь выполняет команду на создание нового файла
- По умолчанию базовый режим для файла
666или110110110в битовом представлении - К режиму применяется маска пользователя
0022или000000010010в битовом представлении - Все биты, равные
1в базовом режиме заменяются на0, если в маске тоже стоит1:110110110 000000010010 = 110100100 - Результирующий режим
110100100или644в восьмеричном представлении.
Специальные права umask
#
setuid bit, 4000, u+s
#
Если он установлен у исполняемого файла, тогда при запуске процесса из этого файла, он будет запущен с правами пользователя, которому принадлежит исполняемый файл. Обычно применяется для небольшого количества программ, которые должен запускать обычный пользователь, но для её работы нужны повышенные привилегии
setgit bit, 2000, g+s
#
Если флаг установлен у каталога, то новые файлы созданные в этом каталоге будут принадлежать к группе данного каталога, а не основной группе пользователя её создавшей. Применяется для создания общих каталогов между пользователями
sticky bit, 1000, +t
#
Если флаг установлен у каталога, то препятствует переменованию или удалению файлов в каталоге, если пользователь не является их владельцем или владельцем каталога
Смена активного пользователя #
Для выполнения различных команд необходимо иметь возможность выполнять команды от имени другого пользователя, например суперпользователя
- Открыть новую сессию от имени нового пользователя
- Воспользоваться приложениями
suилиsudo
Первая опция почти никогда не используется, т.к. последние две позволяют выполнять действия удобным образом
Приложение su
#
Приложение позволяет либо выполнить одну команду от имени другого пользователя, либо открыть интерактивную оболочку с его правами
$ su --help
Usage:
su [options] [-] [<user> [<argument>...]]-,-l,--loginуказывает, что необходимо заново инициализировать окружение для целевого пользователяuserимя целевого пользователя,rootесли не было указано
Получение прав суперпользователя:
$ su -
Пароль:
#Необходимо интерактивно ввести пароль суперпользователя
Работа от имени суперпользователя #
Работать с правами суперпользователя удобно: система не мешает своими сообщениями, если что-то пошло не так, все команды завершаются успешно
Однако при таком подходе снимаются все защитные механизмы, которые нужны, чтобы предотвратить необдуманные изменения
Запуск одной команды #
С помощью флага -c можно передать нужную команду на исполнение
$ su -c 'ls /root/*'
Пароль:
/root/empty-file
$Расширение пути будет выполнено с правами суперпользователя
Использование sudo
#
Приложение sudo работает во многих аспектах как команда su, однако отличается наличием конфигурационного файла
- Для каждого пользователя может быть указан список команд, которые он может выполнить от имени другого пользователя
- Для части команд запрос пароля может быть отключён
- Для запуска команды может потребоваться как пароль текущего пользователя, так и пароль целевого пользователя
- Конфигурация находится в файле
/etc/sudoers/и каталоге/etc/sudoers.d - Если для выполнения команд требуется ввод пароля суперпользователя, тогда его необходимо будет ввести 1 раз в 5 минут или до истечения сессии
Настройка sudo в ALT Linux
#
В ALT Linux создаваемый пользователь не указан в конфигурации sudo и не может ей пользоваться, однако там находится группа wheel
Для добавления вашего пользователя в группу wheel выполните
- Зайдите в интерактивную сессию под пользователем
root - Выполните добавление:
usermod -a -G wheel USER, гдеUSER— имя вашей учётной записи - Закройте сессии от имени суперпользователя и пользователя, затем подключитесь заново. При следующем входе пользователю присвоятся корректные группы
Дополнительно подумайте как можно было бы сделать это действие без интерактивной сессии
После такой конфигурации пользователь сможет с помощью sudo выполнять любые команды
Подсистема control в ALT Linux
#
В ALT Linux предприняты дополнительные защитные меры от доступа к критичным службам, это реализовано в подсистеме control
По умолчанию для доступа к приложениям, повышающим привилегии пользователя, необходимо входить в группу wheel
Суперпользователь может изменить данную политику
Использование sudo
#
$ sudo ls /root
[sudo] пароль для andrey:
empty-file
$ sudo ls /root
empty-filesudo ls /root— запуститьlsс правами root для просмотра каталога/rootsudo -l— узнать какие привилегии доступны текущему пользователюsudo -i [-u user]— запустить интерактивную сессию под целевым пользователемsudo -K— завершить сессию
Изменение владельцев файлов #
Для изменения владельца и группы для файлов используется приложение chown
> chown --help
Использование: chown [ПАРАМЕТР]… [ВЛАДЕЛЕЦ][:[ГРУППА]] ФАЙЛ…
или: chown [ПАРАМЕТР]… --reference=ОФАЙЛ ФАЙЛ…
Смена владельца и группы указанного ФАЙЛА на ВЛАДЕЛЬЦА и/или ГРУППУ.Примеры указания нового владельца
| Аргумент | Результат |
|---|---|
bob |
изменить только владельца у целевого файла на пользователя bob |
bob:users |
изменить владельца на bob, изменить группу на users |
:admins |
изменить только группу на admin, владелец не меняется |
bob: |
изменить владельца на bob, изменить группу на группу по умолчанию пользователя bob |
Примеры изменения владельца #
Рассмотрим следующую ситуацию
$ touch source
$ ls -l source
-rw-r--r-- 1 andrey andrey 0 окт 6 17:38 source
$ su
Password:
# cp source destination
# exit
$ ls -l destination
-rw-r--r-- 1 root root 0 окт 6 17:38 destination
$ su
Password:
# chown nobody: destination
# exit
$ ls -l destination
-rw-r--r-- 1 nobody nobody 0 окт 6 17:38 destinationСмена пароля пользователя #
Для смены пароля пользователя можно воспользоваться приложением passwd
$ passwd --help
Использование: passwd [параметры] [ПОЛЬЗОВАТЕЛЬ]Обычный пользователь может сменить только свой пароль
Суперпользователь может изменить пароль любого пользователя
Управление списком пользователей #
Для управления пользователями и группами можно воспользоваться следующими приложениями
useradd, приложение для добавления пользователя в системуuserdel, приложение для удаления пользователя из системыusermod, приложение для настройки пользователяgroupadd, приложение для добавления группgroupdel, приложение для удаления группgroupmod, приложение для настройки групп
Списки прав доступа #
Access Control Lists, ACLs, — расширенные списки доступа к файлам
Иногда прав доступа в классической схеме недостаточно, в этом случае можно применить расширенные списки прав доступа
getfactl— приложение для получение текущего списка правsetfactl— управление списком прав доступа