Урок 17. Права доступа Linux к файлам и папкам
В 3-м уроке была рассмотрена команда ls -l , а также краткое описание к выводу команды. В выводе команды также присутствует информация о правах доступа к данному файлу:
Права доступа разделены на 3 группы:
- владелец файла
- группа владельцев файла
- другие пользователи
Для указания уровня доступа к файлу или каталогу используются следующие атрибуты.
- r (read) — чтение файла разрешено, то есть можно просматривать его содержимое, открывать в текстовом редакторе.
- w (write) — запись файла разрешена, то есть можно его редактировать, переименовывать, удалять.
- x (execute) — исполнение файла разрешено. Это касается исполняемых файлов.
- r (read) — разрешено просматривать содержимое каталога, то есть можно воспользоваться командой ls и посмотреть какие файлы и каталоги содержаться в данном каталоге.
- w (write) — используется совместно с атрибутом x (execute). Позволяет удалять и переименовывать файлы в каталоге.
- x (execute) — при использовании совместно атрибутом r (read) позволяет увидеть атрибуты файла, то есть его размер, дату модификации, права доступа. Одним словом позволяет полноценно воспользоваться командой ls -l . При использовании совместно с атрибутом w (write) позволяет перейти в каталог командой cd , удалять и переименовывать файлы.
Рассмотрим вышесказанное на примерах.
У нас в системе имеются 2 пользователя: teacher (учитель) и student (студент). У каждого из них имеется свой домашний каталог, в котором они могут хранить свои файлы.Так как пользователь student не является владельцем каталога /home/teacher и не относится к группе его владельцев, то для него будут действовать права доступа для категории остальных пользователей.
Домашний каталог пользователя teacher имеет следующие права доступа:
Пользователь student хочет посмотреть какие файлы имеются в данном каталоге:
Доступа нет. Попробуем хотя бы перейти в этот каталог:
Пользователь teacher решил всем разрешить просмотр его файлов в каталоге:
Попробуем узнать что у него хранится:
Мы узнали имена файлов, но абсолютно ничего не знаем какие это файлы и их атрибуты. То есть атрибут r (read) каталога позволяет просматривать имена (только имена) файлов с помощью ls , но не выдает о них дополнительную информацию. Попробуем перейти в этот каталог:
И снова неудача. Попробуем установить права записи, то есть атрибут w (write):
Теперь попробуем выполнить все те же действия, что и до этого:
Как видно атрибут w (write) сам по себе не работает. Удалим этот атрибут и установим x (execute):
доступ к данному каталогу у нас имеется при наличии установленных прав на чтение и исполнение.
Попробуем теперь удалить или переименовать любой файл:
Операция запрещена, так как у нас для каталога teacher/ не установлен атрибут w (write).
Но ведь сами файлы в каталоге имеют полный доступ для всех остальных пользователей.. Почему мы ничего не можем сделать с данными файлами?
Все верно, файлы имеют полный доступ для всех, однако система прежде всего смотрит на то, какие права доступа у каталога, так как файлов может быть очень много и менять права доступа каждого из них довольно утомительно и легко можно допустить ошибку. Гораздо проще установить определенные права доступа на каталоги и перемещать соответствующие файлы в эти каталоги. Кроме того, операции по удалению и перемещению файлов регламентируются правами доступа данного каталога, а не файла.
Когда для каталога запрещена запись, то остальным пользователям запрещено следующее:
- удалять файлы из каталога
- перемещать/переименовывать файлы
- создавать жесткие ссылки
- создавать новые файлы и каталоги в данном каталоге
Однако данная политика не накладывает ограничения на редактирование и копирование файлов. Можно с легкостью отредактировать и сохранить файл. Кроме того, мы можем скопировать файл в свой каталог. Причем файл будет иметь совершенно иные атрибуты. Например, скопируем файл Worknotes.txt в каталог /home/student/:
Теперь у скопированного файла новый владелец и другие права доступа. Здесь данные операции регламентируется уже правами доступа самого файла.
А что можно делать с файлами, когда установлен атрибут x (execute)?
Можно делать следующее:
- просматривать атрибуты файлов (совместно с атрибутом r ) с помощью команды ls -l
- переходить в каталог командой cd
- запуск исполняемых файлов
- совместно с атрибутом w (write) можно удалять и перемещать файлы
Теперь установим атрибут w (write) для каталога /home/teacher/ и посмотрим, что произойдет:
Теперь можно делать абсолютно что угодно с файлами и каталогами.
То есть атрибут w (write) работает всегда в паре с x (execute)?
Все верно, но это в отношении каталогов. У файлов данные атрибуты независимы друг от друга.
А как быть, если пользователь student хочет предоставить доступ к своим файлам определенным пользователям и запретить остальным?
Для этого существует группа владельцев файла. Пользователю student достаточно поменять группу владельцев файла на teache r и предоставить соответствующие права, а всем остальным — запретить:
А как поменять группу?
С помощью команды chgrp [опции] группа файл .
Например, чтобы поменять группу владельцев файла Linux.txt на teacher введем chgrp teacher Linux.txt.
А если имеется много файлов, то как это сделать быстрее и проще?
Есть специальная опция -R ( —recursive ). Например, имеется каталог Homework/ с файлами:
Применим команду chgrp -R teacher Homework/ :
А можно поменять и самого владельца?
Конечно, существует команда chown [опции] владелец файл .
Однако в тех случаях, когда нам необходимо поменять сразу и группу и владельца, то приходится выполнять 2 команды и это не очень удобно. Поэтому команда chown позволяет менять одновременно и владельца и группу chown [опции] владелец:группа файл. Опция -R ( —recursive ) действительна и для данной команды.
А как можно менять сами права для группы владельцев и остальных пользователей?
Существуют 2 способа:
Используются следующие обозначения объектов, которым предоставляем права доступа:
Права меняются с помощью команды chmod [опции] права_доступа файл. Например, файл notes.txt имеет следующие права доступа:
Запретим остальным пользователям редактирование данного файла:
Теперь разрешим группе владельцев исполнение данного файла:
То есть мы указываем объект ( u , g или о ), а затем с помощью символов управления назначаем или удаляем соответствующие права.
А можно одновременно выполнить вышеуказанные действия в одной команде?
Конечно, достаточно выполнить chmod o-w,g+x notes.txt и результат будет тот же.
А можно одновременно в одной команде выполнить следующее:
- владельцу назначить rw-
- группе назначить r-x
- остальным назначить r— ?
Конечно можно. Для этого существует символ ” = ” : chmod u=rw,g=rx,o=r notes.txt.
А если нужно всем назначить одинаковые права, например r-x , то воспользуемся chmod a=rx notes.txt :
Существует и другой способ указать права доступа — с помощью восьмеричного представления. Не будем вдаваться в подробности булевы алгебры и двоично-восьмеричного преобразования. Просто запомним таблицу: