Доступ до файлів у каталозі без дозволу x?


19

У мене виникають проблеми з розумінням того, що означає дозвіл на виконання для каталогів. Чи правильно я розумію, що все в каталозі, для якого користувач не має прав x, є недоступним, навіть якщо речі, що знаходяться в каталозі, надають користувачеві певні права?

Або користувач все ще матиме прямий доступ до речей у каталозі, але просто не може перерахувати те, що знаходиться в каталозі?

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

Відповіді:


20

x біт для каталогу також називається бітом пошуку. Насправді це дозволяє вам отримати доступ до вкладок файлів, перелічених всередині папки. Тож якщо ви хочете отримати доступ до /home/user/foo/bar.txt, ви повинні мати доступ до пошуку для кожного предка bar.txt

Цитування зі сторінки

Оскільки каталоги не використовуються так само, як звичайні файли, дозволи працюють незначно (але лише трохи) по-різному. Для спроби перерахування файлів у каталозі потрібен дозвіл на читання для каталогу, але не для файлів всередині. Спроба додати файл до каталогу, видалити файл із каталогу або перейменувати файл, усі вимагають дозволу на запис для каталогу, але (можливо, на диво) не для файлів всередині. Дозвіл на виконання не поширюється на каталоги (каталог також не може бути програмою). Але цей біт дозволу повторно використовується для каталогів для інших цілей.

Дозвіл на виконання потрібен для каталогу, щоб мати змогу входити в нього (тобто зробити деякий каталог вашою поточною робочою каталогом).

Виконати потрібно в каталозі для доступу до інформації про вкладення файлів всередині. Це потрібно для пошуку в каталозі, щоб прочитати вставки файлів всередині. З цієї причини дозвіл на виконання в каталозі часто називається дозволом пошуку.

Дозвіл на пошук потрібен у багатьох поширених ситуаціях. Розглянемо команду cat / home / user / foo. Ця команда чітко вимагає дозволу читання для файлу foo. Але якщо у вас немає дозволу на пошук у каталогах /, / home та / home / user, кішка не може знайти вкладку foo і, отже, не може її прочитати! Вам потрібен дозвіл на пошук у кожному каталозі предків для доступу до inode будь-якого файлу (або каталогу), і ви не можете прочитати файл, якщо не зможете потрапити до його inode.

Прочитайте докладніше в розділі каталогу дозволів файлів.

Оновлення: Лев поставив дуже гарне запитання. Якщо ми знаємо inode, чи можемо ми отримати доступ до файлу з каталогу, в якому його біт не встановлено? Я вважаю, що ми не повинні цього робити. Я не перевіряв це програмою c, а скористався зручними командами bash, щоб підтвердити це.

user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x  3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x  2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user    8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
  File: `level1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 808h/2056d  Inode: 95494       Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1 
  File: `level1/file1'
  Size: 8           Blocks: 8          IO Block: 4096   regular file
Device: 808h/2056d  Inode: 60775       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1 
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ?                ? file1
d????????? ? ? ? ?                ? ..
d????????? ? ? ? ?                ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775

2
Отже, якщо я маю номер inode файла / каталогу всередині каталогу без прав на пошук, я б мав доступ до нього, доки дозволяють його дозволи? (Отримати номер inode, не маючи змоги зробити статистику, досить важко, хоча я гадаю.)
Лев

@Leo Я вважаю, ми не повинні це зробити. Я оновив відповідь. Якщо у вас є невелика заглушка, перевірте її та повідомте нас.
Amey Jah

1
@AmeyJah, насправді, я думаю, що ти можеш. Поміркуйте, що станеться, коли ви жорстко зв’яжете файл з іншим каталогом, до якого у вас є дозвіл. Той самий inode, але ви можете прочитати його. Іншими словами, дозвіл на читання не залежить від того, що система шукає всі папки, до яких може належати inode, і бачить, чи є у них біт x. Хоча чудова відповідь. Дуже дякую.
користувач1477

@AmeyJah ls , stat тощо використовуйте stat (2) і т. Д. Про всяк випадок, про який ви цього не знали. Я міг би написати програму C, але ваш тест робить усе, що програма показала б, але впевнений, що це може зробити більше, сенс такий же: він використовує системні дзвінки (розділ 2). Виклики бібліотеки (розділ 3) вищого рівня, ніж системні дзвінки, але це нічого не змінює (наприклад, видалити (3) використовує rmdir (2) для каталогів і від’єднає (2) для файлів).
Прифтан

5

Оскільки ви просите каталоги:

засоби для читання: прочитати вміст, тобто перерахувати їх з ls.

написати засоби: запишіть до директора. тобто створення файлів або підкаталогів.

Виконати засоби: увійти до цієї директорії.

читання та виконання дозволів може бути трохи складним для каталогів.

Наприклад, якщо ви читали дозволи, але не виконували їх, ви можете перелічити вміст каталогу, але не можете потрапити в нього. Також ви не можете перелічити конкретні файли чи каталоги, навіть якщо ви знаєте його назви.

Якщо ви маєте дозвіл на виконання, але не читаєте, можете запустити його, але не можете перелічити файли безпосередньо. Але, якщо ви знаєте назви файлів чи каталогів, ви можете їх перелічити.


2
Якщо ви прочитали дозвіл, але не виконуєте, ви можете перелічити (ls) вміст каталогу, але не можете отримати доступ до файлів (cat). Якщо ви маєте дозвіл на виконання, але не читаєте і знаєте назви файлів, ви можете отримати доступ до них (cat).
dash17291

2

Дозвіл на виконання в каталогах означає:

Можливість внесення записів у цей каталог та доступ до файлів у цьому каталозі.

Якщо ви не маєте xправа на свій каталог, ви не можете:

  • Введіть в каталог (наприклад: cd)
  • Не вдається отримати доступ до жодного файлу в цьому каталозі (навіть якщо ви знаєте ім'я).

Приклад:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ cd testdir
bash: cd: testdir: Permission denied

$ cat testdir/a
cat: testdir/a: Permission denied

$ chmod 700 testdir
$ cat testdir/a
Some text.

Прочитайте Linux Confusion Confusion pt 2, щоб добре ознайомитись з цією темою.

Єдине, що, xмабуть, не перешкоджає дозволу - це отримати доступ до імен файлів у цьому каталозі.

Приклад:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a  b
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.