Выполнитесь по сравнению с битом Чтения. Как делают полномочия каталога в работе Linux?

Существует два аспекта:

  1. Существуют некоторые компиляторы C, которые не могут проанализировать последнюю строку, если она не заканчивается новой строкой. Стандарт C указывает, что файл C должен закончиться новой строкой (C11, 5.1.1.2, 2.) и что последняя строка без новой строки приводит к неопределенному поведению (C11, J.2, 2-й объект). Возможно, по историческим причинам, потому что некоторый поставщик такого компилятора был частью комитета, когда первый стандарт был записан. Таким образом предупреждение GCC.

  2. diff программы (как используемый git diff, GitHub и т.д.), показывают линию за линией различия между файлами. Они обычно печатают сообщение, когда только один файл заканчивается новой строкой, потому что еще Вы не видели бы это различие. Например, если бы единственной разницей между двумя файлами является присутствие последнего символа новой строки, без подсказки было бы похоже, что оба файла были тем же, когда diff и cmp возвратите код выхода неравный успех и контрольные суммы файлов (например, через md5sum) не соответствовать.

391
12.12.2016, 07:31
7 ответов

При применении полномочий к каталогам на Linux биты полномочий имеют различные значения, чем на регулярных файлах.

  • Чтение укусило (r) позволяет нужному пользователю перечислять файлы в рамках каталога
  • Запись укусила (w) позволяет нужному пользователю создавать, переименовывать, или удалять файлы в рамках каталога и изменять атрибуты каталога
  • Выполнить бит (x) позволяет нужному пользователю вводить каталог, и файлы доступа и каталоги внутри
  • Липкий бит (T, или t если выполнить бит установлен для других), указывает, что файлы и каталоги в рамках того каталога могут только быть удалены или переименованы их владельцем (или корень)
364
27.01.2020, 19:28
  • 1
    Большой ответ, но я думаю, что последнее предложение вводит в заблуждение. Ни одни из этих полномочий не могут быть переопределены на файл на самом деле. Здесь “доступ” немного неоднозначен: +x на каталоге предоставляет доступ в файлы inodes через этот определенный каталог (ничто меньше, ничто больше, хорошо …, возможно, chdir потребности +x также). Чтобы считать или записать содержание одного файла, пользователю также нужно +r/+w на этом файле, но это - отличные полномочия (они ничего не переопределяют). –  Stéphane Gimenez 22.09.2011, 16:06
  • 2
    Неизменный флаг является конкретной файловой системой, и это точно не переопределит те полномочия, вот почему я думаю, что последнее предложение вводит в заблуждение :-) –  Stéphane Gimenez 22.09.2011, 16:18
  • 3
    я думаю, что могло бы быть полезно упомянуть ACL в этом и других ответах, вызвать их приложение для некоторых каталогов, может вводить в заблуждение, если Вы будете считать только информацию обеспеченной Chris Down –  user907860 29.12.2014, 14:30
  • 4
    Кажется, что этот ответ не упоминает, что совместное воздействие записи укусило и выполнило бит, как ответ Baldrick упоминает ниже? т.е. если у Вас только есть разрешение записи, но не разрешение выполнения, затем это довольно бесполезно. –  xji 16.02.2015, 10:55
  • 5
    @StéphaneGimenez"+x на каталоге предоставляет доступ в файлы inodes" - Это походит на хороший nemonic, но возможно не рассказывает целую историю? Без выполнить набора битов на каталоге Вы не можете изменить имя файла файла в том каталоге. Я задаюсь вопросом, почему это, потому что имя файла хранится в записи каталога, не inode. очень интересный –  Kevin Wheeler 18.12.2015, 00:11

Во-первых, думайте: Что такое каталог? Это - просто список объектов (файлы и другие каталоги), это живет в. Так: каталог = список имен.

Считайте бит =, Если установлено, можно прочитать этот список. Так, например, если Вам назвали каталог poems:

  • Вы можете ls poems и Вы получите список объектов, живущих в (-l не покажет деталей!).
  • Можно использовать завершение командной строки т.е. touch poems/so <TAB> poems/somefile.
  • Вы не можете сделать poems Ваш рабочий каталог (т.е. cd в него).

Запишите бит =, Если установлено, можно изменить этот список, т.е. Вы можете {добавлять, переименовывать, удалять} имена на нем. Но! Можно на самом деле сделать это, только если выполнить бит установлен также.

Выполнитесь бит = Делают этот каталог Вашим рабочим каталогом т.е. cd в него. Вам нужно это разрешение, если Вы хотите:

  • доступ (чтение, запишите, выполнитесь), объекты, живущие в.
  • измените сам список т.е. добавьте, переименуйте, удалите имена на нем (конечно, запись укусила, должен быть установлен на каталоге).

Интересный случай 1: Если у Вас есть запись +, выполняют полномочия на каталоге, Вы можете {удалять, переименовывать} объекты, живущие в том, даже если у Вас нет записи perimission на тех объектах. (используйте липкий бит для предотвращения этого),

Интересный случай 2: Если Вы имеете, выполняют (но не запись) разрешение на каталоге, И у Вас есть разрешение записи на файле, живущем в, Вы не можете удалить файл (потому что это включает удаление его из списка). Однако можно стереть его содержание, например, если это - текстовый файл, можно использовать vi, чтобы открыть его и удалить все. Файл все еще будет там, но это будет пусто.

