Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:стандартные_права_unix [2014/12/13 01:32] [Стандартные права] |
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**, для того,чтобы были отображены скрытые объекты: | ||
Строка 58: | Строка 58: | ||
Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое, в восьмеричном представлении (оно короче). Так, например, права на файл всем и вся, соответствуют записи **777** (что аналогично символьному представлению **rwxrwxrwx**). | Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое, в восьмеричном представлении (оно короче). Так, например, права на файл всем и вся, соответствуют записи **777** (что аналогично символьному представлению **rwxrwxrwx**). | ||
- | Существуют также специальные биты, такие как **SUID**, **SGID** и **Sticky**-бит. Они влияют на запуск файла. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например **0744**. Многие стараются не использовать специальные биты, сетуя на безопасность (и не без основательно), но, в некоторых ситуациях без них не обойтись. Поговорим о них несколько позже. | + | Существуют также специальные биты, такие как **SUID**, **SGID** и **Sticky**-бит. **SUID**, **SGID** влияют на запуск файла, а **Sticky** влияет на определение владельца объектов в каталоге. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например **0744**. Многие стараются не использовать специальные биты, сетуя на безопасность (и не без основательно), но, в некоторых ситуациях без них не обойтись. Поговорим о них несколько позже. |
Давайте рассмотрим пример, итак: | Давайте рассмотрим пример, итак: | ||
Строка 84: | Строка 84: | ||
Восьмеричное обозначение в этом примере: **0755**. | Восьмеричное обозначение в этом примере: **0755**. | ||
- | <note important>Для полноценного просмотра каталога, необходимы права на чтение каталога и доступ к файлам, а главное к их атрибутам, т.е. минимальные разумные права на каталог - 5 (r-x). Прав 4 (r - - ) хватит только на просмотр имен файлов, без атрибутов, т.е. не будет известен ни размер файла, ни его тип (что даже не позволит отличить директории от файлов).</note> | + | <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** поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа). |
Синтаксис команды прост: | Синтаксис команды прост: | ||
Строка 141: | Строка 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 ===== | ||
Строка 159: | Строка 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> | ||
Строка 184: | Строка 211: | ||
Однако, в системе FreeBSD, если скомпилировать ядро с поддержкой **suiddir**, а так же смонтировать раздел с этой опцией, то, все объекты создаваемые в каталоге где установлен **SUID** будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью. | Однако, в системе FreeBSD, если скомпилировать ядро с поддержкой **suiddir**, а так же смонтировать раздел с этой опцией, то, все объекты создаваемые в каталоге где установлен **SUID** будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью. | ||
- | |||
- | Замечание о **suiddir** прислал Sergey Koltogyan. | ||
</note> | </note> | ||
Строка 303: | Строка 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>Администрирование система Права_доступа }} |