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

Часть 2 из 7

Что разрешают r, w и x

В этой части проверим на опытах, что каждое право разрешает обычному файлу и каталогу, и разберём, почему удаление файла зависит от прав каталога.

  1. 2.1 Права файла
  2. 2.2 Права каталога
  3. 2.3 Удаление зависит от каталога

2.1 Права файла

r у файла разрешает читать содержимое: cat, less, копирование. w разрешает изменять содержимое: редактор, дописывание через >>. x разрешает запускать файл как программу по его пути.

Право x нужно, только когда файл запускают напрямую: ./backup.sh. Команда bash backup.sh запускает программу bash, а она читает скрипт как обычный текст, поэтому ей хватает права r. По той же причине скрипт без x можно выполнить через bash; запуск запрещает только снятый r.

ПравоДля файла разрешаетПример команды
rчитать содержимоеcat report.txt, cp report.txt copy.txt
wизменять содержимоеecho text >> report.txt, сохранение в редакторе
xзапускать как программу./backup.sh

Ключ u-r команды chmod снимает у владельца право чтения, u+r возвращает его. В опытах этой части меняется одно право у владельца: u — владелец, - — снять, + — добавить.

В терминалеЧтение и запуск файла
  1. chmod u-r report.txt# снять у владельца чтение
    что делает

    Что делает команда. Снимает у владельца право чтения файла report.txt.

    По частям:

    chmod
    изменить права доступа
    u-r
    права буквами: снять у владельца право r
    report.txt
    какой файл или каталог (путь относительно текущего каталога)
  2. cat report.txt# прочитать нельзя
    что делает

    Что делает команда. Пытается вывести содержимое report.txt; без права r получает отказ.

    По частям:

    cat
    вывести содержимое файла
    report.txt
    какой файл вывести (путь относительно текущего каталога)
  3. chmod u+r report.txt# вернуть чтение
    что делает

    Что делает команда. Возвращает владельцу право чтения report.txt.

    По частям:

    chmod
    изменить права доступа
    u+r
    права буквами: добавить владельцу право r
    report.txt
    какой файл или каталог (путь относительно текущего каталога)
  4. ./backup.sh# запуск по пути: x нет
    что делает

    Что делает команда. Запускает скрипт backup.sh по пути; для этого нужно право x.

    По частям:

    ./backup.sh
    запустить файл backup.sh из текущего каталога как программу
  5. bash backup.sh# bash читает скрипт как текст
    что делает

    Что делает команда. Запускает bash, который читает скрипт как текст и выполняет его; хватает права r.

    По частям:

    bash
    запустить оболочку bash и выполнить команды из файла
    backup.sh
    файл скрипта (путь относительно текущего каталога)
  6. chmod u+x backup.sh# добавить владельцу выполнение
    что делает

    Что делает команда. Добавляет владельцу право выполнения backup.sh.

    По частям:

    chmod
    изменить права доступа
    u+x
    права буквами: добавить владельцу право x
    backup.sh
    какой файл или каталог (путь относительно текущего каталога)
  7. ./backup.sh
    что делает

    Что делает команда. Запускает скрипт backup.sh по пути; для этого нужно право x.

    По частям:

    ./backup.sh
    запустить файл backup.sh из текущего каталога как программу
  8. ls -l report.txt backup.sh
    что делает

    Что делает команда. Выводит строки двух файлов, чтобы сравнить их права.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    report.txt
    что показать (путь относительно текущего каталога)
    backup.sh
    что показать (путь относительно текущего каталога)
Результат

без r файл не читается; без x скрипт не запускается по пути, но запускается через bash; после u+x в строке появляется rwx.

Снимок 2.1Ubuntu 24.04
  1. 1без r cat получает отказ
  2. 2без x запуск по пути запрещён
  3. 3bash запускает скрипт, ему хватает r
  4. 4после chmod u+x скрипт запускается
  5. 5у владельца теперь rwx
Чтение файла без r, запуск скрипта без x и с x.Весь снимок ↗

Чтение файла без r, запуск скрипта без x и с x.

Что показывает снимок. Без r файл не читается; без x скрипт не запускается по пути, но bash выполняет его, прочитав как текст; после u+x у владельца rwx.

Где это пригодится. Скрипт, скачанный из интернета, запускают по пути только после chmod u+x; сообщение Permission denied при запуске чаще всего означает, что x нет.

