Контроль доступа

Контроль доступа

Разрешения и право собственности

Понимание пользователей, групп, битов чтения/записи/выполнения, числовых режимов, chmod, chown, chgrp, umask и битов специальных разрешений.

Аудитория
Каждый пользователь Linux
Время чтения
20 мин
Модель разрешения
rwx
Режим общего каталога
755
Специальные биты
3

Пользователи, группы и право собственности

Каждый процесс выполняется от имени пользователя и одной или нескольких групп. У каждого объекта файловой системы есть пользователь-владелец и группа владельцев. Разрешения оцениваются по этим идентификаторам.

Вот почему запуск команды с помощью sudo меняет доступ к ней: процесс выполняется с повышенными правами личности, обычно root, для этой команды.

Читать, писать и выполнять

Разрешения Linux обычно отображаются в виде трех наборов: владелец, группа и другие. Каждый набор может иметь биты чтения, записи и выполнения.

Значение немного меняется между файлами и каталогами. Выполнить над файлом означает запустить его как программу. Выполнение в каталоге означает его обход, что необходимо для доступа к именам внутри него.

Читать, писать и выполнять диаграмма
Пользовательидентичность
Владелецчтение / запись / выполнение
Группачтение / запись / выполнение
Остальныечтение / запись / выполнение
Читать, писать и выполнять
PermissionО файлахВ каталогах
readЧтение содержимого файлаСписок имен каталогов, если выполнение также доступно
writeИзменить содержимое файлаСоздание, удаление или переименование записей внутри
executeЗапускать как программу или скриптВойти/перейти каталог

Числовые разрешения: 644, 755, 600, 700.

Числовые режимы добавляют чтение как 4, запись как 2 и выполнение как 1. Каждая цифра представляет владельца, группу или других лиц. 7 означает чтение/запись/выполнение. 6 означает чтение/запись. 5 означает чтение/выполнение. 0 означает отсутствие разрешения.

Общие режимы: 644 для обычных читаемых файлов, 755 для исполняемых каталогов и программ, 600 для частных файлов и 700 для частных каталогов.

Числовые разрешения: 644, 755, 600, 700.
ModeMeaningОбщее использование
644Владелец чтение/запись; группа и другие читаютОбычные общедоступные файлы
755Владелец чтение/запись/выполнение; группа и другие читают/выполняютКаталоги и исполняемые программы
600Владелец только чтение/записьЗакрытые ключи или конфиденциальные файлы
700Только полный доступ владельцаЧастные каталоги

chmod, chown и chgrp

chmod изменяет биты разрешений. chown меняет владельца. chgrp меняет группу. Они решают разные задачи и часто используются вместе.

Избегайте chmod 777 как универсального решения. Это делает файлы доступными для записи всем, что может превратить небольшую проблему с разрешениями в проблему безопасности.

Сделать скрипт исполняемым владельцем
chmod u+x deploy.sh
Установите разрешения для закрытого ключа
chmod 600 ~/.ssh/id_ed25519
Передача права владения сервисным аккаунтом
sudo chown -R www-data:www-data /var/www/site

umask

umask контролирует, какие биты разрешений удаляются из вновь созданных файлов и каталогов. Это фильтр безопасности по умолчанию, применяемый во время создания.

Общая маска 022 делает новые каталоги 755 и новые файлы 644. Более строгая маска 077 делает новые файлы и каталоги частными для владельца.

Специальные биты: setuid, setgid и липкий бит.

Специальные биты изменяют обычное поведение разрешений. setuid позволяет запускать исполняемый файл с идентификатором владельца файла. setgid может запускать исполняемые файлы с идентификатором группы или наследовать групповое владение каталогами. Бит липкости в общем каталоге не позволяет пользователям удалять файлы друг друга.

Классический пример липкого бита — /tmp: многие пользователи могут создавать там файлы, но они не должны иметь возможности удалять файлы, принадлежащие другим пользователям.

Специальные биты: setuid, setgid и липкий бит.
BitОбщий дисплейТипичное использование
setuids в позиции владельца и исполненияТщательно проверенные вспомогательные программы привилегий
setgids в позиции группового выполненияОбщие каталоги проектов или исполняемые файлы с групповыми привилегиями.
stickyt в других исполнять позициюОбщие каталоги с возможностью записи, например /tmp.

Последствия для безопасности и практические примеры

Разрешения — одна из основных границ безопасности Linux. Это не единственная граница, но они не позволяют обычным пользователям и службам читать или изменять файлы, которыми они не владеют.

Хорошая практика разрешений означает предоставление каждой службе только того доступа, который ей необходим, сохранение конфиденциальности секретов, избегание общедоступных путей и предпочтение групповому сотрудничеству над широким доступом.