Курс по сетевым технологиям
A A A

В 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 имеет следующие права доступа:

Права доступа каталога 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 достаточно поменять группу владельцев файла на teacher и предоставить соответствующие права, а всем остальным - запретить:

Изменена группа пользователей

А как поменять группу? 

С помощью команды chgrp [опции] группа файл.

Например, чтобы поменять группу владельцев файла Linux.txt на teacher введем chgrp teacher Linux.txt.

 

А если имеется много файлов, то как это сделать быстрее и проще? 

Есть специальная опция -R (--recursive). Например, имеется каталог Homework/ с файлами:

Рекурсивное отображение каталога

Применим команду chgrp -R teacher Homework/:

Рекурсивное изменение группы пользователей

А можно поменять и самого владельца? 

Конечно, существует команда chown [опции] владелец файл. 

Однако в тех случаях, когда нам необходимо поменять сразу и группу и владельца, то приходится выполнять 2 команды и это не очень удобно. Поэтому команда chown позволяет менять одновременно и владельца и группу chown [опции] владелец:группа файл. Опция -R (--recursive) действительна и для данной команды.

 

А как можно менять сами права для группы владельцев и остальных пользователей? 

Существуют 2 способа:

  • символьный
  • числовой



Символьный способ 

Используются следующие обозначения объектов, которым предоставляем права доступа:

  • u - владелец
  • g - группа
  • o - остальные
  • а - все перечисленные

 

Операции управления:

  • - запретить
  • + разрешить
  • = заменить права на указанные

 

Права меняются с помощью команды chmod [опции] права_доступа файл. Например, файл notes.txt имеет следующие права доступа:

Права доступа файла notes.txt

Запретим остальным пользователям редактирование данного файла: 

chmod o-w notes.txt

Установлен только атрибут четния

Теперь разрешим группе владельцев исполнение данного файла: 

chmod g+x notes.txt

Установлены атрибуты rwx

То есть мы указываем объект (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:

Установлены атрибуты rx


Числовой способ 

Существует и другой способ указать права доступа - с помощью восьмеричного представления. Не будем вдаваться в подробности булевы алгебры и двоично-восьмеричного преобразования. Просто запомним таблицу: 

Символьное представление прав доступа

Числовое представление

r (read)

4

w (write)

2

x (execute)

1



А вот как используется числовое представление прав доступа: 

Символьное представление

Операция

Цифровое представление

rwx

4 + 2 +1

7

rw-

4 + 2 + 0

6

r--

4 + 0 + 0

4

r-x

4 + 0 + 1

5

-wx

0 + 2 + 1

3

-w-

0 + 2 + 1

2

--x

0 + 0 + 1

1

---

0 + 0 + 0

0

 

Так как у нас права доступа разделяются на 3 категории (владелец, группа, остальные), то применяется трехзначное обозначение. Например, чтобы абсолютно всем назначить права rwx, то применяется команда chmod 777 notes.txt

Чтобы остальным пользователям разрешить только чтение файла, то есть r--, выполним chmod 774 notes.txt 

Если хотим группе владельцев назначить права r-x, а остальным пользователям вообще все запретить, то выполним chmod 750 notes.txt.

 

Нет смысла запоминать все комбинации, достаточно запомнить числовое значение каждого символа и сложить все 3 цифры.

Теперь представим такую ситуацию. На сервере имеется общий каталог Shared/, который содержит файлы всех пользователей. Такое явление обычное в компаниях, когда у пользователей недостаточно места на диске и  они используют сетевые ресурсы. Чтобы пользователи могли добавлять и удалять свои файлы установлены все разрешающие права:

Отображение каталога Shared

Но в таком случае любой сможет удалить или переименовать файлы. Не кажется ли такое решение небезопасным? 

Это так, однако в Linux есть небольшое решение. Существует специальный признак “sticky bit”, который устанавливается только для каталогов. Когда он установлен, то только владельцы файла могут его удалять и переименовывать. Остальным пользователям операции по удалению и переименованию файлов запрещены.

 

Как установить данный признак? 

Можно это сделать 2-мя способами: символьным и числовым: 

chmod +t Shared/ или chmod 1777 Shared/, то есть в начало добавляется 1.

 

А как узнать, что этот признак установлен? 

Если признак установлен, то символ x (execute) в категории остальных пользователей заменяется на символ t:

Установлен sticky bit

Теперь пусть пользователь student удалит файлы пользователя teacher:

Неудачная попытка удалить файл

Как видно операция запрещена.

 

А как удалить данный признак? 

Следующими командами: 

chmod -t каталог или chmod 0xxx каталог.

 

Существуют еще 2 специальных признака: suid и sgid.

 

Для чего они используются? 

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

 

А что это могут быть за файлы? 

Например, утилиты passwd, visudo, chfn, gpasswd, useradd, groupadd, chgrp, chown и так далее.

Данные утилиты работают с такими файлами, как /etc/shadow, /etc/passwd, sudoers и т.д. Редактировать данные файлы может только суперпользователь. Поэтому в некоторых случаях и устанавливаются признаки suid или sgid.

 

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

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

 

А как узнать, что такой признак установлен? 

suid устанавливается для владельца файла, sgid - для группы владельцев. Если он установлен, то на месте символа x (execute) присутствует символ s:



А как установить данные признак? 

Опять же 2-мя способами: символьным и числовым.

 

Установка suid: 

chmod u+s файл или chmod 4xxx файлто есть в начало добавляется 4.

 

Установка sgid: 

chmod g+s файл или chmod 2xxx файлто есть в начало добавляется 2.

 

А как удалить признак s? 

Одной из команд : 

chmod u-s файлchmod g-s файл или просто chmod 0xxx файл.

 

Список используемых команд:

chgrp группа файл - смена группы владельцев файла

chown владелец файл - смена владельца файла

chown владелец:группа файл - смены владельца и группы владельцев файла

chmod права_доступа файл - смена прав доступа к файлу