Ограничительные «групповые» разрешения, но открывают «мировые» разрешения?

Я понимаю, что с разрешениями файлов Unix есть «пользовательский», «групповой» и «мировой» октеты . Ради этого обсуждения предположим, что setuid / sticky bits не существует.

Рассмотрим следующий пример:

$ echo "Hello World" > strange $ chmod 604 strange $ ls -l strange -rw----r-- 1 mrllama foo 12 Apr 13 15:59 strange 

Предположим, что есть еще один пользователь, john , который является членом моей группы, foo .

  • Какие разрешения имеет у Джона относительно этого файла?
  • Происходит ли система с наиболее конкретным разрешением соответствия (то есть Джон не является владельцем, но он находится в группе foo , поэтому используйте разрешения для октета «group»)?
  • … или это происходит по большинству разрешений октетов, которые относятся к нему (т. е. Иоанн соответствует критериям «группы» и «мира», так что это происходит с более разрешительным из двух)?

Бонусные вопросы:

  • Что делать, если разрешения были 642 ? Может ли Джон читать только, писать или оба?
  • Есть ли причины иметь странные разрешения, такие как 604 ?

При определении разрешений доступа с использованием разрешений в стиле Unix текущий пользователь сравнивается с владельцем файла, тогда группа и применяемые разрешения относятся к первому компоненту, который соответствует. Таким образом, у владельца файла есть разрешения владельца (и только те), члены группы файлов имеют разрешения группы (и только те), у всех остальных есть разрешения «других пользователей».

Таким образом:

  • У John нет разрешений для этого файла.
  • Наиболее конкретное совпадение разрешений выигрывает, а не самый разрешительный (права доступа не являются кумулятивными).
  • С разрешениями 642 Джон мог прочитать файл.
  • Есть причины предоставить разрешения, такие как 604 : это позволяет исключить группу, что может быть удобно в некоторых ситуациях – я видел это в академических системах со students группой, где сотрудники могли создавать файлы, доступные для всех, кроме студентов.

root имеет доступ ко всему, независимо от разрешений, определенных в файле.

Для более сложного контроля доступа вы должны изучить списки управления доступом SELinux и POSIX . (SELinux, в частности, может даже ограничить доступ к root .)

Предполагая, что john не несет uid 0 , john будет иметь никаких прав, поскольку john является членом группы, и проверка разрешения не будет рассматривать мировые биты из-за группового соответствия (источник: «Расширенное программирование в среде Unix», глава 4, раздел 5, стр. 80 в первом издании.) 642 приведет к тому, что 4 бита будут применяться по той же причине. 604 довольно необычно, но может подойти тому, что кто-то не хотел видеть других членов своей группы.