CEX.io

воскресенье, 17 апреля 2011 г.

Права доступа в Linux (chmod/chown)

Каждый файл или папка в Linux имеют свои права доступа.

Есть 3 типа прав:
     чтение(r),запись(w),выполнение(x)

Права определяются для 3-х типов пользователей:
     владельца(u), группы(g), всех других (o)

итак права каждого файла, это 9 бит информации (3 типа прав * 3 типа пользователей), соответственно каждый бит может быть установлен (=1) доступ разрешен, или сброшен(=0) доступ запрещен.

при назначении прав принято использовать восьмеричную(octal) систему счисления.

текстовое представление прав(10 символов):
      - rwxr- - r - -
      0123456789

символ в позиции 0:
      "-" -  обычный файл, "d" - папка, "l" - ссылка

символы в позиции 1-3:
      "rwx" - права владельца

символы в позиции 4-6:
      "r - -" - права для группы


символы в позиции 7-9:
      "r - -" - права для всех остальных

таблица для определения прав:
                                       
восьмеричноетекстовоедвоичноеописание
0 - - - 000 Все типы доступа запрещены
1 - - x 001 Разрешено выполнение
2 - w- 010 Разрешена запись
3 - wx 011 Разрешена запись и выполнение
4 r - - 100 Разрешено чтение
5 r - x 101 Разрешено чтение и выполнение
6 r w- 110 Разрешено чтение и запись
7 rwx 111 Все типы доступа разрешены

Как видно из таблицы, права легко вычисляются
простым суммированием. 1=выполнение, 2=запись, 4=чтение.
например требуется выполнение(1) и чтение(4), получаем 1+4=5

пример 644:
      - владелец(u) чтение и запись
      - группа(g) только чтение
      - другие(o) только чтение

пример 755:
      - владелец(u) все права
      - группа(g) чтение и выполнение
      - другие(o) чтение и выполнение

в языках программирования например таких как C,
к правам добавляют 0 в начале каждого числа, что означает, что число восьмеричное, т.е. пишут 0644 вместо 644. При изменении прав с коммандной строки как правило этого не требуется.

Четырехзначное представление прав(4755), дополнительные права
биты SUID, SGID, sticky:
  • SUID или setuid: изменить "User ID" во время выполнения
  • SGID или setgid: изменить "Group ID" во время выполнения
  • sticky бит: запрещает удаление для всех пользователей кроме владельца. Ранее бит означал "держаться" в памяти после завершения процесса

Таблица. Числовое представление дополнительных прав:
                                       
восьмеричноедвоичноеописание
0 000 Нет дополнительных прав
1 001 Установлен sticky бит
2 010 Установлен setgid бит
3 011 Установлены sticky и setgid биты
4 100 Установлен setuid бит
5 101 Установлены setuid и sticky биты
6 110 Установлены setuid и setgid биты
7 111 Все дополнительные права разрешены

Текстовое представление дополнительных бит:
дополнительные биты обозначаются следующими символами:
      "S","s" - SUID, SGID
      "T","t" - sticky бит
позиция этих бит, совпадает с позициями (3,6,9) прав выполнения "x"
впри этом, если прав на выполнение нет используется "верхний регистр" т.е. большие символы. Если права на выполнение установлены используются "нижний регистр" т.е. маленькие символы.

примеры:

установлен SUID:
- r w  s -  -  -  -  -  -   установлены биты SUID и выполнение для владельца
- r  -  S -  -  -  -  -  -   установлен бит SUID, не установлен бит выполнения

установлен SGID:
- r w x r w s  -  -  -   установлены биты SGID и выполнение для группы
- r w x r -  S  -  -  -   установлен бит SGID, не уст. выполнение для группы

установлен sticky бит:
- r w x r w x r w t   установлены биты sticky и выполнение для других
- r w x r w x r  - T   установлен sticky бит, но не уст. выполнение для других

отличия действия прав, при установке на файлы и папки:
                             
правафайлыпапки
чтение чтение содержимогополучение списка файлов
запись запись содержимогоизменение списка файлов
(создание,удаление,переименование)
выполнениефайл можно выполнитьпользователь или процесс, может сделать папку "текущей/рабочей"
SUID Установить "User ID" при выполнении Перекрыть идентификатор пользователя при создании файла/папки (использовать идентификатор владельца корневой папки)
SGID Установить "Group ID" при выполнении Перекрыть идентификатор группы при создании файла/папки (использовать идентификатор группы корневой папки)
sticky запретить удаление всем, кроме владельца запретить удаление всем, кроме владельца

команда изменеия прав chmod:
    chmod [-R] права файл/папка

"-R" применить права рекурсивно ко всем файлам и подпапкам

примеры:
    chmod -R 755 folder/
    chmod 644 file
    и т.д.

есть возможность менять права не целиком, а лишь добавлять или отменять права только определенным группам пользователей
используя символы вместо восьмеричных чисел.
   "u" - пользователь/владелец
   "g" - группа пользователей
   "o" - остальные пользователи
   "a" - все группы пользователей

формат прав [ugoa][[+-=][perms], ...

примеры:
   chmod -R a+x folder/  выполнение для всех групп рекурсивно
   chmod a+rx file          чтение и выполнение для всех
   chmod u+rx,g-rx file   добавить чтение и выполнение для владельца, и
                                      отозвать права для группы
   chmod a+r,o= file       добавить чтение для всех типов групп и отозвать
                                      все права у всех других пользователей

команда изменения владельца chown:

chown [-R] владелец:группа файл/папка

примеры:
   chown -R 0:0 folder/  установить владельца/группу = root рекурсивно
   chown myuser:mygroup file установить myuser/mygroup для файла

PS:
    источник

Комментариев нет: