Пользователи, группы и право собственности
Каждый процесс выполняется от имени пользователя и одной или нескольких групп. У каждого объекта файловой системы есть пользователь-владелец и группа владельцев. Разрешения оцениваются по этим идентификаторам.
Вот почему запуск команды с помощью sudo меняет доступ к ней: процесс выполняется с повышенными правами личности, обычно root, для этой команды.
Читать, писать и выполнять
Разрешения Linux обычно отображаются в виде трех наборов: владелец, группа и другие. Каждый набор может иметь биты чтения, записи и выполнения.
Значение немного меняется между файлами и каталогами. Выполнить над файлом означает запустить его как программу. Выполнение в каталоге означает его обход, что необходимо для доступа к именам внутри него.
| Permission | О файлах | В каталогах |
|---|---|---|
| read | Чтение содержимого файла | Список имен каталогов, если выполнение также доступно |
| write | Изменить содержимое файла | Создание, удаление или переименование записей внутри |
| execute | Запускать как программу или скрипт | Войти/перейти каталог |
Числовые разрешения: 644, 755, 600, 700.
Числовые режимы добавляют чтение как 4, запись как 2 и выполнение как 1. Каждая цифра представляет владельца, группу или других лиц. 7 означает чтение/запись/выполнение. 6 означает чтение/запись. 5 означает чтение/выполнение. 0 означает отсутствие разрешения.
Общие режимы: 644 для обычных читаемых файлов, 755 для исполняемых каталогов и программ, 600 для частных файлов и 700 для частных каталогов.
| Mode | Meaning | Общее использование |
|---|---|---|
| 644 | Владелец чтение/запись; группа и другие читают | Обычные общедоступные файлы |
| 755 | Владелец чтение/запись/выполнение; группа и другие читают/выполняют | Каталоги и исполняемые программы |
| 600 | Владелец только чтение/запись | Закрытые ключи или конфиденциальные файлы |
| 700 | Только полный доступ владельца | Частные каталоги |
chmod, chown и chgrp
chmod изменяет биты разрешений. chown меняет владельца. chgrp меняет группу. Они решают разные задачи и часто используются вместе.
Избегайте chmod 777 как универсального решения. Это делает файлы доступными для записи всем, что может превратить небольшую проблему с разрешениями в проблему безопасности.
chmod u+x deploy.shchmod 600 ~/.ssh/id_ed25519sudo chown -R www-data:www-data /var/www/siteumask
umask контролирует, какие биты разрешений удаляются из вновь созданных файлов и каталогов. Это фильтр безопасности по умолчанию, применяемый во время создания.
Общая маска 022 делает новые каталоги 755 и новые файлы 644. Более строгая маска 077 делает новые файлы и каталоги частными для владельца.
Специальные биты: setuid, setgid и липкий бит.
Специальные биты изменяют обычное поведение разрешений. setuid позволяет запускать исполняемый файл с идентификатором владельца файла. setgid может запускать исполняемые файлы с идентификатором группы или наследовать групповое владение каталогами. Бит липкости в общем каталоге не позволяет пользователям удалять файлы друг друга.
Классический пример липкого бита — /tmp: многие пользователи могут создавать там файлы, но они не должны иметь возможности удалять файлы, принадлежащие другим пользователям.
| Bit | Общий дисплей | Типичное использование |
|---|---|---|
| setuid | s в позиции владельца и исполнения | Тщательно проверенные вспомогательные программы привилегий |
| setgid | s в позиции группового выполнения | Общие каталоги проектов или исполняемые файлы с групповыми привилегиями. |
| sticky | t в других исполнять позицию | Общие каталоги с возможностью записи, например /tmp. |
Последствия для безопасности и практические примеры
Разрешения — одна из основных границ безопасности Linux. Это не единственная граница, но они не позволяют обычным пользователям и службам читать или изменять файлы, которыми они не владеют.
Хорошая практика разрешений означает предоставление каждой службе только того доступа, который ей необходим, сохранение конфиденциальности секретов, избегание общедоступных путей и предпочтение групповому сотрудничеству над широким доступом.