Васильев Андрей Михайлович, 2022
Версии презентации
Первоначально UNIX разрабатывался для больших мейнфремов:
Необходимо было обеспечить, чтобы большое количество пользователей одновременно могли выполнять свои задачи
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-мире для формирования модели безопасности используются
Для определения прав пользователя можно использовать приложение 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
-
— обыкновенный файлb
— специальный файл блочного устройства, например жёсткого дискаc
— специальный файл символьного устройства, например клавиатуры или терминалаd
— каталогl
— символическая ссылка, не имеет собственных прав доступаn
— сетевой файлp
— файл FIFO для организации взаимодействия потоковs
— файл socket для организации псевдосетевого взаимодействияПоследняя часть атрибутов описывает права доступа
r
позволяет читать содержимое файловw
позволяет переписывать содержимое файлов, но не позволяет их удалять или переименовыватьx
позволяет выполнять запуск файла, скриптовые файлы должны быть также доступны на чтениеr
просматривать содержимое каталогов, если ещё установлен флаг x
w
позволяет создавать, удалять, переименовывать файлы в каталоге, если ещё установлен флаг x
x
позволяет пользователю заходить внутрь каталогаПрава записываются в порядке: владелец-группа-остальные
-rw-r--r--
rw-
, владелец может читать и записывать в файлr--
, группа может считывать из файлаr--
, все остальные могут считывать из файла-rwx------
rwx
, владелец может выполнять любые операции---
, все остальные, включая группу не могут ничего делать с файломlrwxrwxrwx
— файл является ссылкой, которую могут прочитать все, но работа с файлом будет происходит по его эффективным разрешениям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
#
4000
, u+s
#
Если он установлен у исполняемого файла, тогда при запуске процесса из этого файла, он будет запущен с правами пользователя, которому принадлежит исполняемый файл. Обычно применяется для небольшого количества программ, которые должен запускать обычный пользователь, но для её работы нужны повышенные привилегии
2000
, g+s
#
Если флаг установлен у каталога, то новые файлы созданные в этом каталоге будут принадлежать к группе данного каталога, а не основной группе пользователя её создавшей. Применяется для создания общих каталогов между пользователями
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
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-file
sudo ls /root
— запустить ls
с правами root для просмотра каталога /root
sudo -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
— управление списком прав доступа