Дело в том, что я всегда думал, что эти разрешения рушатся друг с другом, начиная с самого общего (другое -> группа -> пользователь).
Если бы это было так, то «другие» разрешения будут применяться ко всем.
Другими словами, если o = rwx, кого это волнует, какие разрешения у группы и пользователя?
Это отличается от вашего предыдущего предложения. Здесь вы подразумеваете, что разрешения объединены или объединены, например, что userX имеет разрешение на чтение, если userX владеет файлом и файл доступен для чтения пользователем, или если группа, к которой принадлежит userX, владеет файлом, а файл является группой -читаемо, или если файл доступен для чтения другим. Но это не так, как это работает. Фактически, это o=rwx
означает, что rwx
разрешения применяются к другим, но это ничего не говорит о сущностях, которые не являются другими.
Во-первых, не имеет значения, к какой группе принадлежит пользователь. Ядро не имеет представления о пользователях, принадлежащих к группам. Ядро поддерживает для каждого процесса идентификатор пользователя ( эффективный UID ) и список идентификаторов группы (эффективный GID и дополнительные GID). Группы определяются во время входа в систему, процессом входа в систему - это процесс входа в систему, который считывает базу данных группы (например /etc/group
). Идентификаторы пользователей и групп наследуются дочерними процессами¹.
Когда процесс пытается открыть файл с традиционными разрешениями Unix:
- Если владельцем файла является эффективный UID процесса, то используются биты прав доступа пользователя.
- В противном случае, если группа-владелец файла - это эффективный GID процесса или один из дополнительных идентификаторов группы процесса, то используются биты разрешения группы.
- В противном случае используются другие биты разрешения.
Используется только один набор битов rwx. Пользователь имеет приоритет над группой, которая имеет приоритет над другими. При наличии списков контроля доступа описанный выше алгоритм обобщается:
- Если в файле есть ACL для эффективного UID процесса, он используется для определения того, предоставлен ли доступ.
- В противном случае, если в файле есть ACL для эффективного GID процесса или один из дополнительных идентификаторов группы процесса, то используются биты разрешения группы.
- В противном случае используются другие биты разрешения.
См. Также Приоритет ACLS, когда пользователь принадлежит к нескольким группам, для получения дополнительной информации об использовании записей ACL, включая влияние маски.
Таким образом, -rw----r-- alice interns
указывает файл, который может быть прочитан и записан Алисой, и который может быть прочитан всеми другими пользователями, кроме интернов. Файл с разрешениями и владельцем ----rwx--- alice interns
доступен только для стажеров, кроме Алисы (независимо от того, является она стажером или нет). Поскольку Алиса может позвонить, chmod
чтобы изменить разрешения, это не обеспечивает никакой безопасности; это крайний случай. В системах с ACL обобщенный механизм позволяет удалять разрешения у определенных пользователей или определенных групп, что иногда полезно.
Использование одного набора битов вместо того, чтобы или все биты для каждого действия (чтение, запись, выполнение), имеет несколько преимуществ:
- Это имеет полезный эффект, так как позволяет удалять разрешения из набора пользователей или групп в системах с ACL. В системах без ACL разрешения могут быть удалены из одной группы.
- Это проще реализовать: проверить один набор битов, а не объединять несколько наборов бит вместе.
- Проанализировать права доступа к файлу проще, поскольку задействовано меньше операций.
Can Они могут измениться при выполнении процесса setuid или setgid. Это не связано с проблемой под рукой.