Права доступа Unix, SUID, SGID, Sticky биты Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:стандартные_права_unix [2014/12/13 00:27]
[Стандартные права]
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** - позволяет читать только имена файлов в каталоге;​ **x** - позволяет иметь доступ к самим файлам и их атрибутам (но не именам);​ **w** имеет смысл только в сочетании с **x**, и позволяет ​изменять как сами файлы так и манипулировать с файлами (создавать,​ удалять и переименовывать). **w** без **x** - не имеет никакого эффекта.+Для ​файлов: **r** - право на чтение из файла; **w** - разрешает запись в файл (в частности перезапись или изменение);​ **x** - позволяет исполнить файл. 
 + 
 +Для каталогов, флаги **r w x** имеют несколько отличный смысл: **r** - позволяет читать только имена файлов в каталоге;​ **x** - позволяет иметь доступ к самим файлам и их атрибутам (но не именам);​ **w** имеет смысл только в сочетании с **x**, и позволяет ​(в дополнение к **x**) ​манипулировать с файлами ​в каталоге ​(создавать,​ удалять и переименовывать). **w** без **x** - не имеет никакого эффекта.
  
 Рассмотрим таблицу,​ чтобы было понятнее:​ Рассмотрим таблицу,​ чтобы было понятнее:​
Строка 46: Строка 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  |полные права|все права|
  
-Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое,​ в восьмеричном представлении (оно короче).  +Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое,​ в восьмеричном представлении (оно короче). Так, например,​ права на файл всем и вся, ​соответствуют записи ​**777** (что аналогично ​символьному представлению **rwxrwxrwx**).
- +
-Для назначения обычных прав используются три восьмеричных цифры (9 битов). Первая цифра (или набор символов) определяет права для владельца файла, вторая - права для основной группы пользователя,​ третья - для всех остальных пользователей. Так, например, ​чтобы задать ​права на файл всем и вся, ​нужно установить права ​**777** (или **rwxrwxrwx** в символьном представлении).+
  
-Существуют также специальные биты, такие как **SUID**, **SGID** и **Sticky**-бит. ​Они ​влияют на запуск файла. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую,​ в различной технической литературе права обозначаются именно 4-мя цифрами,​ например **0744**. ​Почему-то многие стараются не использовать специальные биты, сетуя на безопасностьно, по-моему, их использование в некоторых ситуациях ​очень оправдано. Поговорим о них несколько позже.+Существуют также специальные биты, такие как **SUID**, **SGID** и **Sticky**-бит. ​**SUID**, **SGID** ​влияют на запуск файла, а **Sticky** влияет на определение владельца объектов в каталоге. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую,​ в различной технической литературе права обозначаются именно 4-мя цифрами,​ например **0744**. ​Многие стараются не использовать специальные биты, сетуя на безопасность ​(и не без ​основательно), но, в некоторых ситуациях ​без них не обойтись. Поговорим о них несколько позже.
  
 Давайте рассмотрим пример,​ итак: Давайте рассмотрим пример,​ итак:
Строка 70: Строка 70:
  
     * Первый символ (флаг) пустой:​ " - " ​ - для файлов. ​     * Первый символ (флаг) пустой:​ " - " ​ - для файлов. ​
-    * Следующие три символа (**rwx**) обозначают права для владельца файла, в данном случае полные права для пользователя **allexserv**.((По умолчанию,​ при создании ​объекта (файла или каталога) устанавливаются полные права ​для ​его ​владельца).)) +    * Следующие три символа (**rwx**) обозначают права для владельца файла, в данном случае полные права для пользователя **allexserv**.((При создании файла или каталога ​его ​владелец получает полные права ​на него.)) ​
     * Следующие три (- - -) - определяют права для группы **nogroup**,​ в нашем примере для всех пользователей группы **nogroup** доступ запрещен.     * Следующие три (- - -) - определяют права для группы **nogroup**,​ в нашем примере для всех пользователей группы **nogroup** доступ запрещен.
     * Ну и последние три символа (- - -) определяют права для всех остальных пользователей, ​ в нашем случае доступ запрещен. ​     * Ну и последние три символа (- - -) определяют права для всех остальных пользователей, ​ в нашем случае доступ запрещен. ​
Строка 79: Строка 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** поддерживает установку прав как в восьмеричном представлении,​ так и в символьном (маска режима доступа).
  
 Синтаксис команды прост: Синтаксис команды прост:
Строка 139: Строка 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 =====
Строка 157: Строка 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>​
Строка 182: Строка 211:
  
 Однако,​ в системе FreeBSD, если скомпилировать ядро с поддержкой **suiddir**,​ а так же смонтировать раздел с этой опцией,​ то, все объекты создаваемые в каталоге где установлен **SUID** будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью. Однако,​ в системе FreeBSD, если скомпилировать ядро с поддержкой **suiddir**,​ а так же смонтировать раздел с этой опцией,​ то, все объекты создаваемые в каталоге где установлен **SUID** будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью.
- 
-Замечание о **suiddir** прислал Sergey Koltogyan. 
 </​note>​ </​note>​
  
Строка 301: Строка 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>​Администрирование система Права_доступа }}