- Команда Chmod в Linux (Права доступа к файлам)
- Chmod Command in Linux (File Permissions)
- В этом руководстве рассказывается, как использовать chmod команду для изменения прав доступа к файлам и каталогам.
- Linux File Permissions
- С помощью chmod
- Символьный (текстовый) метод
- Численный метод
- Использование справочного файла
- Рекурсивно изменить права доступа к файлу
- Работа с символическими ссылками
- Изменение прав доступа к файлам навалом
- Вывод
- Права доступа Unix, SUID, SGID, Sticky биты
- Содержание
- Вступление
- Права доступа
- Команда chmod
- Опции
- Права
- Массовое назначение прав
- Биты SUID, SGID и Sticky
Команда Chmod в Linux (Права доступа к файлам)
Chmod Command in Linux (File Permissions)
В этом руководстве рассказывается, как использовать chmod команду для изменения прав доступа к файлам и каталогам.
В Linux доступ к файлам управляется через права доступа, атрибуты и владение файлами. Это обеспечивает доступ к файлам и каталогам только авторизованным пользователям и процессам.
Linux File Permissions
Прежде чем идти дальше, давайте объясним основную модель разрешений Linux.
В Linux каждый файл связан с владельцем и группой и ему назначены права доступа для трех разных классов пользователей:
- Владелец файла.
- Участники группы.
- Другие (все остальные).
Собственности файла можно изменить с помощью chown и chgrp команды.
Существует три типа прав доступа к файлам, которые применяются к каждому классу:
- Разрешение на чтение.
- Разрешение на запись.
- Разрешение на выполнение.
Эта концепция позволяет вам указать, каким пользователям разрешено читать файл, записывать в файл или выполнять файл.
Права доступа к файлам можно просмотреть с помощью ls команды:
Первый символ показывает тип файла. Это может быть обычный файл ( — ), каталог ( d ), символическая ссылка ( l ) или любой другой тип файла.
Следующие девять символов представляют права доступа к файлу, три тройки по три символа в каждом. Первый триплет показывает разрешения владельца, второй — разрешения группы, а последний триплет — разрешения всех остальных. Разрешения могут иметь различное значение в зависимости от типа файла.
В приведенном выше примере ( rw-r—r— ) означает, что владелец файла имеет права на чтение и запись ( rw- ), группа и другие пользователи имеют только права на чтение ( r— ).
Каждая из трех разрешений может состоять из следующих символов и иметь разные эффекты в зависимости от того, заданы они для файла или для каталога:
Влияние разрешений на файлы
разрешение | символ | Значение в файле |
---|---|---|
Read | — | Файл не читается. Вы не можете просматривать содержимое файла. |
r | Файл доступен для чтения. | |
Write | — | Файл не может быть изменен или изменен. |
w | Файл может быть изменен или изменен. | |
Execute | — | Файл не может быть выполнен. |
x | Файл может быть выполнен. | |
s | Если он найден в user триплете, он устанавливает setuid бит. Если он найден в group триплете, он устанавливает setgid бит. Это также означает, что x флаг установлен. Когда в исполняемом файле установлены флаги setuid или setgid , файл исполняется с правами владельца и / или группы. | |
S | То же самое, s но x флаг не установлен. Этот флаг редко используется в файлах. | |
t | Если он найден в others триплете, он устанавливает sticky бит. Это также означает, что x флаг установлен. Этот флаг бесполезен для файлов. | |
T | То же самое, t но x флаг не установлен. Этот флаг бесполезен для файлов. |
Влияние разрешений на каталоги (папки)
В Linux каталоги — это специальные типы файлов, которые содержат другие файлы и каталоги.
разрешение | символ | Значение в каталоге |
---|---|---|
Read | — | Содержимое каталога не может быть показано. |
r | Содержимое каталога может быть показано. (Например, вы можете перечислить файлы внутри каталога с помощью ls .) | |
Write | — | Содержимое каталога не может быть изменено. |
w | Содержимое каталога может быть изменено. (Например, вы можете создавать новые файлы , удалять файлы .. и т. д.) | |
Execute | — | Каталог не может быть изменен на. |
x | Каталог может быть перемещен с помощью cd . | |
s | Если он найден в user триплете, он устанавливает setuid бит. Если он найден в group триплете, он устанавливает setgid бит. Это также означает, что x флаг установлен. Когда в setgid каталоге установлен флаг, новые файлы, созданные в нем, наследуют идентификатор группы каталогов (GID) вместо идентификатора основной группы пользователя, создавшего файл. setuid не влияет на каталоги. | |
S | То же самое, s но x флаг не установлен. Этот флаг бесполезен для каталогов. | |
t | Если он найден в others триплете, он устанавливает sticky бит. Это также означает, что x флаг установлен. Если для каталога установлен бит закрепления, только владелец файла, владелец каталога или пользователь с правами администратора могут удалять или переименовывать файлы в каталоге. | |
T | То же самое, t но x флаг не установлен. Этот флаг бесполезен для каталогов. |
С помощью chmod
Команда chmod принимает следующую общую форму:
Только root, владелец файла или пользователь с привилегиями sudo могут изменять права доступа к файлу. Будьте особенно осторожны при использовании chmod , особенно при рекурсивном изменении разрешений.
Символьный (текстовый) метод
Синтаксис chmod команды при использовании символьного режима имеет следующий формат:
Первый набор флагов ( [ugoa…] ), флаги пользователей, определяет, для каких классов пользователей изменяются права доступа к файлу.
- u — Владелец файла.
- g — Пользователи, которые являются членами группы.
- o — Все остальные пользователи.
- a — Все пользователи, идентичные ugo .
Если флаг пользователя опущен, то по умолчанию используется флаг, a и разрешения, установленные umask , не затрагиваются.
Второй набор флагов ( [-+=] ), флагов операций, определяет, следует ли удалять, добавлять или устанавливать разрешения:
- — Удаляет указанные разрешения.
- + Добавляет указанные разрешения.
- = Изменяет текущие разрешения на указанные разрешения. Если после = символа не указано никаких разрешений , все разрешения из указанного пользовательского класса будут удалены.
Разрешения ( perms. ) можно явно задать с помощью либо ноль , либо один или несколько из следующих букв: r , w , x , X , s , и t . Используйте одну букву из набора u , g и o при копировании разрешений от одного к другому классу пользователей.
При настройке разрешений для нескольких пользовательских классов ( [,…] ) используйте запятые (без пробелов) для разделения символьных режимов.
Ниже приведены некоторые примеры использования chmod команды в символическом режиме:
Дайте членам группы разрешение на чтение файла, но не на запись и выполнение:
Удалить разрешение на выполнение для всех пользователей:
Отвратительно удалите разрешение на запись для других пользователей:
Удалите права на чтение, запись и выполнение для всех пользователей, кроме владельца файла:
То же самое можно сделать с помощью следующей формы:
Дайте разрешение на чтение, запись и выполнение владельцу файла, разрешения на чтение для группы файла и никаких разрешений для всех остальных пользователей:
Добавьте разрешения владельца файла к разрешениям, которые имеют члены группы файла:
Добавьте липкий бит в данный каталог:
Численный метод
Синтаксис chmod команды при использовании числового метода имеет следующий формат:
При использовании числового режима вы можете установить разрешения для всех трех пользовательских классов (владелец, группа и все остальные) одновременно.
NUMBER Может быть 3 или 4-значное число.
Когда используется 3-значное число, первая цифра представляет права владельца файла, вторая — группу файла, а последняя — всех остальных пользователей.
Каждое разрешение на запись, чтение и выполнение имеет следующее числовое значение:
- r (читай) = 4
- w (запись) = 2
- x (выполнить) = 1
- нет разрешений = 0
Число разрешений для определенного пользовательского класса представлено суммой значений разрешений для этой группы.
Чтобы узнать права доступа к файлу в числовом режиме, просто рассчитайте итоги для всех классов пользователей. Например, чтобы дать разрешение на чтение, запись и выполнение владельцу файла, разрешения на чтение и выполнение для группы файла и только разрешения на чтение для всех остальных пользователей, вы должны сделать следующее:
- Владелец: rwx = 4 + 2 + 1 = 7
- Группа: rx = 4 + 0 + 1 = 5
- Другие: rx = 4 + 0 + 0 = 4
Используя метод выше, мы подходим к числу 754 , которое представляет желаемые разрешения.
Для того, чтобы настроить setuid , setgid и sticky bit флаги используют четыре цифры номера.
Когда используется 4-значный номер, первая цифра имеет следующее значение:
- УИП = 4
- setgid = 2
- липкий = 1
- без изменений = 0
Следующие три цифры имеют то же значение, что и при использовании трехзначного числа.
Если первая цифра равна 0, ее можно опустить, а режим можно представить тремя цифрами. Числовой режим 0755 такой же, как 755 .
Для вычисления числового режима вы также можете использовать другой метод (двоичный метод), но он немного сложнее. Знание того, как рассчитать числовой режим с использованием 4, 2 и 1, достаточно для большинства пользователей.
Вы можете проверить права доступа к файлу в числовой записи, используя stat команду:
Вот несколько примеров использования chmod команды в числовом режиме:
Дайте владельцу файла права на чтение и запись, а также права на чтение только для членов группы и всех остальных пользователей:
Дайте владельцу файла права на чтение, запись и выполнение, права на чтение и выполнение для членов группы и никаких разрешений для всех остальных пользователей:
Дайте разрешения на чтение, запись и выполнение, а также прикрепите бит к указанному каталогу:
Рекурсивно установите разрешения на чтение, запись и выполнение для владельца файла и никаких разрешений для всех других пользователей в данном каталоге:
Использование справочного файла
—reference=ref_file Опция позволяет установить права доступа к файлу , чтобы быть таким же , как и у указанного эталонного файла ( ref_file ).
Например, следующая команда назначит права file1 на file2
Рекурсивно изменить права доступа к файлу
Чтобы рекурсивно работать со всеми файлами и каталогами в данном каталоге, используйте параметр -R ( —recursive ):
Например, чтобы изменить права доступа ко всем файлам и подкаталогам в /var/www каталоге, 755 вы должны использовать:
Работа с символическими ссылками
Символьные ссылки всегда имеют 777 разрешения.
По умолчанию при изменении разрешений символической ссылки chmod изменяются разрешения для файла, на который указывает ссылка.
Скорее всего, вместо изменения целевого владельца вы получите сообщение об ошибке «невозможно получить доступ к символической ссылке: отказано в доступе».
Ошибка возникает из-за того, что по умолчанию в большинстве дистрибутивов Linux символические ссылки защищены, и вы не можете работать с целевыми файлами. Эта опция указана в /proc/sys/fs/protected_symlinks . 1 значит включен и 0 отключен. Рекомендуется не отключать защиту символической ссылки.
Изменение прав доступа к файлам навалом
Иногда возникают ситуации, когда вам нужно массово изменить разрешения для файлов и каталогов.
Наиболее распространенным сценарием является рекурсивное изменение разрешений для файла веб-сайта и разрешений для 644 каталога 755 .
Используя числовой метод:
Используя символический метод:
Команда выполнит find поиск файлов и каталогов в папке /var/www/my_website и передаст каждый найденный файл и каталог chmod команде для установки разрешений.
Вывод
Команда chmod изменяет права доступа к файлу. Разрешения могут быть установлены с использованием символьного или числового режима.
Источник
Права доступа Unix, SUID, SGID, Sticky биты
Содержание
Поддерживаемые версии Ubuntu |
---|
Все (теоретически) |
Вступление
В Unix каждому файлу соответствует набор прав доступа, представленный в виде 9-ти битов режима. Он определяет, какие пользователи имеют право читать файл, записывать в него данные или выполнять его. Вместе с другими тремя битами, влияющими на запуск исполняемых файлов, этот набор образует код режима доступа к файлу. Двенадцать битов режима хранятся в 16-битовом поле индексного дескриптора вместе с 4-мя дополнительными битами, определяющими тип файла. Последние 4 бита устанавливаются при создании файлов и не подлежат изменению. Биты режима (далее права) могут изменяться либо владельцем файла, либо суперпользователем с помощью команды chmod.
Существует три пути управления доступом к файлу или каталогу. Было определено, что каждый файл должен иметь владельца (owner), группового владельца (group owner), а также может потребоваться доступ для всех остальных пользователей (everyone). Эти названия обычно приводятся как пользователь/группа/остальные (user/group/others) или коротко ugo. Реализация управления доступом к файлам и каталогам в Unix позволяет или запрещает доступ по трем флагам: флаг чтения (Read), флаг записи (Write), флаг выполнения (eXecute). Они представляются следующим образом:
flag | user | group | other |
---|---|---|---|
# | rwx | rwx | rwx |
Флаг типа (flag) может быть одним из следующих:
Флаг | Описание |
---|---|
— | Отсутствие флага |
l — лат. «л» | Символическая ссылка (symbolic link) |
d | Директория (directory) |
b | Блочное устройство (block device) |
c | Символьное устройство (character device) |
p | Канал, устройство fifo (fifo device) |
s | Unix сокет (unix domain socket) |
Права доступа
Посмотреть права доступа на объекты можно командой ls c ключем -l («л»). Также можно добавить ключ -a, для того,чтобы были отображены скрытые объекты:
Для назначения прав используются три группы флагов, первая определяет права для владельца, вторая — права для основной группы пользователя, третья — для всех остальных пользователей в системе.
Для файлов: r — право на чтение из файла; w — разрешает запись в файл (в частности перезапись или изменение); x — позволяет исполнить файл.
Для каталогов, флаги r w x имеют несколько отличный смысл: r — позволяет читать только имена файлов в каталоге; x — позволяет иметь доступ к самим файлам и их атрибутам (но не именам); w имеет смысл только в сочетании с x, и позволяет (в дополнение к x) манипулировать с файлами в каталоге (создавать, удалять и переименовывать). w без x — не имеет никакого эффекта.
Рассмотрим таблицу, чтобы было понятнее:
OCT | BIN | Mask | Права на файл | Права на каталог |
---|---|---|---|---|
0 | 000 | — — — | отсутствие прав | отсутствие прав |
1 | 001 | — — x | права на выполнение | доступ к файлам и их атрибутам 1) |
2 | 010 | — w — | права на запись | отсутствие прав |
3 | 011 | — w x | права на запись и выполнение | все, кроме доступа к именам файлов 2) |
4 | 100 | r — — | права на чтение | только чтение имен файлов |
5 | 101 | r — x | права на чтение и выполнение | чтение имен файлов и доступ файлам и их атрибутам 3) |
6 | 110 | r w — | права на чтение и запись | только чтение имен файлов |
7 | 111 | r w x | полные права | все права |
Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое, в восьмеричном представлении (оно короче). Так, например, права на файл всем и вся, соответствуют записи 777 (что аналогично символьному представлению rwxrwxrwx).
Существуют также специальные биты, такие как SUID, SGID и Sticky-бит. SUID, SGID влияют на запуск файла, а Sticky влияет на определение владельца объектов в каталоге. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например 0744. Многие стараются не использовать специальные биты, сетуя на безопасность (и не без основательно), но, в некоторых ситуациях без них не обойтись. Поговорим о них несколько позже.
Давайте рассмотрим пример, итак:
Для первой строки:
Восьмеричное обозначение прав для файла pro_ubuntu.zip: 0700.
Для второй строки (это каталог, о чем свидетельствует флаг «d»), по аналогии:
Восьмеричное обозначение в этом примере: 0755.
На практике для каталогов используется только три режима: 7 (rwx), 5 (r-x) и 0 (—).
В каталоге с режимом доступа 3 (-wx) можно создавать новые, переименовывать и удалять файлы и каталоги (если вы знаете их имя); читать, изменять, запускать файл (если достаточно на него прав, и опять же — вы знаете его имя). Можно даже менять права доступа на файлы и каталоги (если вы знаете имя). Но самое интересное, что если вы сможете перейти (по cd 5) ) в подкаталог такого каталога (а для этого вам опять нужно знать его имя), то там у вас будет «все в ожуре» (если конечно у этого подкаталога будет нормальный режим доступа).
Никакой рекурсивный поиск/удаление тоже не сможет залезть внутрь такого каталога — ему ведь нужны названия — а их из такого каталога — никак не получить.
Но не надо думать, что такой каталог полноценно заменяет крипто-контейнер (т.е. может использоваться для хранения очень секретных данных). Да, имен объектов из такого каталога никак не получить, однако если попытаться создать объект с именем, которое уже существует, то такая операция закончится неудачей (т.е. мы получим подтверждение, что такое имя уже есть). Так же можно пытаться открыть (как файл или как каталог) объект с произвольным именем, если такого имени нет, то мы получим ошибку. Безусловно имя может быть очень длинным и шансы угадать его могут быть не велики, но не надо забывать, что права доступа могут сменить как владелец каталога так root. Да и пути доступа могут сохраниться в различных логах и файлах истории.
Команда chmod
Права устанавливаются командой chmod. Команда chmod поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа).
Синтаксис команды прост:
chmod
Опции
Из самых полезных и часто используемых опций можно выделить одну:
Права
Права можно записывать как в восьмеричном представлении так и в символьном. В восьмеричном представлении, для стандартных прав, указываются 3 восьмеричные цифры (1-я для владельца, 2-я для группы, 3-я для всех остальных. См. таблицу выше).
Другой способ назначения прав — это использование маски режима доступа (символьное представление). Помимо прав задается еще кому мы собираемся эти права выставлять:
Для назначения прав используются три знака: минус, плюс или равно:
Использование символьного представления позволяет редактировать права файлов более гибко:
Символьное назначение окажет неоценимую услугу, если требуется добавить права на объект к уже существующим правам.
Массовое назначение прав
Иногда, бывает, нужно массово установить права на определенный тип объектов, например, только на каталоги или только на файлы. Простое использование опции -R (рекурсия) здесь не поможет т.к. chmod будет проходить по всем объектам удовлетворяющим маске, что иногда вовсе не то, что нужно.
Итак, чтобы массово установить права на определенный тип объектов можно использовать один из вариантов (вообще, их очень много):
где -type d — каталоги, -type f — файлы. В данном примере chmod установит, начиная от текущего каталога 7) , права на все каталоги (включая подкаталоги) разрешения 770 (rwx rwx- — -) при этом не трогая права на другие объекты.
Более длинный вариант аналогичной операции:
где -type d — каталоги, -type f — файлы. В данном варианте chmod установит разрешения 775 на все файлы включая файлы в подкаталогах начиная от текущего.
Биты SUID, SGID и Sticky
Unix отслеживает не символьные имена владельцев и групп, а их идентификаторы (UID — для пользователей и GID для групп). Эти идентификаторы хранятся в файлах /etc/passwd и /etc/group соответственно. Символьные эквиваленты идентификаторов используются только для удобства, например, при использовании команды ls, идентификаторы заменяются соответствующими символьными обозначениями.
1000 — идентификатор (GID) дополнительной группы allexserv пользователя allexserv 8)
Если при создании пользователя основная группа не указана явно, то основной группой пользователя будет группа с тем же именем, что и имя пользователя. Например:
Что касается процессов, то с ними связано не два идентификатора, а 4-е: реальный и эффективный пользовательский (UID), а также реальный и эффективный групповой (GID). Реальные номера применяются для учета использования системных ресурсов, а эффективные для определения прав доступа к процессам. Как правило, реальные и эффективные идентификаторы совпадают. Владелец процесса может посылать ему сигналы, а также изменять приоритет.
Процесс не может явно изменить ни одного из своих четырех идентификаторов, но есть ситуации когда происходит косвенная установка новых эффективных идентификаторов процесса. Дело в том, что существуют два специальных бита: SUID (Set User ID — бит смены идентификатора пользователя) и SGID (Set Group ID — бит смены идентификатора группы). Когда пользователь или процесс запускает исполняемый файл с установленным одним из этих битов, файлу временно назначаются права его (файла) владельца или группы (в зависимости от того, какой бит задан). Таким образом, пользователь может даже запускать файлы от имени суперпользователя.
Вобщем, одним словом установка битов SUID или SGID позволит пользователям запускать исполняемые файлы от имени владельца (или группы) запускаемого файла. Например, как говорилось выше, команду chmod по умолчанию может запускать только root. Если мы установим SUID на исполняемый файл /bin/chmod, то обычный пользователь сможет использовать эту команду без использования sudo, так, что она будет выполнятся от имени пользователя root. В некоторых случаях очень удобное решение. Кстати по такому принципу работает команда passwd, c помощью которой пользователь может изменить свой пароль.
Однако, в системе FreeBSD, если скомпилировать ядро с поддержкой suiddir, а так же смонтировать раздел с этой опцией, то, все объекты создаваемые в каталоге где установлен SUID будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью.
Установить SUID и SGID можно командой chmod:
Источник