Чому я не можу перерахувати каталог із дозволами для читання?


14

Я створив каталог dі файл fвсередині нього. Тоді я давав собі лише дозволи на читання в цьому каталозі. Я розумію, це має означати, що я можу перерахувати файли (наприклад, тут ), але не можу.

will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x   3 will  wheel  102  4 Oct 08:30 .
drwxrwxrwt  16 root  wheel  544  4 Oct 08:30 ..
dr--------   3 will  wheel  102  4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>

Якщо я змінять дозволи на запис та виконання, я можу побачити файл.

will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions> 

Чому це? Я використовую MacOS.

Редагувати: з посиланням на відповідь @ ccorn, доречно, що я використовую рибу і type lsдає наступне:

will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
    command ls -G $argv
end

Дублікат не відповідає на запитання. Це означає, що ви можете зробити те, що я демонструю, що ви не можете. @ відповідь ccorn ідеальна.
wrgrs

Нічого собі, риба - це досить важливий фрагмент (спочатку) відсутньої інформації.
Стівен Кітт

Так, ти маєш рацію, я мав би це додати, але, схоже, те ж саме відбудеться і в баші, як і ти alias ls='ls -G', що, думаю, багато людей.
wrgrs

Чи для мене. Ви на MacOS? Можливо, тут є ще одне питання. Редагувати: так, я отримую іншу поведінку в Linux.
wrgrs

Відповіді:


8

Деякі препарати, просто щоб переконатися, що lsне намагаються більше речей, ніж слід:

$ unalias ls 2>/dev/null
$ unset -f ls
$ unset CLICOLOR

Демонстрація rдозволу на каталог:

$ ls -ld d
dr--------  3 ccorn  ccorn  102  4 Okt 14:35 d
$ ls d
f
$ ls -l d
ls: f: Permission denied
$ ls -F d
ls: f: Permission denied

У традиційних файлових системах Unix каталог був просто списком пар (ім'я, номер inode). Число inode - це ціле число, яке використовується в якості індексу в таблиці inode файлової системи, де зберігаються решта метаданих файлу.

rДозвіл на каталозі дозволяє перерахувати імена в ньому, але не для доступу до інформації , що зберігається в таблиці інф.узлов, тобто, отримати тип файлу, розмір файлу, права доступу до файлів і т.д., або відкриття файлу. Для цього вам потрібен xдозвіл в каталозі.

Ось чому ls -l, ls -F, lsз допомогою колірного коду і т.д. вихідних не в змозі без xдозволу, в той час як лише lsуспішно.

Один xдозвіл дозволяє доступ до inode, тобто дається чітке ім’я в межах цього каталогу, xдозволяє шукати його inode та отримувати доступ до метаданих цього каталогу:

$ chmod 100 d
$ ls -l d/f
-rw-r--r--  1 ccorn  ccorn  0  4 Okt 14:35 d/f
$ ls d
ls: d: Permission denied

Тому, щоб відкрити файл /a/b/c/fабо список його метаданих, в каталогах /, /a, /a/b, і /a/b/cмає бути надано xдозвіл.

Не дивно, що для створення записів у каталозі потрібні wі xдозволи, і дозволи:

$ chmod 100 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 200 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 300 d
$ touch d/g
$

У Вікіпедії є короткий огляд у статті про дозволи файлової системи .


Дивовижний. /bin/ls dпоказує вміст для мене. Спасибі!
wrgrs

Гаразд, це була проблема переосмислення (з -Gкольоровим виведенням, якому потрібні метадані, таким чином, xperms). Тому мої препарати з unalias lsі unset CLICOLOR. Я повинен був також додати, unset -f lsщоб видалити будь-яке таке визначення функції. Відредаговано.
ccorn


4

Щоб прочитати каталог, ви також повинні мати можливість пройти до нього (біт x). Отже, як мінімум, вам потрібен rx для каталогу, щоб мати можливість отримати доступ до нього будь-яким способом.


2
Ні, ви цього не робите; lsвсе ще має бути можливість перелічити файли в каталозі, навіть якщо каталог не виконується.
Стівен Кітт

Ви можете вимкнути дозвіл на читання. Тоді ви зможете отримати доступ до файлів, але не перелічити вміст каталогу.
Kusalananda

@Kusalananda - хороший момент, бо я цим час від часу користуюсь.
Сорук

@Stephen Kitt - можливо, ДОТРІБНО, але реалізація така, що ні.
Сорук

1
@Soruk, і тому залишається питання: чому це не так?
Стівен Кітт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.