воскресенье, 11 марта 2018 г.

Права в Linux

Я всегда не особо понимал логику прав в Linux. Даже со стандартными периодически возникали вопросы. Недавно решил взять и разобраться. Как обычно - ничего сложного, в принципе. Далее моя короткая шпаргалка. 

Возникали ли у вас проблемы с правами в Linux? Ответьте на вопрос: Получится ли у пользователя создать файл в папке, где он выступает как её владелец и имеет права rw на нее? Получится ли удалить файл из этой папки? Картинка ниже. Я залогинен под собой, в корне есть папка владельцем которой я являюсь. У меня есть права на запись и чтение в эту папку. 

Для "линуксоидов", думаю, ответ очевиден. Нет, ни создать файл, ни удалить, ни даже толком просмотреть файлы в такой директории не получится. А все потому, что у меня нет прав на исполнение в этой папке. Такие дела…

Итак, с точки зрения самых базовых знаний о правах в линукс системе является следующее.
Есть как минимум три способа управлять доступом к директориям и файлам:
  • Standard permissions 
  • Extended permissions 
  • Access control lists

Standard permissions

Тут все просто, но не очень. ) Бывают три вида прав
  • R - read - права на чтение
  • W - write - права на запись
  • X - execute - права на запуск
Все эти права могут быть применены как на уровне групп, так и на уровне пользователей. Более того, права эти могут применяться к директориям и файлам независимо друг от друга. И если с файлами все более или менее понятно, то с директориями немного иначе. 
Как мы видели, W на папку не дает права удалять и добавлять файлы, а R хоть и дает запустить ls, по подробностей не выводит. Почему? Потому что X дает не только права на переход в директорию, но еще и "открывает" дополнительную информацию о её содержимом. Более того, модифицировать содержимое папок без прав на исполнение не получится. 

То есть, для того чтобы удалять и создавать файлы в директории, нужны не только права на запись, но и на исполнение. 

И тут я задумался. Ведь если пава на папку будут WX, он сможет перейти в папку и модифицировать там файлы, но не будет иметь возможности просмотреть результаты его труда. Ну, собственно да. 

Заходим в директорию, на которую иметь WX права. Создаем, удаляем, но просмотреть не можем. )

Extended permissions

Стандартные права на то и стандартные, чтобы быть дополненными расширенными. Есть у нас четыре пользователя в двух группах. Ниже табличка с группами и пользователями. 


У каждой группы есть своя папка, в которой они пишут свои файлы. Так вот, выставив нужные права и владельцев на папки мы столкнемся с двумя проблемами. 

Во-первых, по умолчанию пользователи будут создавать файлы с собой в качестве владельца, что в целом хорошо. Плохо то, что в группе будет их приватная группа. Это значит, что никто, кроме владельца не сможет модифицировать файл. 

Во-вторых, даже каким-то образом разрешив модифицирование файлов в shared группах, мы столкнемся с другой проблемой. Пользователи смогут удалять файлы друг друга, а это плохо. 

Помогут нам в решении этих проблем два расширеных атрибута
  • GroupID (s) - Включает наследование прав группы для всех созданных файлов в директории
  • StickyBit (t) - Разрешает удалять файлы, только если пользователь владелец файла или директории целиком
Проиллюстрируем данную информацию. Ниже видно тех самых четырех пользователях в двух группах. 

Итак иллюстрируем сразу две проблемы. Заходим под ivan и создаем файл в /kgb. Заходим под olga и пытаемся его модифицировать (мы же в общей папке). У нас не получается, расстраиваемся и удаляем и не по-товарищески удаляем файл. 

Решаем эти проблемы установкой GroupID и StickyBit на директории. 

Повторяем сценарий. Теперь olga может записать в файл (ведь группа теперь kgb и она в ней состоит), а удалить нет (stickybit мешает, она не владелец файла или директории). 

Access Control Lists

Расширенных прав оказалось недостаточно. Как дать права сразу двум группам одновременно? Именно с помощью ACL. Попутно можно задать права по умолчанию для всех создаваемых файлов. 

Итак, что если члены kgb должны иметь права на просмотр директории /sobes. Звучит вполне логично. Провернем это при помощи ACL. 

Рекурсивно к папке /sobes добавляем ACL, в котором добавляем группу kgb как rx. Делаем это для всех новых файлов по дефолту. Как видно, теперь у папки есть литера Т. Это значит, что на этой папке помимо всего прочего висит ACL. Проверяем getfacl. Видно, что прошлые изменения никуда не ушли, но теперь kgb может смотреть содержимое всех файлов в директории.
Так ли это? 
Под katya создаем файлик в директории /sobes. Далее под пользователем olga (группа kgb) заходим в директорию /sobes и без труда смотрим содержимое директории и файла. 
Вот так.

PS.: Думаю, надо на английский перевести с этими всеми kgb, ivan и katya... )

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

Отправить комментарий