Права доступа и владение файлами
Тема дорожной карты · Linux & Unix Fundamentals
Управление правами доступа и владением файлами является ключевым аспектом безопасности в Unix-подобных системах. Владелец файла определяется уникальным идентификатором пользователя (UID), а группа — уникальным идентификатором группы (GID). Важным аспектом является 12-битная маска прав, которая определяет доступ rwx для владельца, группы и других пользователей, а также специальные биты setuid, setgid и sticky. Эти параметры можно проверить с помощью команд ls -l или stat, а также изменить с помощью команд chown, chgrp и chmod.
Команда chown user:group path позволяет изменить владельца и группу файла, а параметр -R обеспечивает рекурсивное изменение для всех файлов и директорий в указанной директории. Команда chmod используется для изменения режима доступа файла, как в символическом, так и восьмеричном форматах. Например, команда chmod 644 file устанавливает права доступа на чтение и запись для владельца, а также чтение для группы и других пользователей.
Когда файл создается, на него автоматически накладывается маска прав, определенная переменной umask. Значение этой переменной можно проверить и изменить с помощью команды umask. Например, дефолтное значение umask равно 0022, что означает, что новые файлы будут иметь права 644, а новые директории — 755.
Как это работает
Права доступа и владение файлами определяются через три основных категории: владелец (owner), группа (group) и другие пользователи (other). Для каждой категории определяются три основных права доступа: чтение (read), запись (write) и выполнение (execute). Команда ls -l выводит текущие права доступа для файла в виде строки символов, например rwxr-xr--, где первые три символа относятся к правам владельца, следующие три — к правам группы, а последние три — к правам других пользователей.
Команда chmod позволяет изменять права доступа для файлов и директорий. Она может использовать как символическую нотацию, так и восьмеричную. Например, команда chmod 644 file устанавливает права доступа на чтение и запись для владельца, а также чтение для группы и других пользователей. Восьмеричная нотация позволяет легко менять права доступа, например 755 эквивалентно rwxr-xr-x.
Специальные биты, такие как setuid, setgid и sticky, предоставляют дополнительные возможности для управления правами доступа. Например, бит setuid позволяет запускать программу с правами доступа владельца, а бит sticky предотвращает удаление файла другими пользователями в общем каталоге, например /tmp.
Когда применять
По умолчанию, следует придерживаться принципа наименьших привилегий (least privilege), то есть предоставлять минимальные права доступа, необходимые для выполнения задачи. Например, для файлов это может быть 644, для директорий — 755, а для секретных файлов — 600. Группы используются для предоставления общего доступа к файлам и директориям, а добавление большого количества пользователей в группу wheel или sudo может создать уязвимости безопасности.
Создание файлов и директорий с правами доступа 777 практически всегда является ошибкой, так как это означает, что любой пользователь системы может читать, записывать и выполнять файлы и директории. Вместо этого следует использовать POSIX ACL (getfacl, setfacl) для предоставления тонкого управления правами доступа в общем случае, например для CI-пайплайнов и деплоя пользователей.
Типичные ошибки
Типичные ошибки при управлении правами доступа и владением файлами включают использование команд chmod 777 для предоставления общего доступа ко всем файлам и директориям, что создает большую уязвимость для системы. Также ошибкой является использование команды chown -R для изменения владельца и группы файлов и директорий, если эта команда применяется к неправильной директории, что может привести к тому, что пользователь больше не сможет стать root.
Другой распространенной ошибкой является непонимание того, что значение переменной umask влияет на права доступа новых файлов и директорий. Например, дефолтное значение umask равно 0022, что означает, что новые файлы будут иметь права 644, а новые директории — 755. Если значение umask изменено, это может привести к тому, что новые файлы и директории будут иметь неправильные права доступа.