2.2 Права каталога

Каталог — это список записей «имя → номер inode». Права каталога относятся к этому списку; права файлов внутри задаются отдельно. r разрешает читать список имён. x разрешает входить в каталог и обращаться к файлам по имени: открыть файл, узнать его свойства, перейти внутрь командой cd. w разрешает менять список: создавать, удалять и переименовывать файлы.

Права каталога можно сравнить с комнатой со стеклянной дверью. r — смотреть через стекло и видеть, что внутри лежит. x — открыть дверь ключом и взять вещь, название которой знаете, даже если стекло закрашено. w — приносить вещи в комнату и выносить их. Без x вы видите вещи через стекло, но взять ни одну не можете.

Права r и x у каталога действуют независимо. Каталог с r без x: ls выводит имена, но не может узнать свойства файлов и сообщает об ошибке для каждого, а открыть файл нельзя. Каталог с x без r: список не читается, но файл с известным именем открывается. Второе сочетание иногда применяют для каталогов, в которых файлы раздают по прямым ссылкам.

В терминалеКаталог без x и без r
  1. chmod u-x docs# снять проход
    что делает

    Что делает команда. Снимает у владельца право прохода в каталог docs.

    По частям:

    chmod
    изменить права доступа
    u-x
    права буквами: снять у владельца право x
    docs
    какой файл или каталог
  2. ls docs# имена видны, свойства — нет
    что делает

    Что делает команда. Выводит имена файлов каталога docs.

    По частям:

    ls
    вывести содержимое каталога
    docs
    что показать
  3. cat docs/notes.txt# файл не открыть
    что делает

    Что делает команда. Пытается прочитать файл внутри каталога docs.

    По частям:

    cat
    вывести содержимое файла
    docs/notes.txt
    какой файл вывести (путь относительно текущего каталога)
  4. cd docs# войти нельзя
    что делает

    Что делает команда. Пытается войти в каталог docs.

    По частям:

    cd
    сменить текущий каталог
    docs
    куда перейти
  5. chmod u+x docs# вернуть проход
    что делает

    Что делает команда. Возвращает владельцу право прохода в docs.

    По частям:

    chmod
    изменить права доступа
    u+x
    права буквами: добавить владельцу право x
    docs
    какой файл или каталог
  6. chmod u-r docs# снять чтение списка
    что делает

    Что делает команда. Снимает у владельца право читать список имён docs.

    По частям:

    chmod
    изменить права доступа
    u-r
    права буквами: снять у владельца право r
    docs
    какой файл или каталог
  7. ls docs# список не читается
    что делает

    Что делает команда. Выводит имена файлов каталога docs.

    По частям:

    ls
    вывести содержимое каталога
    docs
    что показать
  8. cat docs/notes.txt# файл по имени открывается
    что делает

    Что делает команда. Пытается прочитать файл внутри каталога docs.

    По частям:

    cat
    вывести содержимое файла
    docs/notes.txt
    какой файл вывести (путь относительно текущего каталога)
  9. chmod u+r docs
    что делает

    Что делает команда. Возвращает владельцу право читать список имён docs.

    По частям:

    chmod
    изменить права доступа
    u+r
    права буквами: добавить владельцу право r
    docs
    какой файл или каталог
  10. ls -ld docs# права восстановлены
    что делает

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

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    -d
    показать сам каталог, а не его содержимое
    docs
    что показать
Результат

без x имя файла видно, но файл и каталог закрыты; без r список закрыт, но файл по имени читается.

Снимок 2.2Ubuntu 24.04
  1. 1без x: ls видит имя notes.txt, но не может прочитать его свойства
  2. 2без x файл не открыть и в каталог не войти
  3. 3без r список имён не читается
  4. 4без r файл с известным именем открывается
Каталог docs без права x и без права r.Весь снимок ↗

Каталог docs без права x и без права r.

Что показывает снимок. Без x у каталога имя файла видно, но ни файл, ни каталог не открываются; без r список не читается, а файл с известным именем открывается.

Где это пригодится. Если пользователь не может открыть файл с правильными правами, проверяют x у каждого каталога на пути к нему — так закрыт домашний каталог от чужих.

