Изучаем Linux. Шаг 4. Права доступа к файлам и директориям

В прошлый раз мы знакомились с пользователями системы Linux, созданием их, удалением и проч. Сегодня важная тема прав доступа к файлам и директориям. Когда знакомились с командами чтения каталогов, то видели в выводимом списке последовательности символов типа «drwxr-xr-x» в каждой строке. Вот о значении этих букв, определяющих права доступа к файлам и директориям, сегодня и пойдет речь.

Как организован доступ к файлам и директориям

Каждый объект (файл или директория) имеет набор ограничителей, регулирующих правила взаимодействия пользователей с ними. Это важно, т. к. Linux система многопользовательская, и учетных записей может быть много с разными уровнями доступа к тем или иным ресурсам.

Чтобы успешно двигаться дальше, давайте примем, что на данный момент в системе у нас есть два пользователя. Один – тот, которого мы создавали при установке Linux на виртуальную машину (в моем случае это «andrew»), и который наделен админскими привилегиями. Второй – «test_noadm», с минимальным набором прав. Это нам пригодится для понимания того, что кому доступно. Ну и конечно же у нас есть суперпользователь – «root».

Как обычно, использовать будет терминал. Для начала перейдем в корневую папку диска (не пользователя, а именно диска) и командой просмотра содержимого каталога выведем на экран подробную информацию:

ls -l

Права доступа Linux

Что-то подобное мы уже видели, но давайте остановимся подробнее на том, что же нам отобразили.

В данном случае у нас несколько полей, а именно семь:

  1. Тип объекта и права доступа владельца, группы и остальных пользователей.
  2. Цифра показывает количество ссылок на файл/директорию.
  3. Владелец файла/директории.
  4. Группа, которой принадлежит файл/директория.
  5. Размер файла/директории.
  6. Дата создания или последнего изменения объекта.
  7. Наименование файла/директории.

Тип объекта можно определить по первому символу первого поля:

  • «-» - файл.
  • «b» - файл блочного устройства.
  • «c» - файл символьного устройства.
  • «d» - директория.
  • «l» - Символическая ссылка (link)
  • «p» - Туннель или именованный туннель (pipe)
  • «s» - файл сокетов (socket)

Например, «lib -> usr/lib» в нашем примере – это ссылка («l») «lib» на каталог «usr/lib», «var» - директория («d»), а «swapfile» - файл («-»). Просто файл.

Что можно сделать с файлом и директорией (прочитать, изменить, запустить или вообще ничего нельзя) определяется комбинацией символов начиная со второго.

Права доступа

Наверняка уже заметили, что номенклатура символов в этом поле невелика. По сути, их только четыре:

  • «-» - доступа к файлу/директории нет.
  • «r» - разрешено чтение из файла/директории.
  • «w» - разрешено изменение файла/директории.
  • «x» - исполняемый файл (например, скрипт)

Права доступа сгруппированы в три группы по три символа, итого девять. Группы означают:

  1. Первые три символа задают права доступа для владельца файла.
  2. Вторая тройка символов определяет правда доступа группы, к которой принадлежит файл/директория.
  3. Последняя тройка регламентирует права остальных пользователей (не владельца и не членов группы файла/директории).

Права доступа к файлам и директориям рассмотрим на примерах. Будем использовать каталог home. В нем обычно размещаются домашние каталоги пользователей. В разделе, описывающем права доступа к этой директории находится строка «rwxr-x---». Первый символ отбрасываем, т. к. значение «d» сообщает, что мы имеем дело с каталогом.

Разберемся с этими символами подробнее. Для примера будем использовать домашний каталог вашего пользователя, у меня это «andrew».

Первые три («rwx») определяют права доступа владельца (в данном случае «andrew») и разрешают ему читать каталог (буква «r»), модифицировать его (буква «w») и запускать на выполнение из него какие-либо программы, скрипты и т. п.

Вторая тройка («r-x») относится к группе, и если чтение и выполнение так же разрешено, то вот модифицировать каталог нельзя, что определяется символом дефиса. Давайте это проверим.

Переключимся на пользователя «root»

su

Сначала прочитаем содержимое каталога /home. Видим в нем две вложенные директории, имена которых соответствуют существующим у нас сейчас учетным записям пользователей «аndrew» и «test_noadm».

Создадим новую директорию, например, «temp»:

mkdir temp

Выводим на экран текущее содержимое директории «/home»:

ls –l

Права доступа Linux

Результат на скриншоте. К каталогу «andrew» имеет полный доступ только владелец с тем же именем, члены группы этого пользователя могут читать директорию и запускать на выполнение программы. Остальным же пользователям доступ в этот каталог закрыт.

Созданный только что от имени суперпользователя каталог «temp» членам группы и остальным пользователям разрешает читать его и исполнять (запускать скрипты, содержащиеся в нем). Каталог «temp-noadm» принадлежит одноименному пользователю и права доступа к нему аналогичные каталогу «andrew».

Давайте проверим на практике. Перелогинимся на пользователя «andrew» (su andrew). Сначала зайдем в каталог «temp» (cd temp). Сейчас он пуст. Создадим тут каталог «test»:

mkdir test

Нас пошлют подальше с отказом в доступе. Правда, мы все же можем решить задачу, если будем создавать каталог от имени администратора, которому такие права даны, т. е. командой:

sudo mkdir test

На данном этапе это нам не столь интересно. Выйдем опять в каталог /home:

cd ..

Теперь зайдем в домашний каталог пользователя «test_noadm»:

cd test_noadm