Сводка:

Считайте бит =, можно считать имена в списке.
Запишите бит =, Вы можете {добавлять, переименовывать, удалять} имена в списке, ЕСЛИ выполнить бит установлен также.
Выполните бит =, можно сделать этот каталог рабочим каталогом.

PS: статья, упомянутая Kusalananda, является хорошим чтением.

265
27.01.2020, 19:28
  • 1
    При Размышлении о каталоге, поскольку список делает вещи более ясными и логичными. –  Trismegistos 09.01.2014, 10:51
  • 2
    Большой ответ, но слишком сфокусированный на термине "рабочий каталог". Мне нужно x бит для любого доступа к этому файлу: для cat a/b/c/d, Мне нужно x обдумал все a, b и c, даже если я не использую их в качестве cwd. –  glglgl 03.11.2014, 11:24
  • 3
    Это - то, где я узнал, что Вы не можете записать, если это не исполняемый файл также! Случай 2 является также интересным, большим ответом! –  Mirko 30.11.2014, 03:56
  • 4
    Другое примечание - это, даже если Вы имеете x разрешение на каталоге, если Вы не имеете x разрешение на файле в, Вы не можете действительно "выполнить" файл. Вы можете только cat это, например, но Вы не можете выполнить сам файл. –  xji 16.02.2015, 11:19
  • 5
    Если Вы хотите ls -l работа для папки, нуждайтесь в обоих r и x разрешение. –  Eric Wang 12.06.2015, 12:48

Вот хорошая статья об этом.

Сводка:

Каталог с x набор битов позволяет пользователю cd (измените каталог) в этот каталог и доступ файлы в нем.

Подробнее:

  • Читайте (r)

    Способность считать названия файлов, хранивших в этом каталоге.

  • Запишите (w)

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

  • Выполнитесь (x)

    Способность к cd в этот каталог и доступ файлы в этом каталоге.

Вот несколько примеров, которые должны помочь понять:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

В статье Hacking Linux Exposed существует еще больше информации.

43
27.01.2020, 19:28

Я подготовил эту таблицу со всеми возможными разрешениями и их практическими последствиями.

linux directory permissions

(*) Только имена файлов : другие атрибуты, такие как размер или дата, недоступны. Например. вы можете использовать клавишу табуляции для автозаполнения, но не команду ls.

Некоторые мысли :

  • Когда X не установлен , R и W в основном бесполезны. Только
  • X отключение RW дает вам ложное ощущение безопасности, поскольку вы можете вслепую читать и записывать содержимое файла и получать доступ к подкаталогам. Вы должны быть уверены, что все прямые дочерние элементы каталога имеют явные разрешения.
  • В редких случаях вы будете использовать другие значения, кроме:
    • 0 : нет доступа.
    • 1 : минимальный доступ, разрешающий перемещение.
    • 5 : Разрешить чтение / запись, но не изменять структуру самого дерева каталогов.
    • 7 : Полный доступ.
79
20.08.2021, 13:33

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

В качестве примера возьмем путь /a/b/c.txt, скажем, у пользователя есть 1 )разрешение на выполнение /и /a; 2 )имеет разрешение на чтение /a/b; 3 )разрешение на чтение и запись на /a/b/c.txt.

  • Пользователь не сможет прочитать (список )/a, так как у него нет разрешения на чтение. Но разрешение пути не терпит неудачу.

  • Пользователь сможет читать (список )/a/b, поскольку у него есть разрешение на выполнение /, /aи разрешение на чтение /a/b. Обратите внимание, что при чтении /a/bвидно имя файла c.txt, но метаданные (, например. размер файла ), а содержимое — нет, потому что имя файла хранится вместе с каталогом, а не с файлом, а метаданные хранятся в иноде файла.

  • Пользователю не удастся прочитать /a/b/c.txt, потому что при разрешении пути от /до /aи до /a/bпроисходит сбой в /a/b, поскольку у пользователя нет разрешения на выполнение.

См. также , как путь разрешается в файл .

4
20.08.2021, 13:33

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

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

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

Я пишу бит (с ), потому что для каждого действия есть три бита. Существует один бит чтения для владельца, один бит чтения для группы (s )и бит чтения для всех остальных (других ). Если какой-либо из этих трех битов установлен для определенного пользователя, у этого пользователя активен бит чтения. Неважно, как этот бит был обнаружен активным, либо u ser, g roup, либо o ther, он дает одинаковые эффективные результаты.

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

Вот почему бит чтения для каталогов требуется :для управления тем, кому разрешено перечислять содержимое комнаты (названия книг ).

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

2
20.08.2021, 13:33

доступ (2 )— справочная страница Linux

A file is accessible only if the permissions on each of the directories in the path prefix of pathname grant search (i.e., execute) access. If any directory is inaccessible, then the access() call fails, regardless of the permissions on the file itself.

путь _разрешение (7 )— страница руководства Linux

Эта справочная страница объясняет, как разрешается имя пути в отношении разрешений

Step 2: walk along the path

If the process does not have search permission on the current lookup directory, an EACCES error is returned ("Permission denied").

«Разрешение на поиск» означает разрешение на выполнение каталогов.

-1
20.08.2021, 13:33

Теги

Похожие вопросы