chown и chgrp
Тема дорожной карты · Linux & Unix Fundamentals
chown и chgrp — это важные команды в Unix/Linux системах, которые позволяют управлять владельцами и группами файлов и директорий. Эти команды используются для изменения прав доступа к файлам и директориям, что является ключевым элементом обеспечения безопасности и управления доступом в операционных системах.
Как это работает
chown и chgrp используют систему прав доступа, где каждая группа и пользователь имеет определенные права: чтение, запись и выполнение. Команда ls -l выводит права доступа в виде символов, например rwxr-xr--. Команда chmod 644 file устанавливает конкретные биты для файлов. С помощью chown user:group file можно изменить владельца и группу файла.
Права доступа могут быть указаны в восьмеричной или символической форме. Например, 755 эквивалентно rwxr-xr-x. Существуют также специальные биты, такие как setuid (запуск под идентификатором владельца), setgid (наследование группы) и sticky (удаление файла может производить только владелец в общем каталоге типа /tmp).
Кроме классических UNIX-битов, существуют дополнительные механизмы управления правами доступа, такие как ACL (setfacl, getfacl), capabilities (setcap) и метки SELinux/AppArmor.
Когда применять
По умолчанию, следует придерживаться принципа наименьших привилегий: 644 для файлов, 755 для директорий и 600 для конфиденциальных данных. Группы используются для предоставления общего доступа; добавление множества пользователей в группу wheel или sudo может быть нецелесообразным.
Создание файлов с правами 777 (полный доступ для всех) практически всегда является ошибкой, так как это создает уязвимости безопасности. Вместо рекурсивного применения chmod, использование ACL может быть более эффективным для управления тонкими правами доступа, особенно для CI-пайплайнов и деплоя пользователей.
Команды capabilities могут быть использованы вместо полного доступа root для выполнения конкретных задач, например для доступа к порту 80 (CAP_NET_BIND_SERVICE).
Типичные ошибки
Часто встречаются ошибки при использовании chown и chgrp. Например, применение chmod 777 "чтобы заработало" может создать огромную уязвимость, так как это нарушает принцип наименьших привилегий.
Использование команды chown -R на неправильной директории может привести к тому, что вы больше не сможете получить доступ к корневому пользователю. Непонимание того, что umask влияет на права доступа новых файлов, также может привести к проблемам. Например, дефолтное значение 0022 забирает право записи у группы и других пользователей.
Использование setuid-бинарного файла для запуска незащищенного кода под root является классической уязвимостью. Команда find / -perm -4000 -type f может быть использована для поиска всех setuid-файлов, которые следует пересматривать регулярно.