Опять нам отказано в доступе. Если не забыли, в третьей группе прав доступа к каталогу «test_noadm» стоят одни дефисы. Если мы выполним те же действия от имени пользователя «test_noadm», то ситуация будет практически той же, за исключением того, что в каталоге «temp» мы ничего не сможем создать или изменить, и лазейки в виде выполнения команд от имени администратора (sudo) у этого пользователя нет.

Приведем все в первоначальный вид и, переключившись на суперпользователя, удалим наш тестовый каталог «temp» командой:

rmdir temp

Особенности ссылок на файл/каталог

Мы уже видели ссылки, когда рассматривали содержимое корневой директории нашего накопителя. В строках, описывающих ссылки всегда указан полный набор прав:

Только не стоит обманываться. Реальные ограничения указаны в файле/каталоге, на который указывает ссылка. Для примера посмотрим на ссылку «lib», которая указывает на каталог «/usr/lib». Ссылка разрешает все и всем. Если же мы перейдем в каталог «/usr» и выведем на экран его содержимое, то окажется, что вложенный каталог «/lib» уже не столь щедр и позволяет вносить изменения в его содержимое только владельцу:

Права доступа Linux

Редактирование прав доступа

Опять будем все изучать на практике. Если не переключились на учетную запись администратора, то предлагаю сделать это. Перейдем в каталог «/tmp»:

cd /tmp

Содержимое сейчас нас мало интересует. Для экспериментов создадим файл «testfile.txt», воспользовавшись текстовым редактором. Я буду использовать «nano»:

nano testfile.txt

Откроется окно редактора, можно ввести какую-нибудь строку, или оставить файл пустым. Я добавлю строчку «Первая строка текста». Теперь нажимаем комбинацию клавиш «Ctrl»+«O» и затем  «Ctrl»+«X». Теперь прочитаем содержимое каталога. Нас интересует строчка, описывающая созданный только что файл. Результат на скриншоте.

Права доступа Linux
Указанные права доступа к файлам и директориям говорят, что этот файл доступен для чтения и записи владельцу, а члены группы и остальные пользователи могут только читать файл. Проверим или поверим? Уверен, вы сами сможете это сделать, если переключитесь на своего пользователя и попытаетесь отредактировать этот файл. Будет опять ошибка доступа и недостаток прав.

Давайте исправим ситуацию. Для изменения прав доступа к объектам используется команда «chmod».  У нее есть несколько параметров, но на данном этапе они нам не нужны и не будем отвлекаться на это.

Синтаксис команды требует, чтобы мы указали кому будем добавлять права доступа. Делается это использованием символов:

  • «u» - изменяем права доступа для владельца файла/каталога.
  • «g» - то же для группы
  • «o» - то же для остальных пользователей
  • «a» - для всех.

Дадим право редактировать файл «testfile.txt» остальным пользователям. Таким образом, команда будет выглядеть так:

chmod o+w testfile.txt

Проверим что изменилось:

ls -l

Права доступа Linux

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

su andrew

В вашем случае вместо «andrew» будет другие имя. Открываем файл «testfile.txt» и, например, допишем строчку «Вторая строка текста». Нажимаем комбинацию клавиш для сохранения внесенных изменений, и теперь нас кротко спрашивают об имени файла, под которым мы сохраним свой титанический труд, и после выходим. Никаких жалоб на недостаток прав не последовало.

Аналогично удаляются права доступа, только в данном случае вместо знака «+» поставим «-». Например, если мы хоти запретить остальным пользователям редактировать созданный нами файл, то можно сделать это командой:

chmod o-w testfile.txt

Символ «=» не добавляет и не убирает права, а заменяет существующие теми, что указаны в команде. Например, какой-то файл разрешен пользователям только для выполнения. Если мы дадим команду «chmod o=w какой-то файл», то мы дадим разрешение только на запись в файл, а чтение и выполнение будут запрещены.

Можно использовать альтернативный способ изменения прав доступа к объектам, если воспользоваться числовой кодировкой. Каждая тройка символов заменяется числом, которое формируется следующим образом:

  • 4 - разрешение на чтение.
  • 2 – разрешено редактирование файла
  • 1 – разрешено выполнение файла

Итоговое значение состоит из суммы этих цифр. Если конкретнее, то если мы хотим открыть файл только на чтение, то пишем 4, если на чтение и запись, то сумму 4+2, т. е. 6. Если еще и на выполнение – то 4+2+1, т. е. 7. И так для каждой тройки (владелец/группа/пользователи).

Например, первоначально наш файл имел разрешение на чтение и запись владельцу (4+2=6), на чтение членам группы (4) и остальным пользователям (4). Нашу команду выше, в который мы предоставляли доступ на запись остальным пользователям, можно было бы записать так:

chmod 646 testfile.txt

Если, например, этот файл будет скриптом, который предназначен для выполнения, то можем раздать права следующим образом: владелец может читать, редактировать и запускать этот скрипт (4+2+1=7), а члены группы и остальные пользователи будут иметь право только просматривать и также выполнять его (4+1=5). Теперь команда может быть следующей:

chmod 755 testfile.txt

Выполните, вызовите на экран содержимое каталога и проверьте, как изменилась строка, определяющая права доступа к файлу. Она должна теперь выглядеть как «rwxr-xr-x».

Заключение. Права доступа к файлам и директориям

В этот раз мы начали знакомиться с правами доступа к объектам системы. Мы не рассматривали в подробностях все параметры используемых команд, т. к. нужны они далеко не всегда и следует изучать их по мере необходимости.

Надеюсь, что абракадабра типа «rwxrw-r--» превратилась в осмысленную строку, дающую нужную информацию. Также мы должны уже уметь отредактировать эту строку, разграничив права для разных пользователей.

Вас также может заинтересовать...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика