Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:стандартные_права_unix [2014/12/13 00:18] Толкование прав на каталоги |
wiki:стандартные_права_unix [2020/10/07 17:56] [Расширенные права] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Стандартные права Unix, SUID, SGID, Sticky биты ====== | + | ====== Права доступа Unix, SUID, SGID, Sticky биты ====== |
^ Поддерживаемые версии Ubuntu ^ | ^ Поддерживаемые версии Ubuntu ^ | ||
| Все (теоретически) | | | Все (теоретически) | | ||
Строка 24: | Строка 24: | ||
| s |Unix сокет (unix domain socket)| | | s |Unix сокет (unix domain socket)| | ||
- | ===== Стандартные права ===== | + | ===== Права доступа ===== |
Посмотреть права доступа на объекты можно командой **ls** c ключем **-l** ("л"). Также можно добавить ключ **-a**, для того,чтобы были отображены скрытые объекты: | Посмотреть права доступа на объекты можно командой **ls** c ключем **-l** ("л"). Также можно добавить ключ **-a**, для того,чтобы были отображены скрытые объекты: | ||
Строка 38: | Строка 38: | ||
</code> | </code> | ||
- | В листинге выше используются буквенные обозначения прав (т.н. маска режима доступа), но большинство администраторов, в том числе и я, используют чаще цифровые обозначения в восьмеричном представлении. | + | Для назначения прав используются три группы флагов, первая определяет права для владельца, вторая - права для основной группы пользователя, третья - для всех остальных пользователей в системе. |
- | Для файлов: **r** - право на чтение файла; **w** - разрешает запись в файл (в частности перезапись или изменение); **x** - позволяет исполнить файл. | + | Для файлов: **r** - право на чтение из файла; **w** - разрешает запись в файл (в частности перезапись или изменение); **x** - позволяет исполнить файл. |
- | Для каталогов права **r w x** имеют несколько отличное значение: **r** - позволяет читать только имена файлов в каталоге; **x** - позволяет иметь доступ к самим файлам и их атрибутам (но не именам); **w** имеет смысл только в сочетании с **x**, и позволяет изменять как сами файлы так и манипулировать с файлами (создавать, удалять и переименовывать). **w** без **x** - не имеет никакого эффекта. | + | Для каталогов, флаги **r w x** имеют несколько отличный смысл: **r** - позволяет читать только имена файлов в каталоге; **x** - позволяет иметь доступ к самим файлам и их атрибутам (но не именам); **w** имеет смысл только в сочетании с **x**, и позволяет (в дополнение к **x**) манипулировать с файлами в каталоге (создавать, удалять и переименовывать). **w** без **x** - не имеет никакого эффекта. |
Рассмотрим таблицу, чтобы было понятнее: | Рассмотрим таблицу, чтобы было понятнее: | ||
Строка 48: | Строка 48: | ||
^ OCT ^ BIN ^ Mask ^ Права на файл ^ Права на каталог ^ | ^ OCT ^ BIN ^ Mask ^ Права на файл ^ Права на каталог ^ | ||
| 0 | 000 | - - - |отсутствие прав|отсутствие прав| | | 0 | 000 | - - - |отсутствие прав|отсутствие прав| | ||
- | | 1 | 001 | - - x |права на выполнение|доступ к файлам и их атрибутам| | + | | 1 | 001 | - - x |права на выполнение|доступ к файлам и их атрибутам((Нет возможности получить список имен файлов и создать/удалить/переименовать файл в каталоге.))| |
| 2 | 010 | - w - |права на запись|отсутствие прав| | | 2 | 010 | - w - |права на запись|отсутствие прав| | ||
- | | 3 | 011 | - w x |права на запись и выполнение|все, кроме доступа к именам файлов| | + | | 3 | 011 | - w x |права на запись и выполнение|все, кроме доступа к именам файлов((Можно читать/изменять/запускать(если разрешено правами на сам файл), а также создавать/удалять/переименовывать файл, но только если вы знаете его имя. Узнать имена файлов в каталоге - нет никакой возможности))| |
| 4 | 100 | r - - |права на чтение|только чтение имен файлов| | | 4 | 100 | r - - |права на чтение|только чтение имен файлов| | ||
- | | 5 | 101 | r - x |права на чтение и выполнение|чтение имен файлов и доступ файлам и их атрибутам| | + | | 5 | 101 | r - x |права на чтение и выполнение|чтение имен файлов и доступ файлам и их атрибутам((Нет возможности создавать/удалять/переименовывать файлы в каталоге.))| |
| 6 | 110 | r w - |права на чтение и запись|только чтение имен файлов| | | 6 | 110 | r w - |права на чтение и запись|только чтение имен файлов| | ||
| 7 | 111 | r w x |полные права|все права| | | 7 | 111 | r w x |полные права|все права| | ||
- | Для назначения обычных прав используются три восьмеричных цифры (9 битов). Первая цифра определяет права для владельца файла, вторая - права для основной группы пользователя, третья - для всех остальных пользователей. Так, например, чтобы задать права на файл всем и вся, нужно установить права **777** (**rwxrwxrwx**). | + | Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое, в восьмеричном представлении (оно короче). Так, например, права на файл всем и вся, соответствуют записи **777** (что аналогично символьному представлению **rwxrwxrwx**). |
- | Существуют также специальные биты, такие как **SUID**, **SGID** и **Sticky**-бит. Они влияют на запуск файла. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например **0744**. Почему-то многие стараются не использовать специальные биты, сетуя на безопасность, но, по-моему, их использование в некоторых ситуациях очень оправдано. Поговорим о них несколько позже. | + | |
+ | Существуют также специальные биты, такие как **SUID**, **SGID** и **Sticky**-бит. **SUID**, **SGID** влияют на запуск файла, а **Sticky** влияет на определение владельца объектов в каталоге. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например **0744**. Многие стараются не использовать специальные биты, сетуя на безопасность (и не без основательно), но, в некоторых ситуациях без них не обойтись. Поговорим о них несколько позже. | ||
Давайте рассмотрим пример, итак: | Давайте рассмотрим пример, итак: | ||
Строка 69: | Строка 70: | ||
* Первый символ (флаг) пустой: " - " - для файлов. | * Первый символ (флаг) пустой: " - " - для файлов. | ||
- | * Следующие три символа (**rwx**) обозначают права для владельца файла, в данном случае полные права для пользователя **allexserv**.((По умолчанию, при создании объекта (файла или каталога) устанавливаются полные права для его владельца).)) | + | * Следующие три символа (**rwx**) обозначают права для владельца файла, в данном случае полные права для пользователя **allexserv**.((При создании файла или каталога его владелец получает полные права на него.)) |
* Следующие три (- - -) - определяют права для группы **nogroup**, в нашем примере для всех пользователей группы **nogroup** доступ запрещен. | * Следующие три (- - -) - определяют права для группы **nogroup**, в нашем примере для всех пользователей группы **nogroup** доступ запрещен. | ||
* Ну и последние три символа (- - -) определяют права для всех остальных пользователей, в нашем случае доступ запрещен. | * Ну и последние три символа (- - -) определяют права для всех остальных пользователей, в нашем случае доступ запрещен. | ||
Строка 78: | Строка 79: | ||
* Для владельца каталога **allexserv** - полные права (rwx). | * Для владельца каталога **allexserv** - полные права (rwx). | ||
- | * Для группы **nogroup** - права только на листинг каталога (r-x). | + | * Для группы **nogroup** - права на листинг каталога и доступ к файлам (r-x). |
- | * Для пользователя "все остальные" - права только на листинг каталога (r-x). | + | * Для пользователя "все остальные" - права на листинг каталога и доступ к файлам (r-x). |
- | Восьмеричное обозначение в этом примере: **0755**.((Напомню, что для того, чтобы пользователи могли просматривать каталог, необходимы права на чтение и выполнение каталога, т.е. минимальные права на каталог 0555 (r-xr-xr-x), прав 0444 (r - - r - - r - -) будет недостаточно для входа в каталог.)) | + | Восьмеричное обозначение в этом примере: **0755**. |
+ | |||
+ | <note important>Для полноценного просмотра каталога, необходимы права на чтение каталога и доступ к файлам, а главное к их атрибутам, т.е. минимальные разумные права на каталог - 5 (r-x). Прав 4 (r--) хватит только на просмотр имен файлов, без атрибутов, т.е. не будут известны размер файла, права доступа, владелец. | ||
+ | |||
+ | На практике для каталогов используется только три режима: 7 (rwx), 5 (r-x) и 0 (---).</note> | ||
+ | |||
+ | <note tip>Очень любопытный режим доступа к каталогу - 3 (-wx): он позволяет делать в директории все, что угодно, но не позволяет прочитать имена объектов в директории. Т.е. если вам не известны названия объектов в этом каталоге, то вы сделать с ними ничего не сможете (даже удалить по маске * т.к. маску не к чему применять - имена то недоступны). | ||
+ | |||
+ | В каталоге с режимом доступа 3 (-wx) можно создавать новые, переименовывать и удалять файлы и каталоги (если вы знаете их имя); читать, изменять, запускать файл (если достаточно на него прав, и опять же - вы знаете его имя). Можно даже менять права доступа на файлы и каталоги (если вы знаете имя). Но самое интересное, что если вы сможете перейти (по cd((Хотя графические файловые менеджеры могут и отказаться открывать такой подкаталог.))) в подкаталог такого каталога (а для этого вам опять нужно знать его имя), то там у вас будет "все в ожуре" (если конечно у этого подкаталога будет нормальный режим доступа). | ||
+ | |||
+ | Никакой рекурсивный поиск/удаление тоже не сможет залезть внутрь такого каталога - ему ведь нужны названия - а их из такого каталога - никак не получить. | ||
+ | |||
+ | Но не надо думать, что такой каталог полноценно заменяет крипто-контейнер (т.е. может использоваться для хранения очень секретных данных). Да, имен объектов из такого каталога никак не получить, однако если попытаться создать объект с именем, которое уже существует, то такая операция закончится неудачей (т.е. мы получим подтверждение, что такое имя уже есть). Так же можно пытаться открыть (как файл или как каталог) объект с произвольным именем, если такого имени нет, то мы получим ошибку. Безусловно имя может быть очень длинным и шансы угадать его могут быть не велики, но не надо забывать, что права доступа могут сменить как владелец каталога так root. Да и пути доступа могут сохраниться в различных логах и файлах истории.</note> | ||
===== Команда chmod ===== | ===== Команда chmod ===== | ||
- | Права устанавливаются командой **chmod**. По умолчанию использовать ее может только **root**. Команда **chmod** поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа). | + | Права устанавливаются командой **chmod**. Команда **chmod** поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа). |
Синтаксис команды прост: | Синтаксис команды прост: | ||
Строка 138: | Строка 151: | ||
Символьное назначение окажет неоценимую услугу, если требуется добавить права на объект к уже существующим правам. | Символьное назначение окажет неоценимую услугу, если требуется добавить права на объект к уже существующим правам. | ||
+ | |||
+ | === Массовое назначение прав === | ||
+ | |||
+ | Иногда, бывает, нужно массово установить права на определенный тип объектов, например, только на каталоги или только на файлы. Простое использование опции **-R** (рекурсия) здесь не поможет т.к. chmod будет проходить по всем объектам удовлетворяющим маске, что иногда вовсе не то, что нужно. | ||
+ | |||
+ | Итак, чтобы массово установить права на определенный тип объектов можно использовать один из вариантов (вообще, их очень много): | ||
+ | |||
+ | * **chmod -R 770 $(find . -type d)** | ||
+ | |||
+ | где **-type d** - каталоги, **-type f** - файлы. В данном примере chmod установит, начиная от текущего каталога((О чем сообщает точка после **find**.)), права на все каталоги (включая подкаталоги) разрешения 770 (rwx rwx- - -) при этом не трогая права на другие объекты. | ||
+ | |||
+ | Более длинный вариант аналогичной операции: | ||
+ | |||
+ | * **find ./ -type f -exec sudo chmod 775 {} \;** | ||
+ | |||
+ | где **-type d** - каталоги, **-type f** - файлы. В данном варианте chmod установит разрешения 775 на все файлы включая файлы в подкаталогах начиная от текущего. | ||
+ | |||
===== Биты SUID, SGID и Sticky ===== | ===== Биты SUID, SGID и Sticky ===== | ||
Строка 156: | Строка 186: | ||
</code> | </code> | ||
- | **1000** - идентификатор (GID) дополнительной группы allexserv пользователя **allexserv**((Обратите внимание, в этом примере основная группа пользователя **allexserv** - это группа **root** (идентификатор 0), а группа **allexserv** (1000) - считалась бы дополнительной. В данном примере пользователь **allexserv** не входит больше в группу **allexserv** (видимо я, при создании себя вручную изменил принадлежность к группам), так что группа **allexserv** на данный момент пуста.)) | + | **1000** - идентификатор (GID) дополнительной группы allexserv пользователя **allexserv**((Обратите внимание, в этом примере основная группа пользователя **allexserv** - это группа **root** (идентификатор 0) - при создании этого пользователя ему была явно указана принадлежность к группе **root**.)) |
- | Зачастую, при создании пользователя, если не указано иное, идентификатор группы пользователя равен идентификатору пользователя. Например: | + | Если при создании пользователя основная группа не указана явно, то основной группой пользователя будет группа с тем же именем, что и имя пользователя. Например: |
<code> | <code> | ||
Строка 181: | Строка 211: | ||
Однако, в системе FreeBSD, если скомпилировать ядро с поддержкой **suiddir**, а так же смонтировать раздел с этой опцией, то, все объекты создаваемые в каталоге где установлен **SUID** будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью. | Однако, в системе FreeBSD, если скомпилировать ядро с поддержкой **suiddir**, а так же смонтировать раздел с этой опцией, то, все объекты создаваемые в каталоге где установлен **SUID** будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью. | ||
- | |||
- | Замечание о **suiddir** прислал Sergey Koltogyan. | ||
</note> | </note> | ||
Строка 300: | Строка 328: | ||
В больших сетях, с многоуровневыми схемами доступа применяется более гибкая реализация назначения прав, именуемая как **ACL** - [[access_control_list|Списки контроля доступа]]. | В больших сетях, с многоуровневыми схемами доступа применяется более гибкая реализация назначения прав, именуемая как **ACL** - [[access_control_list|Списки контроля доступа]]. | ||
- | <style right> --- //[[allexmail@pisem.net|Соловьев Алексей aka allexnew]] upd 07.12.2014 14:08// </style> | + | <style right> --- //[[allexmail@yandex.ru|Соловьев Алексей aka allexnew]] upd 07.10.2020 17:56// </style> |
{{tag>Администрирование система Права_доступа }} | {{tag>Администрирование система Права_доступа }} |