Схема · что разрешают права каталога
Права владельца на каталог docs — нажмите, чтобы снять или вернуть

    2.3 Удаление зависит от каталога

    Удаление файла меняет список каталога, содержимое файла при этом не трогается. Поэтому решает право w у каталога. В каталоге без w нельзя ни создать, ни удалить файл, даже если у самого файла права rw-. И наоборот: файл с правами r--r--r-- удаляется, если у каталога есть w.

    rm перед удалением файла без права записи задаёт вопрос remove write-protected regular file?. Вопрос задаёт сама программа rm, система удаление не запрещает: ответ y удалит файл. Ключ -f отключает вопрос.

    В терминалеКаталог без w и файл без w
    1. chmod u-w docs# снять запись в каталог
      что делает

      Что делает команда. Снимает у владельца право менять список каталога docs.

      По частям:

      chmod
      изменить права доступа
      u-w
      права буквами: снять у владельца право w
      docs
      какой файл или каталог
    2. touch docs/new.txt# создать нельзя
      что делает

      Что делает команда. Пытается создать файл в каталоге docs.

      По частям:

      touch
      создать пустой файл
      docs/new.txt
      какой файл (путь относительно текущего каталога)
    3. rm docs/notes.txt# удалить нельзя
      что делает

      Что делает команда. Пытается удалить файл из каталога docs.

      По частям:

      rm
      удалить файл
      docs/notes.txt
      что удалить (путь относительно текущего каталога)
    4. chmod u+w docs
      что делает

      Что делает команда. Возвращает владельцу право менять список каталога docs.

      По частям:

      chmod
      изменить права доступа
      u+w
      права буквами: добавить владельцу право w
      docs
      какой файл или каталог
    5. chmod a-w report.txt# снять запись у файла для всех
      что делает

      Что делает команда. Снимает право записи у всех трёх троек файла report.txt.

      По частям:

      chmod
      изменить права доступа
      a-w
      права буквами: снять у всех право w
      report.txt
      какой файл или каталог (путь относительно текущего каталога)
    6. ls -l report.txt
      что делает

      Что делает команда. Выводит строку файла report.txt с правами.

      По частям:

      ls
      вывести содержимое каталога
      -l
      подробный список: права, владелец, группа, размер
      report.txt
      что показать (путь относительно текущего каталога)
    7. rm report.txt# rm спрашивает
      что делает

      Что делает команда. Удаляет report.txt; у файла без права записи rm сначала спрашивает подтверждение.

      По частям:

      rm
      удалить файл
      report.txt
      что удалить (путь относительно текущего каталога)
    8. n# не удалять
    9. ls -l report.txt# файл на месте
      что делает

      Что делает команда. Выводит строку файла report.txt с правами.

      По частям:

      ls
      вывести содержимое каталога
      -l
      подробный список: права, владелец, группа, размер
      report.txt
      что показать (путь относительно текущего каталога)
    10. chmod u+w report.txt
      что делает

      Что делает команда. Возвращает владельцу право записи report.txt.

      По частям:

      chmod
      изменить права доступа
      u+w
      права буквами: добавить владельцу право w
      report.txt
      какой файл или каталог (путь относительно текущего каталога)
    Результат

    без w у каталога файлы не создаются и не удаляются; у файла без w rm только спрашивает подтверждение.

    Снимок 2.3Ubuntu 24.04
    1. 1без w у каталога запись в список запрещена
    2. 2r--r--r--: у файла записи нет ни у кого
    3. 3rm только спрашивает: удаление решает каталог
    4. 4после ответа n файл на месте
    Без w у каталога нельзя создать и удалить файл; файл без w rm удаляет после вопроса.Весь снимок ↗

    Без w у каталога нельзя создать и удалить файл; файл без w rm удаляет после вопроса.

    Что показывает снимок. Без w у каталога файлы не создаются и не удаляются; у файла без w rm только спрашивает подтверждение, удаление решает каталог.

    Где это пригодится. Чтобы защитить файлы от удаления, права меняют у каталога; права самого файла защищают только содержимое.

    Итоги части 2

    • У файла: r — читать, w — изменять, x — запускать по пути; bash скрипт хватает права r.
    • У каталога: r — читать список имён, x — входить и обращаться к файлам по имени, w — создавать, удалять и переименовывать файлы.
    • Без x у каталога файлы недоступны, даже если имена видны.
    • Удалить файл можно, если у каталога есть право w; права самого файла на удаление не влияют.

    В отчётСнимок с опытом «каталог без x и без r» и объяснение каждой ошибки.

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