ОП.05Права доступа, владельцы и umaskзанятие 6Материалы

Часть 1 из 7

Права в строке ls -l

В этой части подготовим учебный каталог, разберём строку вывода ls -l по полям и вспомним, какая из трёх троек прав действует для процесса.

  1. 1.1 Учебный набор
  2. 1.2 Строка ls -l по полям
  3. 1.3 Чья тройка действует

1.1 Учебный набор

На прошлом занятии мы создавали пользователей и группы и настраивали общий каталог командой chmod 2770. На этом занятии разберём, что каждое право разрешает файлу и каталогу, как права записываются буквами и числами, кто может менять владельца и какие права получают новые файлы.

Для опытов нужен каталог с файлами разных видов и два пользователя, кроме вас. Их создаёт скрипт perms-lab-setup.sh из материалов занятия. Он создаёт каталог ~/perm-lab с отчётом, скриптом резервного копирования, файлом с паролем и двумя подкаталогами, а также учётные записи anna и boris в группе devteam. Если anna и boris уже есть после занятия 5, скрипт их не пересоздаёт.

Порядок действийПодготовка набора
  1. 1
    Скачайте perms-lab-setup.sh и perms-lab-check.sh из раздела «Материалы». Firefox сохраняет файлы в ~/Downloads.
  2. 2
    Откройте perms-lab-setup.sh в текстовом редакторе и прочитайте команды: скрипт создаёт учётные записи через sudo.
  3. 3
    Выполните bash ~/Downloads/perms-lab-setup.sh. Последняя строка вывода начинается со слова Ready.

1.2 Строка ls -l по полям

Команда ls -l выводит о каждом файле одну строку. На этом занятии нужны тип объекта, права, владелец и группа.

ПолеПримерЧто означает
тип-, d, lпервый символ: - — обычный файл, d — каталог, l — символическая ссылка
права владельцаrw-символы 2–4: чтение, запись, выполнение для владельца
права группыr--символы 5–7: то же для участников группы файла
права остальныхr--символы 8–10: для всех остальных пользователей
число ссылок1сколько имён у файла; на этом занятии не понадобится
владелецubuntuпользователь, которому принадлежит файл
группаubuntuгруппа файла: к ней применяется вторая тройка

В каждой тройке позиции постоянные: первая — r (read, чтение), вторая — w (write, запись), третья — x (execute, выполнение). Прочерк на позиции означает, что права нет. Поэтому r-x читается как «чтение и выполнение, без записи».

Команда stat выводит сведения о файле из его inode. С ключом -c она печатает только нужные поля по шаблону: %A — права буквами, %a — те же права числом, %U — владелец, %G — группа, %n — имя. Число рядом с буквами — те же права в другой записи: 644 означает rw-r--r--.

В терминалеУчебный набор и строки ls -l
  1. bash ~/Downloads/perms-lab-setup.sh# создать ~/perm-lab, anna и boris
    что делает

    Что делает команда. Выполняет скрипт набора: создаёт ~/perm-lab с файлами для опытов и пользователей anna и boris в группе devteam.

    По частям:

    bash
    запустить оболочку bash и выполнить команды из файла
    ~/Downloads/perms-lab-setup.sh
    файл скрипта (путь от домашнего каталога)
  2. cd ~/perm-lab
    что делает

    Что делает команда. Переходит в учебный каталог занятия.

    По частям:

    cd
    сменить текущий каталог
    ~/perm-lab
    куда перейти (путь от домашнего каталога)
  3. ls -l# строки файлов и каталогов
    что делает

    Что делает команда. Выводит подробные строки файлов текущего каталога: тип, права, владельца, группу, размер и дату.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
  4. stat -c '%A %a %U %G %n' report.txt docs /etc/shadow# права буквами и числом
    что делает

    Что делает команда. Выводит для трёх объектов права буквами и числом, владельца, группу и имя.

    По частям:

    stat
    вывести сведения о файле из inode
    -c '%A %a %U %G %n'
    вывести только поля по шаблону '%A %a %U %G %n'
    report.txt
    о каком файле (путь относительно текущего каталога)
    docs
    о каком файле
    /etc/shadow
    о каком файле (абсолютный путь)
  5. ls -ld /tmp ~# права двух системных каталогов
    что делает

    Что делает команда. Выводит строки самих каталогов /tmp и домашнего каталога, не заходя внутрь.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    -d
    показать сам каталог, а не его содержимое
    /tmp
    что показать (абсолютный путь)
    ~
    что показать (домашний каталог)
Результат

в ~/perm-lab три файла с правами rw-r--r-- и два каталога rwxr-xr-x; у /etc/shadow права 640, у /tmp в конце стоит t.

Снимок 1.1Ubuntu 24.04
  1. 1тип: - — обычный файл, d — каталог
  2. 2права владельца: rw-
  3. 3права группы: r--
  4. 4права остальных: r--
  5. 5владелец и группа файла
  6. 6stat: те же права буквами и числом 644
  7. 7домашний каталог закрыт для остальных: ---
  8. 8/tmp: в последней позиции t вместо x
Строки ls -l и вывод stat для файлов набора и системных объектов.Весь снимок ↗

Строки ls -l и вывод stat для файлов набора и системных объектов.

Что показывает снимок. Скрипт создал набор; у файлов права rw-r--r--, у каталогов rwxr-xr-x; stat выводит те же права числами 644 и 755; домашний каталог закрыт для остальных, у /tmp в конце стоит t.

Где это пригодится. Разбор любой ошибки Permission denied начинается со строки ls -l: по ней видно владельца, группу и тройку, которая действует для процесса.

1.3 Чья тройка действует

Права проверяются для процесса: у процесса есть UID пользователя, который его запустил, и список групп. Ядро сравнивает их с владельцем и группой файла и выбирает одну тройку по порядку. Если UID процесса совпадает с владельцем — действуют права владельца. Иначе, если среди групп процесса есть группа файла, — права группы. Во всех остальных случаях — права остальных. Тройки не складываются: применяется первая подходящая.

Правило «первая подходящая тройка» даёт неожиданный результат, если права владельца меньше прав группы. Файл с правами ---rw-r-- его владелец прочитать не сможет, хотя состоит в группе файла: для владельца проверяется только первая тройка. Такие права встречаются редко, но по этому порядку разбирают любой отказ Permission denied.

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

Итоги части 1

  • Первый символ строки ls -l — тип объекта, следующие девять — три тройки прав: владелец, группа, остальные.
  • В тройке позиции постоянны: r, w, x; прочерк — права нет.
  • stat -c '%A %a %U %G %n' выводит права буквами и числом, владельца, группу и имя.
  • Ядро применяет одну тройку: владельца, если UID совпал; группы, если группа файла есть у процесса; иначе остальных.

В отчётСнимок ls -l с подписанными полями одной строки.

Открыть в отдельной вкладке ↗